2010-11-10 4 views
3

J'ai un formulaire que je valide en utilisant le JavaScript. Maintenant, lorsque je soumets le formulaire, je ne peux pas utiliser les cases à cocher dans ce formulaire.Paramètres JavaScript et PHP

Ceci est une partie de mon JS qui compte et valide les cases à cocher.

<script type="text/javascript"> 
function validateForm() 
{ 
    //My Declarations 
    var cases = addClients.caseType.length; 
    var total = 0; 
    var fnReturn = true; 
    //My Script goes here 
    for (var idx = 0; idx < cases; idx++) 
    { 
     if (addClients.caseType[idx].checked == true) 
     total += 1; 
    } 
    if (total == 0) 
    { 
     document.getElementById('caseErr').style.visibility =" visible"; 
     fnReturn = false; 
    } 
    else 
     document.getElementById('caseErr').style.visibility = "hidden"; 

    return (fnReturn == true)?true:false; 
} 
</script> 

La page suivante que la forme présente les données est comme suit (la partie des cases à cocher):

<?php 
$cases = $_POST['caseType']; 
for ($i=0;$i<count($cases);$i++) 
    echo "<li>$cases[$i] \n"; 

Faisant écho aux $cases imprime une seule lettre de la case à cocher sélectionnée.

Je veux savoir ce que je fais mal ici.

EDIT:

C'est ma forme

<form id="addClients" method="post" action="confirmAdd.php" onsubmit="return validateForm();"> 
<table border="0"> 
    <tr align="center"> 
     <th align="center">Client Last Name:</th> 
     <td colspan="3" align="center"><input type="text" name="clname" width="300%"></td> 
     <td id="lnErr" style="visibility:hidden">Last Name Required!</td> 
    </tr> 
    <tr align="center"> 
     <th align="center">Client First Name:</th> 
     <td colspan="3" align="center"><input type="text" name="cfname" width="300%"></td> 
     <td id="fnErr" style="visibility:hidden">First Name Required!</td> 
    </tr> 
    <tr align="center"> 
     <th align="center">Client Telephone:</th> 
     <td colspan="3" align="center"><input type="text" name="ctel" width="300%"></td> 
     <td id="telErr" style="visibility:hidden">Telephone Required (without hyphins '-')!</td> 
    </tr> 
    <tr align="center"> 
     <th>Cases:</th> 
     <td align="center">Rape<input type="checkbox" name="caseType[]" value="rape"></td> 
     <td align="center">Drug Accusition<input type="checkbox" name="caseType[]" value="Drug Accusition"></td> 
     <td align="center">Assult<input type="checkbox" name="caseType[]" value="Assult"></td> 
     <td id="caseErr" style="visibility:hidden">At least one required!</td> 
    </tr> 
</table> 
<input type="submit" value="Add Client"> 
</form> 

SOLUTION:

j'ai réussi à trouver une solution au problème par googler ...

d'abord le nom d'eac h case à cocher ont []

Rape<input type="checkbox" name="caseType[]" value="rape"> 
Drug Accusition<input type="checkbox" name="caseType[]" value="Drug Accusition"> 
Assult<input type="checkbox" name="caseType[]" value="Assult"> 

puis, dans le javascript j'ajouté cette partie:

var t=0; 
var c=addClients['caseType[]']; 
for(var i=0;i<c.length;i++) 
    c[i].checked?t++:null; 

addClients est le nom de ma forme.

puis j'ai essayé le PHP que j'ai attaché, et il a énuméré les valeurs comme il se doit.

+0

Peut-on voir le formulaire HTML? – webbiedave

+0

@webbiedave: J'ai ajouté le formulaire à la question. – sikas

Répondre

3

vous devez ajouter Au nom de votre entrée un [] à la fin du nom.

<input type='checkbox' name='caseType[]' /> 



<script type="text/javascript"> 
    function getCheckBoxes(formID, name) { 

     var form = document.getElementById(formID); 
     var checkboxes = form.getElementsByTagName('input'); 
     var returnArray = new Array(); 

     for (var i=0; i<checkboxes.length; i++) { 
      if(checkboxes[i].name == name) { 
       returnArray.push(checkboxes[i]); 
      } 
     } 

     return checkBoxes; 
    } 

    function validateForm() 
    { 


     //My Declarations 
     var cases = getCheckBoxes('addClients', 'caseType[]');; 
     var total = 0; 
     var fnReturn = true; 
     //My Script goes here 
     for (var idx = 0; idx < cases.length; idx++) 
     { 
      if (cases[idx].checked == true) 
      total += 1; 
     } 
     if (total == 0) 
     { 
      document.getElementById('caseErr').style.visibility =" visible"; 
      fnReturn = false; 
     } 
     else 
      document.getElementById('caseErr').style.visibility = "hidden"; 

     return false; 
    } 
</script> 
+0

avec le [], mon JS ne fonctionne pas, sans eux cela fonctionne. Mais le PHP ne fonctionne pas sans eux !! – sikas

+0

@sikas Vous pouvez obtenir les cases à cocher d'une manière différente. J'ai ajouté un exemple. En utilisant la fonction supplémentaire pour récupérer un tableau de toutes les cases à cocher avec les noms correspondants d'un formulaire. –

+0

Merci, j'ai été en mesure de surmonter ce problème, j'ai posté la solution dans la question. – sikas

2

La première chose qui ne va pas est que addClients est indéfini. Peut-être que vous voulez dire document.forms.id_of_form.addClients? La deuxième chose qui ne va pas, c'est que la bibliothèque de gestion de formulaire par défaut de PHP, contrairement à presque toutes les autres bibliothèques d'analyse de données de formulaire, attache une signification spéciale aux noms se terminant par les caractères []. Puisque vous semblez boucler sur un ensemble d'éléments, il y a de fortes chances que le nom des cases à cocher soit addClients[] et non addClients, donc vous auriez besoin de: document.forms.id_of_form['addClients[]'] (la notation en carré comme [] a aussi une signification spéciale en JavaScript).

+0

Dorward: Comment puis-je surmonter ce problème?J'ai essayé de définir les noms avec le [], mais le javascript a eu une erreur mais PHP peut traiter les cases à cocher, et sans [], le JS peut gérer les cases à cocher mais le PHP affiche juste la première lettre du premier cocher les cases à cocher. – sikas

+0

Err. Quote: donc vous auriez besoin: (et puis le code dont vous avez besoin) – Quentin

+0

Dorward: Je ne vous comprends pas vraiment !! – sikas

0

donc:

$cases = $_POST['caseType']; 
//normalize to an array 
if(!is_array($cases))$cases=array($cases); 
//iterate over the cases. 
foreach($cases as $key=>$case){ 
echo"<li>$case</li>\r\n"; 
} 
+0

c'est ce que j'ai obtenu après avoir fait le formulaire soumettre au site donné: {"QUERY": {"GET": [], "POST": {"clname": "lastName", "cfname": "firstName", "ctel": "1234", "caseType": ["viol", "Drug Accusition"]}, "REQUEST": {"clname": "lastName", "cfname": "prénom", "ctel": " 1234 "," caseType ": [" viol "," Drug Accusition "]}," FICHIERS ": []}} – sikas