Page 1 sur 1

Checkbox précochées

Posté : 19 mars 2010, 10:50
par Aurelyye
Bonjour,
Je suis en train de réaliser un formulaire. Dedans j'ai une liste de checkbox (ce référant à une table de ma base de données) et j'aimerais que cetaines des checkbox (dont le nom est dans ma table) soit précochées.
Le problème est que ma liste de checkbox est répétée autant de fois que j'ai de checkbox cochée. C'est à dire que j'ai un seule checkbox cochée par liste, si j'ai trois checkbox de cochées, 3 listes de checkbox vont apparaître.

Voici mon code :
/// recherche de la liste des IdCollaborateur ayant suivi la formation (CodeFormation)
<?php
$T=("SELECT distinct IdCollaborateur
FROM suitformation
WHERE CodeFormationSuit='$CodeFormation';");
$R=mysql_query($T);
While($ligne=mysql_fetch_array($R))
{
?>
<p>
// Mes checkbox
<?php foreach ($collaborateurs as $IdCollaborateur => $NomCollaborateur) : ?>
<input type="checkbox" name="checkbox[]" <?php if($ligne['IdCollaborateur'] == "$IdCollaborateur") echo ' CHECKED="checked"';?>
value="<?php echo $IdCollaborateur ?>"><?php echo $NomCollaborateur ?></input><br>
<?php endforeach ?>
<?php } ?>
</p>

Si quelqu'un a une piste, une idée je suis prenante !!!
Merci

Re: Checkbox précochées

Posté : 20 mars 2010, 12:15
par Ryle
Ton problème vient de l'imbrication de tes deux boucles. En effet, ton foreach affiche une case à cocher pour chacun des collaborateurs, mais puisque tu exécutes celui-ci dans un while, il répète cette liste pour chaque valeur trouvée dans ta base.

Pour éviter cela, il te faut dissocier ces deux actions :
1. Générer un tableau php des idCollaborateur que tu as en base. Pour cela, tu exécutes ta requête et parcours les résultats avec ton while. Pour chaque résultat, tu stockes l'id dans un tableau php qui te servira ensuite.
2. Afficher la liste de tes collaborateurs (avec ton foreach, mais celui-ci doit être placé après le while et non à l'intérieur). Et pour chaque collaborateur que tu affiches ainsi, tu contrôles dans le tableau d'id généré précédement, si l'id du collaborateur est présent (avec isSet par exemple). Si c'est le cas, c'est que ton id a été trouvé en base et tu peux donc précocher la case avec checked :)

Ps : pense aux balises
 quand tu postes du code ;)