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)

<html > 
<body> 

<form method='POST' action='eleves_traitement.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='delete[]' value='".$donnees['id']."'></td>";
echo"</tr>";
            }
$reponse->closeCursor(); 

?>
</table>
<p>
<input type="submit" value="envoyer" name="Envoyer">

</form>

</body>
	
</html>



eleves_traitement.php

<?php 
if (sizeof($delete)==0)

{
header('Location:eleves.php');
exit;
}

else
{
 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');
         foreach ($delete as $valeur)
		   {
              $sql="DELETE FROM eleves where id='$id'";
              
           }
$reponse->closeCursor(); 

echo ' Enregistrement éffacé '.'<br><br />';
}
?>

salut,

Je relève ta requêtes
$sql="DELETE FROM eleves where id='$id'"


mais $id tu le récupère où ??? je vois pas.
Modérateur
Ce ne serait pas plutôt $valeur au lieu de $id?

de plus:

- La requête $sql n'est jamais exécutée

- D'où vient $delete ?

- La requête suivante:
$reponse = $bdd->query('SELECT * FROM eleves');

ne sert apparement à rien
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

<?php 
if (isset($_POST['$id']))
{
    $valeur = ($_POST['$id']);
 }
else
{
 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());
            }
			
 
         foreach ($delete as $valeur)
		   {
             
              $req = $bdd->prepare(DELETE FROM eleves where id=:id);
	         $req->execute(array(

           'id' => $valeur,
 
           ));
           }
$req->closeCursor(); 

echo ' Enregistrement éffacé '.'<br><br />';
}
?>

 
Salut,

Ce code devrait fonctionner.
Le fait d'écrire name="delete[]" avec des crochets dans le formulaire, vous renvoie un array de toutes les checkbox cochées, avec pour valeur l'id de l'élève qui est renseigné dans le paramètre value=""
On ne peut récupérer un array qu'avec la method="post".
Pour utiliser une variable provenant d'un formulaire, on utilise soit la variable globale $_POST ou $_GET selon la méthode définie dans le formulaire.
http://php.net/manual/fr/tutorial.forms.php
Je vous conseille de lire la documentation PHP. Elle est vraiment très bien faite.

<?php 
//On test si $_POST['delete'] existe, qu'il n'est pas vide est que c'est un array
if(empty($_POST['delete']) || !is_array($_POST['delete']){
  header('Location:eleves.php');
  exit;
}

//Connexion à la bdd
$bdd = new mysqli('localhost', 'root', 'password', 'comptes');

//Erreur de connexion
if($bdd->connect_error)
  die('Erreur de connexion (' . $bdd->connect_errno . ') '. $bdd->connect_error);

//On parcours l'array $_POST['delete'], si la valeur de l'id est numérique, on supprime dans la bdd
foreach($_POST['delete'] as $id){
  if(is_numeric($id))
    $bdd->query("DELETE FROM eleves WHERE id = '".$id."'");
}
?>

Modifié par taspeur (29 Jun 2017 - 18:13)