[résolu]Probleme suppression par checkbox

Eléphant du PHP | 103 Messages

09 juin 2011, 11:20

Bonjour,

Je me trouve confronté à un problème de suppression par cases à cocher.

Voici le code pour lequel l'utilisateur sélectionne ce qu'il veut supprimer :
									
?> 
<p> Voici la liste des fonctions : </p>
<?php
															
$reponse = $bdd->query('SELECT * FROM fonction ORDER BY libfct ASC');
while ($donnees = $reponse->fetch())
{
 ?>
	<span class="col"><input type="checkbox" name="fct[]" value="<?php echo $donnees["codefct"];?>" id="fct[]" /><label for="fct[]"><?php echo $donnees["libfct"];?></label></span><br />
<?php
 }
Ensuite la page de confirmation qui affiche les cases à cocher qui ont été sélectionnées :
				
$fct = $_POST['fct'];
?>
	<p>Etes-vous sur de vouloir supprimer : </p>
	<?php
	foreach($fct as $element)
	{
		$reponse = $bdd->query("SELECT libfct FROM fonction WHERE codefct='$element' ORDER BY libfct ASC");
		while ($donnees = $reponse->fetch())
		{ 
			?>
			<span class="col"><input type="checkbox" name="fct[]" id="fct[]" value="<?php echo $element; ?>" checked="checked"/><?php echo $donnees['libfct'].'<br />'; ?></span>
			<?php
		}
	}
	?>
	<p> <input name="val" type="submit" value="Valider" /></p>
<?php
Et enfin la page de suppression qui contient donc l'erreur :
if (!empty($_POST['fct'])) 
{
	$fct=$_POST['fct'];
							
	$bdd->exec("DELETE FROM fonction WHERE codefct IN (" . implode(",",$fct).")");
	$bdd->exec("DELETE FROM fonction_bis WHERE codefct IN (" . implode(",",$fct).")");
	$bdd->exec("DELETE FROM l_collab_fct_met WHERE codefct IN (" . implode(",",$fct).")");
	$bdd->exec("DELETE FROM l_collab_fct_met WHERE codefctbis IN (" . implode(",",$fct).")");
	$bdd->exec("DELETE FROM l_comp_fct WHERE codefct IN (" . implode(",",$fct).")");
												
	?><p class="style2"><?php echo 'Les fonctions ont été supprimées'; ?> </p> 
<?php
}
Et voilà l'erreur qui est retournée Erreur : SQLSTATE[42S22]: Column not found: 1054 Unknown column 'TS' in 'where clause'

Le problème que j'ai en fait c'est que le codefct c'est des chaines de caractère et non des entiers et je ne sais pas comment le traiter.
Merci
Modifié en dernier par Jibe le 15 sept. 2011, 12:35, modifié 1 fois.

ViPHP
ViPHP | 2577 Messages

09 juin 2011, 12:12

Bonjour,

Il faut mettre les chaines de caractère entre quote.

delete from TaTable where champ1 in ('A','B') et non pas delete from TaTable where champ1 in (A,B)

Eléphant du PHP | 103 Messages

09 juin 2011, 13:38

Et dans mon exemple ça donnerait quoi ?

ViPHP
ViPHP | 2577 Messages

09 juin 2011, 14:03

$bdd->exec("DELETE FROM fonction WHERE codefct IN ('" . implode("','",$fct)."')");

Eléphant du PHP | 103 Messages

09 juin 2011, 14:13

Ça marche, problème réglé.
Je te remercie Mazarini