2013-08-21 3 views
1

J'ai des cases à cocher, que je dois valider en format '0' (non cochée) et '1' (cochée).PHP Checkbox array validant

<input type="checkbox" name="subcategory1[]" >Text 1<br> 
<input type="checkbox" name="subcategory1[]" >Text 2<br> 
<input type="checkbox" name="subcategory1[]" >Text 3<br> 

J'ai essayé de valider avec ce code (trouvé sur Internet):

$sc1 = ""; 
for($i=0; $i<=2; $i++) 
    { 
    if(isset($_POST['subcategory1'][$i])){ $sc1 .= '1'; } 
    else { $sc1 .= '0'; } 
    } 

Tout d'abord qui fonctionne bien, mais quand j'ajouter des cases à cocher, cela ne fonctionne pas. Il a mis tout "1" au début de $ sc1. Comptez-les bien.

Pourrait être problème qu'ils sont dans 3 divs (un div pour une colonne), mais toujours avec le même nom?

Edit1: $ SC1 chould ressemble à 010

Répondre

1

c'est parce que vous utilisez $ sc1. = Dans la boucle. vous ajoutez vos valeurs. Donc, une fois que 'set' à 1, tout 0 sera juste ajouté. se débarrasser des arrêts complets, dans votre boucle

mise à jour (= doit juste être =.): Vous devez mettre les clés dans le tableau

<input type="checkbox" name="subcategory1[1]" >Text 1<br> 
<input type="checkbox" name="subcategory1[2]" >Text 2<br> 
<input type="checkbox" name="subcategory1[3]" >Text 3<br> 
+0

Merci pour la réponse, mais $ sc1 devrait ressembler fe 001101 à la fin (il ressemble à 111000) –

+0

ok, c'est difficile de le dire exactement ce qui se passe et exactement ce que vous voulez sans le script complet.vous devez placer les nuumbers dans les clés du tableau: Texte 1
Texte 2
Texte 3
Lan

+0

avec les chiffres cela fonctionne bien, merci –

0

changement

for($i=0; $i<=2; $i++) 

à

for($i=0; $i<count($_POST['subcategory1']); $i++) 

Si vous ajoutez plus de cases dont vous avez besoin pour boucler tous et non pas seulement 3 comme vous faites.

+0

merci pour la réponse, je levai 2 au nombre dont j'ai besoin, ceci est seulement un exemple, avec seulement 3 cases à cocher –

0

C'est peut-être parce que votre boucle ne fonctionne pas pour toute la variable. utilisez count() pour compter le nombre total de $_POST['subcategory1'] dans la boucle for ou utilisez la boucle foreach.

+0

merci pour la réponse, j'ai soulevé 2 au nombre dont j'ai besoin, c'est seulement un exemple, avec seulement 3 cases à cocher –

0

Il y a quelques changements que vous devez faire.

Ajouter une valeur à chaque case à cocher pour que vous sachiez que la case a été soumis par l'affichage du formulaire:

<input type="checkbox" name="subcategory1[]" value='1'>Text 1<br> 
<input type="checkbox" name="subcategory1[]" value='2'>Text 2<br> 
<input type="checkbox" name="subcategory1[]" value='3'>Text 3<br> 

boucle suivante dans chaque $ _POST [ « subcategory1 »] pour voir quelles cases ont été envoyés sous forme de post données:

$checked = []; // start with empty array 
for ($x = 0; $x < count($_POST['subcategory1']); ++$x) { 
    $checked[] = $_POST['subcategory1'][$x]; // add value to array 
} 

la raison de ce changement est le suivant: si une case à cocher est pas cochée, il ne soit pas envoyé au serveur lorsque le formulaire est soumis. Cela va vous construire un tableau avec les valeurs des cases à cocher qui ont été vérifiées.

Par exemple, si j'ai vérifié le texte 1 et le texte 3 cases à cocher, la décharge de $ vérifiés après la boucle témoignerait de la valeur de l'attribut nommé « valeur »:

array (size=2) 
    0 => string '1' (length=1) 
    1 => string '3' (length=1) 
+0

Merci, et si j'ai besoin de fic 000110, comment éditer le code, qu'il "accepte" les cases à cocher non chaînées (ou juste ajouté "0")? –