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

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

Marsh Posté le 11-07-2017 à 18:00:40    

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>

Reply

Marsh Posté le 11-07-2017 à 18:00:40   

Reply

Marsh Posté le 11-07-2017 à 18:21:28    

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
Reply

Marsh Posté le 13-07-2017 à 05:23:25    

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]

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed