par
Ryle » 05 juin 2006, 10:29
Petite précision importante concernant les checkbox, leurs valeurs ne sont envoyées par le formulaire que si elle sont cochées.
Afin de savoir si la case est cochée, au lieu d'en afficher la valeur, tu peux simplement tester si elle est définie avec la fonction isSet()
Dans ton premier exemple :
Code : Tout sélectionner
<input type="checkbox" name="choix1" value="0" />
<input type="checkbox" name="choix2" value="0" />
<input type="checkbox" name="choix3" value="0" />
<input type="checkbox" name="choix4" value="0" />
Tes cases cochées ont pour valeur "0", que php va considérer comme faux ou vide. Si tu demandes de l'afficher tu ne verras donc rien, il faut donc éviter de mettre zéro. (Personnellement je met toujours value="true" sur mes cases, sachant que si elle ne sont pas cochées, le fait de les interroger me retournera false. Cela dit, tu peux mettre ce que tu veux, sachant que si tu ne met pas d'attribut value, la valeur récupérée sera "on")
En testant si l'index est défini avec isSet(), tu aurais le résultat attendu :
$valeurs = "checkbox1 : " . isSet($_POST['choix1']) . "...";
Dans le deuxième cas, tes checkbox ayant toutes le même nom, toutes les valeurs des cases cochées seront regroupées dans un tableau.
Code : Tout sélectionner
<input type="checkbox" name="choix[]" value="1" />
<input type="checkbox" name="choix[]" value="2" />
<input type="checkbox" name="choix[]" value="3" />
<input type="checkbox" name="choix[]" value="4" />
$_POST['choix'] contiendra donc array(1,3,4) si les cases de valeur 1, 3 et 4 sont cochées.
Pour les tester tu utilises alors la fonction in_array() :
$valeurs = "checkbox1 : " . in_array("1", $_POST['choix']) . "...";
Ce fonctionnement est très utile lorsque tu ne connais pas le nombre ou le nom des cases (typiquement une liste d'objet avec id, on utilises les identifiants comme valeur et cela permet de travailler uniquement sur ceux selectionnés en parcourant le tableau

)
Ps : si tu ne fais pas un echo de $valeurs tu ne verras pas ce qu'elle contient

Petite précision importante concernant les checkbox, leurs valeurs ne sont envoyées par le formulaire que si elle sont cochées.
Afin de savoir si la case est cochée, au lieu d'en afficher la valeur, tu peux simplement tester si elle est définie avec la fonction isSet()
Dans ton premier exemple :
[code]<input type="checkbox" name="choix1" value="0" />
<input type="checkbox" name="choix2" value="0" />
<input type="checkbox" name="choix3" value="0" />
<input type="checkbox" name="choix4" value="0" /> [/code]
Tes cases cochées ont pour valeur "0", que php va considérer comme faux ou vide. Si tu demandes de l'afficher tu ne verras donc rien, il faut donc éviter de mettre zéro. (Personnellement je met toujours value="true" sur mes cases, sachant que si elle ne sont pas cochées, le fait de les interroger me retournera false. Cela dit, tu peux mettre ce que tu veux, sachant que si tu ne met pas d'attribut value, la valeur récupérée sera "on")
En testant si l'index est défini avec isSet(), tu aurais le résultat attendu :
[php]$valeurs = "checkbox1 : " . isSet($_POST['choix1']) . "...";[/php]
Dans le deuxième cas, tes checkbox ayant toutes le même nom, toutes les valeurs des cases cochées seront regroupées dans un tableau.
[code]<input type="checkbox" name="choix[]" value="1" />
<input type="checkbox" name="choix[]" value="2" />
<input type="checkbox" name="choix[]" value="3" />
<input type="checkbox" name="choix[]" value="4" /> [/code]
$_POST['choix'] contiendra donc array(1,3,4) si les cases de valeur 1, 3 et 4 sont cochées.
Pour les tester tu utilises alors la fonction in_array() :
[php]$valeurs = "checkbox1 : " . in_array("1", $_POST['choix']) . "...";[/php]
Ce fonctionnement est très utile lorsque tu ne connais pas le nombre ou le nom des cases (typiquement une liste d'objet avec id, on utilises les identifiants comme valeur et cela permet de travailler uniquement sur ceux selectionnés en parcourant le tableau :))
Ps : si tu ne fais pas un echo de $valeurs tu ne verras pas ce qu'elle contient ;)