jak uzyskać wszystkie zmienne pola wyboru, nawet jeśli nie są zaznaczone z HTML do PHP?

Zauważyłem, że PHP wydaje się zwracać tylko wartości zaznaczonych checkboxów. Chciałbym zobaczyć listę checkboxów, a nie tylko wartości zaznaczonych checkboxów. Czy istnieje sposób na wykrycie zmiennych niezaznaczonych pól?

Zapytałem, ponieważ chcę mieć możliwość aktualizacji ustawień. Na przykład, mam kilka opcji, które są już zaznaczone, ale jeśli użytkownik zdecyduje się odznaczyć opcję, muszę wiedzieć, że wartość niezaznaczona, więc mogę zaktualizować opcję do wyłączenia.

Author: netrox, 2009-12-22

5 answers

Sama wpadłam na ten problem. Rozwiązałem to dodając duplikat hidden pola o tej samej nazwie. Gdy przeglądarka wysyła te informacje, drugie pole zastępuje pierwsze (więc upewnij się, że pole hidden jest pierwsze).

<input type="hidden" name="foo" value="">
<input type="checkbox" name="foo" value="bar">

Jeśli checkbox nie jest zaznaczone otrzymasz:

$_REQUEST[ 'foo' ] == ""

Jeśli checkbox jest zaznaczone otrzymasz:

$_REQUEST[ 'foo' ] == "bar"
 58
Author: Peter Kovacs,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-22 03:48:47

To nie jest coś, co można zrobić wyłącznie w PHP.

Przeglądarki wysyłają informacje o checkboxach tylko wtedy, gdy są zaznaczone, jeśli chcesz również wysyłać informacje o niezaznaczonych checkboxach, musisz dodać ukryte pola w formularzu i użyć javascript do zarządzania nimi.

 2
Author: Ben S,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-22 03:40:44

Właśnie natknąłem się na ten problem sam i posortowałem go aktualizując wszystkie wartości w bazie danych, aby odznaczyć, a następnie ponownie sprawdzając tylko te, które są w danych postu, działa to dobrze dla mnie, ale może nie być dla wszystkich filiżanka herbaty.

 1
Author: R Brill,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-25 10:46:00

Czysta implementacja PHP nie wydaje się możliwa, możesz jednak spróbować użyć jQuery / AJAX.

 0
Author: Alix Axel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-22 03:40:38

Załóżmy, że masz 3 pola wyboru, które chcesz sprawdzić, a update_settings to nazwa Twoich funkcji, które przyjmują nazwę pola jako pierwszy argument i wartość bool jako drugi (Aktywuj lub nie).

Weź następujący fragment:

$checkboxes = array("checkbox1", "checkbox2", "checkbox3");
foreach($checkboxes as $checkbox){
    $checked = isset($_POST[$checkbox]);
    update_settings($checkbox, $checked);
}

Althouth Peter Kovacs rozwiązanie to będzie działać, nie sądzę, aby było to praktyczne, ponieważ można już sprawdzić swoje zmienne za pomocą isset.

 0
Author: GmonC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:45:32