Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> multi checkbox & array
bryzas
post
Post #1





Grupa: Zarejestrowani
Postów: 14
Pomógł: 2
Dołączył: 22.09.2007

Ostrzeżenie: (0%)
-----


Witam,

Mam problem z przekazywaniem wartości checkbox przez formularz.

mam pętlę która generuje w php formularz z kilkoma plami tekstowymi i checkbox-ami :

CODE

for ($i=1;$i<4;$i++) {
echo "<input type='text' name='tekst[]' value='tekst'>";
echo "<input type='checkbox' name='zapisz[]' value='tak'>";
}
echo "<input type='submit' value='Zapisz'>";


jak zaznacze np 2 checkboxy i przekazuję dane do następnej strony to otrzymuję :

CODE
Array ( [id] => Array ( [0] => tekst [1] => tekst [2] => tekst [3] => tekst )
Array ( [zapisz] => Array ( [0] => tak [1] => tak )


tak jakby nie brał pod uwagę niezaznaczonych checkbox-ów (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)

co zrobić aby przekazać wartość wszystkich checkbox-ów? i otrzymać tabicę :

CODE
Array ( [zapisz] => Array ( [0] => tak [1] => nie [2] => tak [3] => nie )
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
krowal
post
Post #2





Grupa: Zarejestrowani
Postów: 561
Pomógł: 72
Dołączył: 15.11.2006

Ostrzeżenie: (0%)
-----


Przypuśćmy że mam checkboxa
Kod
<input type="checkbox" name="test" />
  • Po wysłaniu formularza z takim checkboxem, jeśli go zaznaczę, to wartość $_POST['test'] wynosić będzie 'on' (ale myślę że to może się różnić w zależności od przeglądarki).
  • Jeśli zaś dodasz do checkboxa atrybut value z jakąś wartością to przyjmie on tą właśnie wartość (jeśli będzie zaznaczony oczywiście) a nie jak poprzednio 'on'.
  • Jeśli checkbox nie zostanie w ogóle zaznaczony to isset($_POST['test']) zwróci false. Czyli tak jakby w ogóle nie został wysłany.
A co do konstrukcji
Kod
<input type="checkbox" name="test" checked />
to może i jest poprawna, ale chyba nie jest dobrze interpretowana w każdej przeglądarce, najlepiej więc się zabezpieczyć i zrobić coś takiego:
Kod
<input type="checkbox" name="test" checked="checked" />


A co do twojego problemu, to jak możesz się domyślić po przeczytaniu tego co napisałem, niezaznaczone checkboxy NIE SĄ w ogóle przekazywane. Dlatego rozwiązaniem Twojej zagadki było by ponumerowanie wszystkich checkboxów w taki sposób:
Kod
<input type="checkbox" name="zapisz[1]" value="tak" /> //atrybut value możesz usunąć wtedy będziesz miał domyślnie 'on'
<input type="checkbox" name="zapisz[2]" value="tak" />
<input type="checkbox" name="zapisz[3]" value="tak" />
<input type="checkbox" name="zapisz[4]" value="tak" />
<input type="checkbox" name="zapisz[5]" value="tak" />

Później po wysłaniu formularza sprawdzasz które numerki z tablicy $_POST['zapisz'][x] mają wartość 'tak' lub 'on' i już wiesz które zostały zaznaczone a które nie. Można też prościej - sprawdzać tylko isset($_POST['zapisz'][x]) dla każdego z pól.
x - numerek checkboxa.

Ten post edytował krowal 18.10.2007, 09:53:15
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 16.10.2025 - 02:47