To pytanie w rzeczywistości oznacza „ zostało sprawdzone” (kiedy formularz został przesłany). PHP ustalenie, czy pole wyboru jest zaznaczone, wymagałoby wywołania Ajax po przełączeniu elementu.
rybo111
Odpowiedzi:
342
Jeśli Twoja strona HTML wygląda tak:
<inputtype="checkbox"name="test"value="value1">
Po przesłaniu formularza możesz go sprawdzić za pomocą:
Pola wyboru mogą również mieć wartość on, gdy są zaznaczone. Dlatego dla kompatybilności łatwiej jest po prostu użyć isset($_POST['checkboxName']).
Damiqib,
13
Wartość „on” może być obsługiwana przez niektóre przeglądarki, gdy atrybut wartości nie jest ustawiony, ale ogólnie lepiej jest ustawić atrybut wartości i sprawdzić go po przesłaniu.
m_vitaly
3
Czy wartość „Wartość1” zmienia się, jeśli pole jest zaznaczone?
MoralCode
10
@Developer_ACE O ile cię nie rozumiem, wartością w tym przykładzie byłoby value1zaznaczenie pola wyboru. Jeśli nie jest zaznaczone, $_POST['test']po prostu by nie istniał.
rybo111
104
Zend Framework używa fajnego hacka na polach wyboru, które możesz również zrobić sam:
Każde wygenerowane pole wyboru jest powiązane z ukrytym polem o tej samej nazwie, umieszczonym tuż przed polem wyboru i wartością „0”. Następnie, jeśli pole wyboru jako wartość „1”, zawsze otrzymasz wartość „0” lub „1” w wynikowym GET lub POST
Zauważyłem również o tym, ale czuję się bezpiecznie z niego korzystać: Zend Framework też to robi!
hpaknia
To jest interesujące. Ale czy istnieje niewielka możliwość, że agent użytkownika może przesłać pierwszą wartość zamiast ostatniej, zakładając, że pole wyboru jest zaznaczone?
rybo111,
@ rybo111, nie sądzę, aby dla klienta użytkownika, ale dla niestandardowego parsera formularzy javascript należy zachować ostrożność.
regilero,
Przepraszam, czy ktoś mógłby mi wyjaśnić, jak to działa? Nie zrozumiałem Dlaczego to ukryte pole, skoro zawsze podawana jest tylko ostatnia wartość (ta input[type="checkbox"])?
tonix
6
gdy pole wyboru jest odznaczone, nie jest przesyłane w poście (więc przesyłane są tylko ukryte). Gdy jest zaznaczone, jest przesyłane i zastąpi ukrytą wartość.
pola wyboru jako tablica i foreach ($_POST['food'] as $selected_food)praca nad zaznaczonym jest fajna, dzięki
bcag2
42
Niech Twój HTML dla twojego pola wyboru będzie podobny
<inputtype="checkbox"name="check1">
Następnie po przesłaniu formularza musisz sprawdzić jak
if(isset($_POST['check1'])){// Checkbox is selected}else{// Alternate code}
Zakładając, że check1powinna to być Twoja nazwa pola wyboru. A jeśli twoją metodą przesyłania formularzy jest GET, musisz sprawdzić $_GETzmienne takie jak
if(isset($_GET['check1'])){// Checkbox is selected}
Używam tej sztuczki od kilku lat i działa ona idealnie bez problemu dla zaznaczonego / niezaznaczonego statusu pola wyboru podczas korzystania z PHP i bazy danych.
Wskazówka: Zawsze będzie pusta wartość, chyba że użytkownik ją zaznaczy. Tak więc mamy już kod PHP, aby go złapać, inaczej utrzymaj wartość na 0. Następnie po prostu użyj zmiennej $ status dla bazy danych.
to jest naprawdę dobra forma do zrobienia tego w czystym prostym php. ale należy pamiętać, że wartość pola wyboru to ciąg znaków, gdy jest on aktywowany, i nieistniejąca wartość, jeśli jest zaznaczona.
Elvis Technologies,
4
Aby sprawdzić, czy pole wyboru jest zaznaczone, użyj pustego ()
Po przesłaniu formularza pole wyboru ZAWSZE zostanie ustawione, ponieważ WSZYSTKIE zmienne POST zostaną wysłane wraz z formularzem.
Sprawdź, czy pole wyboru jest zaznaczone pustym, jak następuje:
//Check if checkbox is checked if(!empty($_POST['checkbox'])){#Checkbox selected code}else{#Checkbox not selected code}
Cóż, powyższe przykłady działają tylko wtedy, gdy chcesz WSTAWIĆ wartość, co nie jest przydatne do AKTUALIZOWANIA różnych wartości do różnych kolumn, więc oto moja mała sztuczka, aby zaktualizować:
//EMPTY ALL VALUES TO 0
$queryMU ='UPDATE '.$db->dbprefix().'settings SET menu_news = 0, menu_gallery = 0, menu_events = 0, menu_contact = 0';
$stmtMU = $db->prepare($queryMU);
$stmtMU->execute();if(!empty($_POST['check_menus'])){foreach($_POST['check_menus']as $checkU){try{//UPDATE only the values checked
$queryMU ='UPDATE '.$db->dbprefix().'settings SET '.$checkU.'= 1';
$stmtMU = $db->prepare($queryMU);
$stmtMU->execute();}catch(PDOException $e){
$msg ='Error: '. $e->getMessage();}}}
Sekret polega na tym, że najpierw zaktualizuj wszystkie WARTOŚCI (w tym przypadku na 0), a ponieważ wyśle tylko sprawdzone wartości, oznacza to, że wszystko, co otrzymasz, powinno być ustawione na 1, więc wszystko, co otrzymasz, powinno mieć wartość 1.
Udzielając odpowiedzi, lepiej jest wyjaśnić, DLACZEGO twoja odpowiedź jest jedna. Jest to szczególnie prawdziwe, gdy odpowiadasz na BARDZO stary post 11 innych odpowiedzi.
Stephen Rauch
Dobrze, że rozpoznałeś potrzebę, aby pole wyboru zachowało swój stan. Jednak kod do wykonania tej czynności jest nieprawidłowy.
Witamy w Stack Overflow! Ten fragment kodu może rozwiązać problem, ale nie wyjaśnia, dlaczego ani w jaki sposób odpowiada na pytanie. Podaj wyjaśnienie swojego kodu , ponieważ to naprawdę pomaga poprawić jakość twojego postu. Pamiętaj, że w przyszłości odpowiadasz na pytanie dla czytelników, a ci ludzie mogą nie znać przyczyn Twojej sugestii kodu. Osoby zgłaszające / recenzenci: w przypadku odpowiedzi zawierających tylko kod, takich jak ta, oddaj głos, nie usuwaj!
Odpowiedzi:
Jeśli Twoja strona HTML wygląda tak:
Po przesłaniu formularza możesz go sprawdzić za pomocą:
lub
źródło
on
, gdy są zaznaczone. Dlatego dla kompatybilności łatwiej jest po prostu użyćisset($_POST['checkboxName'])
.value1
zaznaczenie pola wyboru. Jeśli nie jest zaznaczone,$_POST['test']
po prostu by nie istniał.Zend Framework używa fajnego hacka na polach wyboru, które możesz również zrobić sam:
Każde wygenerowane pole wyboru jest powiązane z ukrytym polem o tej samej nazwie, umieszczonym tuż przed polem wyboru i wartością „0”. Następnie, jeśli pole wyboru jako wartość „1”, zawsze otrzymasz wartość „0” lub „1” w wynikowym GET lub POST
źródło
input[type="checkbox"]
)?Gdy używasz pól wyboru jako tablicy:
Powinieneś użyć
in_array()
:Pamiętaj, aby sprawdzić, czy tablica jest ustawiona jako pierwsza, na przykład:
źródło
foreach ($_POST['food'] as $selected_food)
praca nad zaznaczonym jest fajna, dziękiNiech Twój HTML dla twojego pola wyboru będzie podobny
Następnie po przesłaniu formularza musisz sprawdzić jak
Zakładając, że
check1
powinna to być Twoja nazwa pola wyboru. A jeśli twoją metodą przesyłania formularzy jestGET
, musisz sprawdzić$_GET
zmienne takie jakźródło
źródło
Używam tej sztuczki od kilku lat i działa ona idealnie bez problemu dla zaznaczonego / niezaznaczonego statusu pola wyboru podczas korzystania z PHP i bazy danych.
Kod HTML: (dla Dodaj stronę)
Wskazówka: usuń „pole wyboru”, jeśli chcesz domyślnie wyświetlać je jako niezaznaczone
Kod HTML: (dla strony edycji)
Kod PHP: (użyj dla stron Dodaj / Edytuj)
Wskazówka: Zawsze będzie pusta wartość, chyba że użytkownik ją zaznaczy. Tak więc mamy już kod PHP, aby go złapać, inaczej utrzymaj wartość na 0. Następnie po prostu użyj zmiennej $ status dla bazy danych.
źródło
Aby sprawdzić, czy pole wyboru jest zaznaczone, użyj pustego ()
Po przesłaniu formularza pole wyboru ZAWSZE zostanie ustawione, ponieważ WSZYSTKIE zmienne POST zostaną wysłane wraz z formularzem.
Sprawdź, czy pole wyboru jest zaznaczone pustym, jak następuje:
źródło
Możesz sprawdzić odpowiednią wartość jako ustawioną i niepustą w tablicy $ _POST lub $ _GET, w zależności od akcji formularza.
tj .: w formularzu POST przy użyciu
name
„testu” (tj .:<input type="checkbox" name="test">
użyłbyś:źródło
Dowiedz się,
isset
która jest wbudowaną „funkcją”, której można użyć w instrukcjach if, aby stwierdzić, czy zmienna została użyta lub ustawionaPrzykład:
źródło
Cóż, powyższe przykłady działają tylko wtedy, gdy chcesz WSTAWIĆ wartość, co nie jest przydatne do AKTUALIZOWANIA różnych wartości do różnych kolumn, więc oto moja mała sztuczka, aby zaktualizować:
…
Sekret polega na tym, że najpierw zaktualizuj wszystkie WARTOŚCI (w tym przypadku na 0), a ponieważ wyśle tylko sprawdzone wartości, oznacza to, że wszystko, co otrzymasz, powinno być ustawione na 1, więc wszystko, co otrzymasz, powinno mieć wartość 1.
Przykładem jest PHP, ale dotyczy wszystkiego.
Baw się dobrze :)
źródło
Możesz to zrobić za pomocą skrótu, jeśli:
lub z nowym PHP7
Null coalescing operator
źródło
Ocena zwarć zadba o to, abyś nie miał dostępu,
your_checkbox_name
gdy nie został przesłany.źródło
Minimalistyczna kontrola logiczna z zachowaniem pozycji przełącznika
źródło
źródło
w BS3 możesz umieścić
Proszę zwrócić uwagę na użycie
isset($datosOrdenCompra[0]['exenta'])
źródło
filter_input (INPUT_POST, 'checkbox_name', FILTER_DEFAULT, FILTER_FORCE_ARRAY)
źródło
Wordpress ma
checked()
funkcję. Odniesienie: https://developer.wordpress.org/reference/functions/checked/Opis Porównuje dwa pierwsze argumenty i jeśli identyczne znaki są zaznaczone
Parametry $ sprawdzone (mieszane) (wymagane) Jedna z wartości do porównania
$ current (mixed) (Optional) (true) Druga wartość do porównania, jeśli nie tylko true Wartość domyślna: true
$ echo (bool) (Opcjonalnie) Czy echo, czy po prostu zwraca ciąg Wartość domyślna: true
Zwraca atrybut html #Return (string) lub pusty ciąg
źródło
źródło