éliminer des enregistrements via des cases à cocher

éliminer des enregistrements via des cases à cocher - PHP - Programmation

Marsh Posté le 28-06-2017 à 17:55:47    

Bonjour, j’ai une table  qui renferme des informations concernant des élèves avec les champs « id », « prenom », « classe ». Je veux arriver à lister le contenu de la table dans un tableau avec des cases à cocher à côté de chaque enregistrement comme un formulaire, de sorte qu’une fois je coche sur une ou plusieurs cases, j’arrive à supprimer les enregistrements correspondants dans la table.
Pour l’affichage des données avec les cases à cocher dans le tableau là j’ai aucun problème tout se passe comme je l’ai prévu.  
Je bloque lorsque j’appuie sur le bouton submit  pour effacer les enregistrements devant lesquels j’ai coché sur le tableau,  je ne sais pas là où ça coince quelqu’un peut-il m’aider c’est important pour moi. Je ne trouve pas de solution malgré mes recherches.
Voici mon code
 
le tableau (eleves.php)

Code :
  1. <html >
  2. <body>
  3. <form method='POST' action='eleves_traitement.php'>
  4. <table border="1">
  5. <tr>
  6. <td width=''>Prénom</td>
  7. <td width=''>classe</td>
  8. <td width=''>Choix</td>
  9. </tr>
  10. <?php
  11.         try
  12.             {
  13. // On se connecte à MySQL
  14.           $bdd = new PDO('mysql:host=localhost;dbname=comptes;charset=utf8',
  15.           'root','');
  16.              }
  17.   catch(Exception $e)
  18.             {
  19.     // En cas d'erreur, on affiche un message et on arrête tout
  20.         die('Erreur : '.$e->getMessage());
  21.             }
  22. $reponse = $bdd->query('SELECT * FROM eleves');
  23.   // On affiche chaque entrée une à une
  24.     while ($donnees = $reponse->fetch())
  25.             {
  26. echo"<tr><td>".$donnees['prenom']."</td>";
  27. echo"<td>".$donnees['classe']."</td>";
  28. echo"<td><input type='checkbox' name='delete[]' value='".$donnees['id']."'></td>";
  29. echo"</tr>";
  30.             }
  31. $reponse->closeCursor();
  32. ?>
  33. </table>
  34. <p>
  35. <input type="submit" value="envoyer" name="Envoyer">
  36. </form>
  37. </body>
  38. </html>


 
eleves_traitement.php

Code :
  1. <?php
  2. if (sizeof($delete)==0)
  3. {
  4. header('Location:eleves.php');
  5. exit;
  6. }
  7. else
  8. {
  9. try
  10.             {
  11. // On se connecte à MySQL
  12.           $bdd = new PDO('mysql:host=localhost;dbname=comptes;charset=utf8',
  13.           'root','');
  14.              }
  15.   catch(Exception $e)
  16.             {
  17.     // En cas d'erreur, on affiche un message et on arrête tout
  18.         die('Erreur : '.$e->getMessage());
  19.             }
  20.          $reponse = $bdd->query('SELECT * FROM eleves');
  21.          foreach ($delete as $valeur)
  22.     {
  23.               $sql="DELETE FROM eleves where id='$id'";
  24.              
  25.            }
  26. $reponse->closeCursor();
  27. echo ' Enregistrement éffacé '.'<br><br />';
  28. }
  29. ?>


Reply

Marsh Posté le 28-06-2017 à 17:55:47   

Reply

Marsh Posté le 28-06-2017 à 18:19:04    

>$sql="DELETE FROM eleves where id='$id'";
Tu devrais te renseigner sur les injections SQL! :o

 

(enfin si tu comptes exécuter cette requête, parce que dans le code présent tu ne le fais pas sauf erreur de ma part)


Message édité par rat de combat le 28-06-2017 à 18:23:11
Reply

Marsh Posté le 28-06-2017 à 19:23:02    

j'ai éssayé d'aborder le probleme sous l'angle des requettes préparées mais ca ne marche pas en fait c'est la premiere fois que j'utilise les checkbox, la requette sql delete et foreach  
 

Code :
  1. <?php
  2. if (isset($_POST['$id']))
  3. {
  4.     $valeur = ($_POST['$id']);
  5. }
  6. else
  7. {
  8. try
  9.             {
  10. // On se connecte à MySQL
  11.           $bdd = new PDO('mysql:host=localhost;dbname=comptes;charset=utf8',
  12.           'root','');
  13.              }
  14.   catch(Exception $e)
  15.             {
  16.     // En cas d'erreur, on affiche un message et on arrête tout
  17.         die('Erreur : '.$e->getMessage());
  18.             }
  19.          foreach ($delete as $valeur)
  20.     {
  21.            
  22.               $req = $bdd->prepare(DELETE FROM eleves where id=:id);
  23.          $req->execute(array(
  24.            'id' => $valeur,
  25.            ));
  26.            }
  27. $req->closeCursor();
  28. echo ' Enregistrement éffacé '.'<br><br />';
  29. }
  30. ?>

Reply

Marsh Posté le 28-06-2017 à 21:31:15    

Y'a au moins une grosse erreur de logique dans ton code: Si le formulaire renvoye quelque chose tu le sauvegardes dans $valeur et puis - tu ne fais plus rien car ton else n'est pas exécuté. Si le formulaire ne renvoye rien tu essaye d'exécuter ton else mais $valeur n'étant pas défini ou ayant une valeur quelconque (pas sûr, je ne parle pas PHP en fait :o ) ça ne risque pas de fonctionner. Aussi ton $id dans $_POST me paraît douteux (ça contient quoi $id? Je ne vois d'assignation nul part), peut-être ton formulaire n'est pas bon en plus, bref, faut débugger ça et revoir eventuellement les bases.
Je sais par lecture dans le forum qu'on peut activer des messages d'erreurs en PHP, tu as fait ça? Aussi tu peux - comme dans n'importe quel language - rajouter des echo/print/printf (selon le language) pour savoir ce que fait ton programme. Et internet me dit que PHP >=5.4 contient un debuggeur aussi...

Reply

Sujets relatifs:

Leave a Replay

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