Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: multi checkbox & array
Forum PHP.pl > Forum > PHP
bryzas
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 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 )
juzwa
ja w checkbocxach nigdy nie używałem VALUE

z tego co kojarzę to przy przekazywaniu checkboxy mają wartość true false

z tym, że jedna uwaga - wartości te sa tekstami i żeby przyrównywać do false ale 'false' - czyli do tekstu nie do wartości

a przy wypełnaniu formularza to gdy ma być checkbox zaznaczony to

if(cos tam)
$chck='checked';
else
$chck='';

echo "<input type='checkbox' name='zapisz[]' $chck>";
krowal
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.
Cezar708
Cytat(krowal @ 18.10.2007, 08:43:29 ) *
Przypuśćmy że mam checkboxa
Kod
<input type="checkbox" name="test" />


proponuję po prostu
  1. <?php
  2. if ( isset($_POST['test'] ){
  3. // checkbox zaznaczony 
  4. } else {
  5. // czeckbox nie zaznaczony
  6. }
  7. ?>


Pozdrawiam
bryzas
Drodzy Forumowicze

Dziękuje za podpowiedzi .
Chwilkę posiedziałem nad tym i :

CODE

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


a nstępnie :

CODE

for ($i=0;$i<count($_POST['zapisz']);$i++) {
$wybrany = key($_POST['zapisz']);
$sql = "UPDATE ks_mecz SET bramki_gosp='{$_POST['bgosp'][$wybrany]}', bramki_gosc='{$_POST['bgosc'][$wybrany]}', status='1' WHERE id_mecz='{$_POST['id'][$wybrany]}'";
$result = mysql_query($sql) or die ($sql."<br>".mysql_errno().": ".mysql_error());
next($_POST['zapisz']);
}



wyjaśnienie :

checkbox przekazywany jest z numerem indexu.
jak pozostawimy <input type='checkbox' name='zapisz[]' value='tak'> to wartości zostaną zapisane w kolejności od 0.
nastepnie w pętli sprawdzamy jakie to numery i dla każdego numeru indexu wybieramy z pozostałych tablic wartości o danym indexie.

Pozdrawiam,
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.