Cytat(pkosciej @ 5.10.2012, 23:32:55 )

pętlą generuje poniższy kod:
<input type="checkbox" name="tab[]">
Problem w tym, że każdy input, mimo że generujesz go pętla, ma taką samą nazwę
tab[]. Po submitowaniu, klucze tablicy
tab ustawiają się same, startując od
0. Jeśli zaznaczone będzie tylko jeden checkbox, nieważne który, to w wyniku dostaniesz:
Kod
$_POST = array(
'tab' = array(
[0] = 'on'
)
)
Jeśli zaznaczone będą dwa checkboxy, nieważne które, to w wyniku dostaniesz:
Kod
$_POST = array(
'tab' = array(
[0] = 'on',
[1] = 'on'
)
)
W trakcie generowania inputów pętlą, musisz nadać różne nazwy inputom, np:
for($i = 1; $i <= 5; $i++) {
echo '<input type="checkbox" name="tab[' . $i . ']">Opcja ' . $i . '<br>'; }
W ten sposób każdy input będzie miał unikatową nazwę (
tab[1],
tab[2], ...), i w zależności o tego, który będzie zaznaczony przez użytkownika, dostaniesz tablicę
tab z odpowiednimi indeksami, np:
Kod
$_POST = array(
'tab' = array(
[1] = 'on',
[2] = 'on',
[4] = 'on'
)
)
Zauważ, że w zmiennej post nigdy nie pojawią się checkboxy niezaznaczone. Są tylko te zaznaczone. Mają wartość "
on". Jeśli chcesz, żeby miały inną wartość, to dodaj tą informację do inputów;
for($i = 1; $i <= 5; $i++) {
echo '<input type="checkbox" name="tab[' . $i . ']" value="opcja' . $i . '">Opcja ' . $i . '<br>'; }
a w wyniku dostaniesz (przy zaznaczonych checkboxach pierwszym, drugim i czwartym):
Kod
$_POST = array(
'tab' = array(
[1] = 'opcja1',
[2] = 'opcja2',
[4] = 'opcja4'
)
)