recuperation de variables checkbox

Petit nouveau ! | 7 Messages

27 mai 2008, 17:24

bonjour,

voila je voudrai récupérer les post de mes checkbox tout en obligeant la personne à sélectionner 2 éléments.

Code : Tout sélectionner

<script> function verif(){ choix = 0; for(i=0;i<document.formulaire.choix.length;i++){ if(choix == 2) { document.formulaire.choix[i].disabled; } if(document.formulaire.choix[i].checked) {choix += 1;} } if(choix != 2) { alert("Vous devez sélectionner 2 options"); return false; } else { alert("formulaire ok"); return true; } } function verif_check(choix){ choix = 0; for(i=0;i<document.formulaire.choix.length;i++){ if(document.formulaire.choix[i].checked) {choix += 1;} } if(choix == 2) { for(i=0;i<document.formulaire.choix.length;i++){ if(document.formulaire.choix[i].checked == false) { document.formulaire.choix[i].disabled = true; } } else if(choix != 2){ for(i=0;i<document.formulaire.choix.length;i++){ document.formulaire.choix[i].disabled = false; } } } </script> <html> <body> <form name="formulaire" action="index.php" method="post" onSubmit="return verif();"> <?php for($i=0;$i<3;$i++){ echo '<input type="checkbox" name="choix" value="'.$i.'" onclick="verif_check(this)">Valeur '.($i+1).'<br />'; } ?> <br /> <input type="submit" name="valider" value="valider" /> </form> </body> </html>
voila ce que j ai déjà fais ça permet en effet de limiter la sélection mais je n arrive pas a récupérer les 2 post.
Le problème est que si je nomme la checkbox choix[] ça ne marche plus.

Merci de votre aide.

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

27 mai 2008, 19:51

Tu peux nommer les checkbox sous forme de tableau en modifiant cette partie de ton code, comme ça :
for($i=0;$i<3;$i++){
 echo '<input type="checkbox" name="choix['.$i.']" value="'.$i.'" onclick="verif_check(this)">Valeur '.($i+1).'<br />';
}
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Petit nouveau ! | 7 Messages

28 mai 2008, 09:26

Merci mais dans ce cas la c est le javascript qui marche plus :/

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

28 mai 2008, 18:28

Oui, je vois. Car les noms de balises formulés "nom[]" ne sont pas considérés par html/js comme un tableau parce qu'ils se termine par doubles crochets [].

Dans ce cas il faut réconcilié entre html/js et php :
  • - PHP : considère comme tableau les balises ayant un même nom et se terminant par double crochets []
    - JAVASCRIPT : considère comme tableau les balises ayant un même nom (qu'il portent [] ou pas).
Donc on peut donner aux checkbox le même nom se terminant par [] pour satisfaire PHP et préciser à JAVASCRIPT d'utiliser les objets portant ce nom crochets incluses pour accéder aux objets.

Exemple:
On remet le code PHP générateur des noms des checkbox comme ça:
for($i=0;$i<3;$i++){
 echo '<input type="checkbox" name="choix[]" value="'.$i.'" onclick="verif_check(this)">Valeur '.($i+1).'<br />';
}
Ainsi, toutes les checkbox auront comme nom unique : "choix[]" ce qui oblige Javascript de considérer les objets ayant le nom "choix[]" comme un tableau.

Dans le code Javascript il faut changer la façon d'accéder aux checkbox par leur nom unique.
Comme ça:

Code : Tout sélectionner

tab_choix = document.formulaire.elements["choix[]"]; //accès au tableau des checkbox
Cela donnera par exemple pour la première function un truc comme ça:

Code : Tout sélectionner

<script> function verif(){ choix = 0; tab_choix = document.formulaire.elements["choix[]"]; //accès au tableau des checkbox for(i=0;i<tab_choix.length;i++){ if(tab_choix[i].checked) {choix += 1;} } if(choix != 2) { alert("Vous devez sélectionner 2 options"); return false; } else { alert("formulaire ok"); return true; } } </script>
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Petit nouveau ! | 7 Messages

30 mai 2008, 10:04

Merci beaucoup je vais tester tout ca