Według w3c "Kilka pól wyboru w formularzu może mieć tę samą nazwę kontrolną, dlatego na przykład pola wyboru pozwalają użytkownikom wybrać kilka wartości dla tej samej właściwości." Jeśli jednak to zrobisz, PHP przyjmie tylko ostatnią wartość. Na przykład:Kilka pól wyboru o tej samej nazwie
<?php
if ($_POST) {
echo "<pre>";
print_R($_POST);
echo "</pre>";
}
?>
<form action="" method = "post">
<input type="checkbox" name="pet" value="dog" />Dog<br />
<input type="checkbox" name="pet" value="Cat" />Cat<br />
<input type="checkbox" name="pet" value="bird" />bird<br />
<input type="checkbox" name="pet" value="iguana" />iguana<br />
<input type="submit" />
</form>
Jeśli prześlesz ten formularz, zobaczysz, że zostanie ustawione tylko pole wyboru, które pojawi się jako ostatnie. Przeglądarka wysyła je wszystkie, ale zastępują się nawzajem. Tak więc ustawienie tej samej nazwy dla kilku pól wyboru może powodować problemy. Czy to zawsze tak było? Wydaje mi się, że pamiętam, że faktycznie można wysyłać wszystkie wartości jako tablicę.
wiem, że można po prostu dodaj [] na końcu nazwy, aby utworzyć tablicę wartości:
<?php
if ($_POST) {
echo "<pre>";
print_R($_POST);
echo "</pre>";
}
?>
<form action="" method = "post">
<input type="checkbox" name="pet[]" value="dog" />Dog<br />
<input type="checkbox" name="pet[]" value="Cat" />Cat<br />
<input type="checkbox" name="pet[]" value="bird" />bird<br />
<input type="checkbox" name="pet[]" value="iguana" />iguana<br />
<input type="submit" />
</form>
Ale W3C nie określa tego. Szczerze mówiąc, nie pamiętam, czy zawsze używałem [] na końcu nazwy, ale z jakiegoś powodu myślę, że w pewnym momencie tego nie zrobiłem. Czy był jakiś czas w przeszłości, kiedy mógłbyś sprawić, by działał bez []?
http://www.w3.org/TR/html401/interact/forms.html#checkbox
Musisz użyć '[]', a następnie możesz użyć 'in_array' do określenia, które pola wyboru zostały zaznaczone. Irytujące, ale czy nie wszystkie formy? – thatidiotguy
W3c nie określa tego, ponieważ jest specyficzne dla 'php' (i prawdopodobnie innych języków) i nie jest związane z w3c. Inne języki nie mają tego wymogu. Jak stwierdzono, przeglądarka wysyła wszystkie wartości. –
Widzę obie twoje uwagi. Dzięki. I tak, wszystkie formy są denerwujące. – Buzu