Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Aide | Shop Recherche
1299 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Transferer des données d’une table vers une autre table via checkbox

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Transferer des données d’une table vers une autre table via checkbox

n°2303217
abdoulayec​oumba
Posté le 11-07-2017 à 18:00:40  profilanswer
 

Bonjour,
J’ai une table qui s’appelle  ‘’eleves’’ et qui est composée de 3 colonnes : « id » , « prenom » et « classe » je veux lister tous les enregistrements contenus dans cette table dans un tableau qui aura 4 colonnes : :« id » , « prenom » , « classe » et une dernière colonne qui contiendra pour chaque enregistrement une case à cacher .
Jusque-là tout se passe bien, mon tableau s’affiche correctement. Maintenant je souhaiterais une fois le tableau affiché effectuer des sélections parmi les enregistrements du tableau via les cases à cocher, ensuite insérer toutes ces sélections dans une nouvelle table dénommé ‘’absents’’ et qui comporte les mêmes champs que la table élèves , c’est à ce niveau que ça devient corsé pour moi , voilà des jours que je cherche une solutions dans Google mais je ne trouve rien , voulez-vous m’aider SVP ça me pourri l’existence pour le moment.
Voici mon code
 

Code :
  1. <html >
  2. <body>
  3.  
  4. <form method='POST' action='checkbox_tabinsert_bdd.php'>
  5. <table border="1">
  6. <tr>
  7. <td width=''>Prénom</td>
  8. <td width=''>classe</td>
  9. <td width=''>Choix</td>
  10. </tr>
  11.  
  12. <?php
  13.        try
  14.            {
  15. // On se connecte à MySQL
  16.          $bdd = new PDO('mysql:host=localhost;dbname=comptes;charset=utf8',
  17.          'root','');
  18.             }
  19.  catch(Exception $e)
  20.            {
  21.    // En cas d'erreur, on affiche un message et on arrête tout
  22.        die('Erreur : '.$e->getMessage());
  23.            }
  24. $reponse = $bdd->query('SELECT * FROM eleves');
  25.  // On affiche chaque entrée une à une
  26.    while ($donnees = $reponse->fetch())
  27.            {
  28. echo"<tr><td>".$donnees['prenom']."</td>";
  29. echo"<td>".$donnees['classe']."</td>";
  30. echo"<td><input type='checkbox' name='choix[]' value=' ".$donnees['id']." ".$donnees['prenom']." ".$donnees['classe']." '></td>";
  31. echo"</tr>";
  32.            }
  33. $reponse->closeCursor();
  34.  
  35. ?>
  36. </table>
  37. <p>
  38. <input type="submit" value="enregistrer" name="enregistrer">
  39.  
  40.  
  41. </form>
  42.  
  43.  
  44.  
  45.  
  46. <?php
  47. if (isset($_POST['enregistrer']))
  48. {
  49.    $valeurs_selectionnees = $_POST['choix'];
  50.        if(isset($valeurs_selectionnees))
  51.          {
  52.            echo 'kes eleves absents sont :'.'<br><br />';
  53.              foreach($valeurs_selectionnees as $element)
  54.                echo $element. '<br/>';
  55.                 {
  56.                 //connection a la base de données
  57.                     try
  58.                         {
  59.                         // On se connecte à MySQL
  60.                            $bdd = new PDO('mysql:host=localhost;dbname=comptes;charset=utf8', 'root','');
  61.                         }
  62.                    catch(Exception $e)
  63.                         {
  64.                          // En cas d'erreur, on affiche un message et on arrête tout
  65.                          die('Erreur : '.$e->getMessage());
  66.                          }
  67.                         //j'enregistre les eleves sélectionnés dans la table
  68.                          $req = $bdd->prepare('INSERT INTO absents( prenom, classe) VALUES(:prenom ,:classe)');
  69.                          $req->execute(array(
  70.                          'prenom' => Je ne sais pas ce qu'il faut mettre ici
  71.                           'classe' => Je ne sais pas ce qu'il faut mettre ici,
  72.                            ));
  73.                          $req->closeCursor();
  74.                          }
  75.                 echo 'eleves reportes sur la liste des absents  '.'<br><br />';
  76.            }
  77. }
  78. ?>
  79. </body>
  80. </html>

mood
Publicité
Posté le 11-07-2017 à 18:00:40  profilanswer
 

n°2303220
pluj
Posté le 11-07-2017 à 18:21:28  profilanswer
 

Ta "modélisation" paraît bizarre (déjà ce serait plutôt l'id de l'élève qu'il faudrait insérer dans absents plutôt que de reprendre ses infos).
 
Pour commencer, ne mets pas tout ça dans ta boucle : inutile d'établir une nouvelle connexion MySQL pour chaque case cochée. Même chose pour une requête préparée, elle ne se prépare qu'une fois avant l'itération puis exécutée autant de fois que nécessaire, c'est un de leurs buts.
 
Pour revenir à la question, je pense que le plus simple, si j'ai compris, c'est de générer cette (unique) requête :

Code :
  1. INSERT INTO absents(prenom, classe)
  2.    SELECT prenom, classe
  3.        FROM eleves
  4.        WHERE id IN(/* liste des id cochés */)
  5. ;


(et pour le coup, on ne peut plus vraiment préparer la requête mais ce n'est qu'un détail)
 
En modifiant (encore que, avec la cast en int faite ci-dessous, ce n'est même pas nécessaire - à condition de virer l'espace devant l'id) :

Code :
  1. echo"<td><input type='checkbox' name='choix[]' value=' ".$donnees['id']." ".$donnees['prenom']." ".$donnees['classe']." '></td>";


En :

Code :
  1. echo"<td><input type='checkbox' name='choix[]' value='" . $donnees['id'] . "'></td>";


Parce qu'un explode là-dessus pour retrouver tes infos, ça pourrait fonctionner mais il y a bien quand même mieux (plus viable) comme approche (quid d'un Jean Charles au CM2 : prénom = Jean, classe = Charles ?)
 
Soit, tout ton if devient (si je ne me suis pas planté) :

Code :
  1. if (isset($_POST['enregistrer'], $_POST['choix']) && is_array($_POST['choix'])) {
  2.    $bdd->exec('INSERT INTO absents(prenom, classe) SELECT prenom, classe FROM eleves WHERE id IN(' . implode(', ', array_map('intval', $_POST['choix'])) . ')');
  3. }


Et de 30 lignes on passe à 3.
 
PS : si vraiment tu veux ou as besoin d'un réaffichage des élèves sélectionnés, tu peux utiliser le même principe pour faire un SELECT (tout court).


Message édité par pluj le 13-07-2017 à 15:37:17
n°2303310
abdoulayec​oumba
Posté le 13-07-2017 à 05:23:25  profilanswer
 

Merci pluj j'ai exactement suivi tes conseils et ca marche nickel merci milles foi .
Je mets le code pour ceux qui aurons a l'avenir le meme probleme  
 
code=php]
<html >  
<body>  
 
<form method='POST' action='checkbox_tabinsert_bdd.php'>
<table border="1">
<tr>
<td width=''>Prénom</td>
<td width=''>classe</td>
<td width=''>Choix</td>
</tr>
 
<?php
        try
            {
 // On se connecte à MySQL
          $bdd = new PDO('mysql:host=localhost;dbname=comptes;charset=utf8',
          'root','');
             }
  catch(Exception $e)
            {
    // En cas d'erreur, on affiche un message et on arrête tout
        die('Erreur : '.$e->getMessage());
            }
 $reponse = $bdd->query('SELECT * FROM eleves');
  // On affiche chaque entrée une à une
    while ($donnees = $reponse->fetch())
            {
echo"<tr><td>".$donnees['prenom']."</td>";
echo"<td>".$donnees['classe']."</td>";
echo"<td><input type='checkbox' name='choix[]' value=' ".$donnees['id']." '></td>";
echo"</tr>";
            }
$reponse->closeCursor();  
 
?>
</table>
<p>
<input type="submit" value="enregistrer" name="enregistrer">
 
 
</form>
 
 
 
 
<?php
 
 if (isset($_POST['enregistrer'], $_POST['choix']) && is_array($_POST['choix']))  
         {
             $bdd->exec('INSERT INTO absents(prenom, classe) SELECT prenom, classe
             FROM eleves WHERE id IN(' . implode(', ', array_map('intval', $_POST['choix'])) . ')');
    //  $bdd->closeCursor();
   }
 
      echo 'eleves reportes sur la liste des absents  '.'<br><br />';
     
 
 
?>
 
 
 
 
</body>
 
</html>
 
[/code]


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Transferer des données d’une table vers une autre table via checkbox

 

Sujets relatifs
passage de table de grande taillelister les champs d'une table en connexion odbc
ACCES Base de Données SAP-ASE 16.0 SP 2 via Internetajout d'une valeur dans résultat d'une requête d'une autre table
Des doublons se créent dans ma tableExporter données Python vers Gnuplot
Champs email en code qui renvoi vers formulaire d'inscriptionExport CSV vers XLS
Lister les différences de types de données entre les colonnes clés 
Plus de sujets relatifs à : Transferer des données d’une table vers une autre table via checkbox



Copyright © 1997-2016 Hardware.fr SARL (Signaler un contenu illicite) / Groupe LDLC / Shop HFR