Les checkbox en php et JS

Les checkbox en php et JS - PHP - Programmation

Marsh Posté le 30-06-2008 à 23:23:18    

Bonjour,
J'ai un problème avec les checkbox lorsque je veux les utiliser à la fois avec php et javascript.
 
Dans le formulaire si j'écris :  

Code :
  1. <input type="checkbox" name="check[]" value="v1">
  2. <input type="checkbox" name="check[]" value="v2">
  3. <input type="checkbox" name="check[]" value="v3">


 
Je peux récupérer en php les cases cochées par un truc du genre :

Code :
  1. foreach ($_POST['check'] as $choix){ .... }


 
Par contre ça ne fonctionne plus lorsque je veux accéder en Javascript:

Code :
  1. for(i=0;i<document.form1.check.length;i++)
  2. if(document.form1.check[i].checked) {.....}


 
Le problème vient des [] dans le formulaire. Si je les enlève, Javascript fonctionnera mais plus php... Comment faire alors?  
 

Reply

Marsh Posté le 30-06-2008 à 23:23:18   

Reply

Marsh Posté le 01-07-2008 à 00:15:54    

Salut,
 
eh bien je propose une autre solution plus récente :

Code :
  1. <input type="checkbox" id="box1" name="check[]" value="v1">
  2. <input type="checkbox" id="box2" name="check[]" value="v2">
  3. <input type="checkbox" id="box3" name="check[]" value="v3">


Puis le JS qui va bien :

Code :
  1. for(i=0;i<document.form1.check.length;i++)
  2.   if(document.getElemebtById('box' + i).checked) {.....}


---------------
NewsletTux - outil de mailing list en PHP MySQL
Reply

Marsh Posté le 01-07-2008 à 06:19:55    

Bonjour,
 
Un exemple :

Code :
  1. <html>
  2.   <head>
  3.     <script type="text/javascript">
  4.       function ctrl(formulaire)
  5.       {
  6.         var elt = formulaire.elements['check[]'];
  7.         var nb = elt.length;
  8.         for (var i = 0; i < nb; i ++)
  9.         {
  10.           if (elt[i].checked)
  11.             alert('checkbox ' + (i + 1) + ' cochée');
  12.           else
  13.             alert('checkbox ' + (i + 1) + ' non cochée');
  14.         }
  15.         return false;
  16.       }
  17.     </script>
  18.   </head>
  19.   <body>
  20.     <form name="test" method="post" action="" onsubmit="return ctrl(this)">
  21.       <input type="checkbox" name="check[]" value="v1"><br>
  22.       <input type="checkbox" name="check[]" value="v2"><br>
  23.       <input type="checkbox" name="check[]" value="v3"><br>     
  24.       <input type="submit" value="valider">
  25.     </form>
  26.   </body>
  27. </html>

Reply

Marsh Posté le 01-07-2008 à 12:12:10    

Ah oui! je vais tester ces solutions. J'ai déjà utilisé getElemebtById() mais je n'y avais pas pensé pour contourner ce problème. Merci


Message édité par malicious le 01-07-2008 à 12:12:48
Reply

Marsh Posté le 01-07-2008 à 12:33:04    

bonjour,
 
"ou alors"
 
<form name="form1" ...>
 
   1. <input type="checkbox" id="box1" name="check[]" value="v1">
   2. <input type="checkbox" id="box2" name="check[]" value="v2">
   3. <input type="checkbox" id="box3" name="check[]" value="v3">
...
</form>
 
   1. for(i=0;i<document.form1["check[]"].length;i++)
   2.   if(document.form1["check[]"][i].checked) {.....}
 
@+


Message édité par bul3 le 01-07-2008 à 12:33:46

---------------
[mon site] [m'écrire]
Reply

Marsh Posté le 01-07-2008 à 21:06:57    

Merci à bul3 aussi. Ta version est en fait la même que NewsletTux mais qui marche. En effet, c'est le document.form1.check.length de la boucle qui plante alors que document.form1["check[]"].length fonctionne.

Reply

Marsh Posté le 01-07-2008 à 21:24:29    

oui, c'est le seul truc de ma proposition que j'ai laissé tel quel ... En fait, document.forms c'est l'ancienne écriture, il aurait presque mieux valu tester, via l'ID, chaque item du form et si c'est une checkbox, alors rentrer dans la condition ...


---------------
NewsletTux - outil de mailing list en PHP MySQL
Reply

Marsh Posté le 02-07-2008 à 19:07:24    

oui en fait tout ceci fonctionne bien maintenant exepté s'il n'y a qu'une seule checkbox !
 
Que ce soit document.form_del["check[]"].length de bul3 ou document.form_del.elements['check[]'] de Jeca ils retournent undefined s'il y a 1 checkbox.
 
Pour contourner ce petit problème je fais comme ceci:
 

Code :
  1. if((nb=document.form1["check[]"].length)==undefined) nb=1;
  2. for(i=0;i<nb;i++)
  3.  if(document.getElementById("check"+i).checked){ ....... }


 

Reply

Marsh Posté le 03-07-2008 à 09:55:54    

oui.
on ne peut pas utiliser d'indice si ce n'est pas un tableau

 

soit tester si .length existe
       d'ailleurs  if (document.form1["check[]"].length) suffit
soit créer un 1er poste bidon ( et caché ) et faire la boucle à partir
       de l'indice 1 au lieu de 0 ( et ce serait plus mieux à mon humble avis )

 


remarque : j'utilisais
 1. for( i=0; i < document.form1["check[]"].length; i++ )
 2.   if( document.form1["check[]"][i].checked ) {.....}
 

 

Cordialement.


Message édité par bul3 le 03-07-2008 à 10:04:56

---------------
[mon site] [m'écrire]
Reply

Marsh Posté le 03-07-2008 à 21:29:57    

Excellente solution que de d'utiliser une checkbox invisible, cela evite le test. Merci à vous tous pour toutes ces idées !

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed