Page 1 sur 1

Suppressions via checkbox

Posté : 06 nov. 2012, 17:04
par sefezfze
Bonjour,

Je permet sur une page de la partie admin de supprimer plusieurs données via des Checkbox.
Mais le problème, c'est que ça supprime seulement 1 valeur même si on en sélectionne plusieurs.
if($_POST['choix'] == 1)
							{		
								$total = count($_POST['options']);
								$options = mysql_fetch_array($sql);

								for($i = 0; $i < $total; $i++)
								{
									 mysql_query('DELETE FROM contact WHERE id = "'. $options['id'][$i] .'"');
								}
							}
Voilà la première mesure, mais je trouve pas comment faire. J'ai essayé avec implode mais ça me retourne une erreur...

Re: Suppressions via checkbox

Posté : 06 nov. 2012, 17:31
par dix2
salut,

les attributs "name" des cases à cocher doivent être différents

@+
dix2

Re: Suppressions via checkbox

Posté : 06 nov. 2012, 20:29
par sefezfze
Tout d'abord merci pour ta réponse.

J'ai pourtant lu quelque part que tous les checkbox devaient avoir le même nom (par exemple options[]).
Par ce que après j'ai besoin d’explorer ça avec la boucle for pour pouvoir supprimer la sélection :?

Re: Suppressions via checkbox

Posté : 06 nov. 2012, 20:50
par dix2
effectivement, je me suis trompé
dans le code HTML, il fait mettre des crochets comme ceci:
<input type="checkbox" name="options[]" value="choix1" />
<input type="checkbox" name="options[]" value="choix2" />
il y a un topic similaire ici

Re: Suppressions via checkbox

Posté : 07 nov. 2012, 10:47
par Ryle
Et il faut surtout adapter le traitement pour qu'il parcours un tableau d'id et non pas une requête SQL :
if (isSet($_POST['options']) 
{
   $total = count($_POST['options']);
   $options = $_POST['options'];

   for ($i = 0; $i < $total; $i++)
   {
      mysql_query('DELETE FROM contact WHERE id = '. $options[$i]); // nota : pas de quote ou de guillemets autour des nombres en sql
   }
}
ou plus simplement :
if (isSet($_POST['options']) {
   foreach ($_POST['options'] as $i) { // le foreach parcours les éléments un par un sans avoir besoin de les compter
      $sql = 'DELETE FROM contact WHERE id = ' . $options[$i];
      mysql_query($sql); // exécute une requête par id à supprimer
   }
}
ou plus optimisément (?) :
if (isSet($_POST['options']) {
      $sql = 'DELETE FROM contact WHERE id IN (' . implode(',', $options) . ')'; // le implode() va générer la chaîne : id1,id2,... à partir des id récupérés
      mysql_query($sql); // exécute une seule requête pour supprimer tous les id
}