2009-12-22 11 views
24

Zauważyłem, że PHP wydaje się zwracać tylko wartości zaznaczonych pól wyboru. Chciałbym zobaczyć listę pól wyboru, a nie tylko wartości zaznaczonych pól wyboru. Czy istnieje sposób na wykrycie zmiennych niezaznaczonych skrzynek?Jak mogę uzyskać wszystkie zmienne checkbox, nawet jeśli nie jest zaznaczone z HTML na PHP?

Zapytałem, ponieważ chcę mieć możliwość aktualizacji ustawień. Na przykład mam kilka opcji, które są już sprawdzone, ale jeśli użytkownik zdecyduje się usunąć zaznaczenie opcji, muszę znać tę niezaznaczoną wartość, aby można było zaktualizować opcję wyłączenia.

+1

Hmm, jeśli jesteś w stanie wypełnić wszystkie pola wyboru, czy nie powinieneś wiedzieć, które są niezaznaczone w oparciu o te, które są zaznaczone? –

Odpowiedz

57

Sam wpadłem na ten problem. Rozwiązałem go, dodając zduplikowane pole hidden o tej samej nazwie. Gdy przeglądarka wyśle ​​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 sprawdzana otrzymasz:

$_REQUEST[ 'foo' ] == "bar" 
+0

Wow! Niesamowite rozwiązanie! Dziękuję wszystkim. – netrox

+0

Naprawdę inteligentny pomysł! +1 –

+2

Jest to bardzo zależne od implementacji klienta. –

0

Wydaje się, że czysta implementacja PHP nie jest możliwa, można jednak spróbować użyć jQuery/AJAX.

2

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

Przeglądarki wysyłają informacje o polach wyboru, jeśli są zaznaczone, jeśli chcesz również wysyłać informacje o niezaznaczonych polach wyboru, będziesz musiał dodać ukryte pola w formularzu i użyć javascript do zarządzania nimi.

0

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

Weźmy 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ę, że to praktyczne, ponieważ można już sprawdzić zmienne użyciu isset.

1

Po prostu 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 POST, to działa dobrze dla mnie, ale może nie być dla wszystkich filiżanką herbata.

Powiązane problemy