Jak czytać, jeśli pole wyboru jest zaznaczone w PHP?

266

Jak czytać, jeśli pole wyboru jest zaznaczone w PHP?

Thew
źródło
8
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:

<input type="checkbox" name="test" value="value1">

Po przesłaniu formularza możesz go sprawdzić za pomocą:

isset($_POST['test'])

lub

if ($_POST['test'] == 'value1') ...
m_vitaly
źródło
57
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

<input type="hidden" name="foo" value="0" />
<input type="checkbox" name="foo" value="1"> 
regilero
źródło
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ść.
regilero
53

Gdy używasz pól wyboru jako tablicy:

<input type="checkbox" name="food[]" value="Orange">
<input type="checkbox" name="food[]" value="Apple">

Powinieneś użyć in_array():

if(in_array('Orange', $_POST['food'])){
  echo 'Orange was checked!';
}

Pamiętaj, aby sprawdzić, czy tablica jest ustawiona jako pierwsza, na przykład:

if(isset($_POST['food']) && in_array(...
rybo111
źródło
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

<input type="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
} 
Gautam3164
źródło
15
$check_value = isset($_POST['my_checkbox_name']) ? 1 : 0;
Hammad Khan
źródło
bardzo szybki i bardzo sprytny
Tarek Kalaji
najlepsze rozwiązanie, jakie widziałem
Debbie Kurth,
6

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ę)

<input name="status" type="checkbox" value="1" checked>

Wskazówka: usuń „pole wyboru”, jeśli chcesz domyślnie wyświetlać je jako niezaznaczone

Kod HTML: (dla strony edycji)

<input name="status" type="checkbox" value="1" 
<?php if ($row['status'] == 1) { echo "checked='checked'"; } ?>>

Kod PHP: (użyj dla stron Dodaj / Edytuj)

$status = $_POST['status'];
if ($status == 1) {
$status = 1;
} else {
$status = 0;
}

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.

ZEESHAN ARSHAD
źródło
1
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
}
andy
źródło
3
Jeśli pole wyboru nie jest zaznaczone, nie zostanie opublikowane, więc ZAWSZE zostanie ustawione.
Wessam El Mahdy
^ NIE * zawsze należy ustawiać
The Codesee
3

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ś:

if(isset($_POST['test']) {
   // The checkbox was enabled...

}
John Parker
źródło
2

Dowiedz się, issetktóra jest wbudowaną „funkcją”, której można użyć w instrukcjach if, aby stwierdzić, czy zmienna została użyta lub ustawiona

Przykład:

    if(isset($_POST["testvariabel"]))
     {
       echo "testvariabel has been set!";
     }
użytkownik2451511
źródło
2

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();}

        }
}
<input type="checkbox" value="menu_news" name="check_menus[]" />
<input type="checkbox" value="menu_gallery" name="check_menus[]" />

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 :)

Hiram
źródło
2

Możesz to zrobić za pomocą skrótu, jeśli:

$check_value = isset($_POST['my_checkbox_name']) ? 1 : 0;

lub z nowym PHP7 Null coalescing operator

$check_value = $_POST['my_checkbox_name'] ?? 0;
Mazz
źródło
1
$is_checked = isset($_POST['your_checkbox_name']) &&
              $_POST['your_checkbox_name'] == 'on';

Ocena zwarć zadba o to, abyś nie miał dostępu, your_checkbox_namegdy nie został przesłany.

Martin Thoma
źródło
1

Minimalistyczna kontrola logiczna z zachowaniem pozycji przełącznika

<?php

$checked = ($_POST['foo'] == ' checked');

?>

<input type="checkbox" name="foo" value=" checked"<?=$_POST['foo']?>>
Rembo
źródło
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.
Vern Jensen
1
<?php

  if (isset($_POST['add'])) {

    $nama      = $_POST['name'];
    $subscribe = isset($_POST['subscribe']) ? $_POST['subscribe'] : "Not Checked";

    echo "Name: {$nama} <br />";
    echo "Subscribe: {$subscribe}";

    echo "<hr />";   

  }

?>

<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method="POST" >

  <input type="text" name="name" /> <br />
  <input type="checkbox" name="subscribe" value="news" /> News <br />

  <input type="submit" name="add" value="Save" />

</form>
antylopa
źródło
czy możesz tutaj wyjaśnić swój cel?
Elvis Technologies,
0

w BS3 możesz umieścić

  <?php
                  $checked="hola";
                  $exenta = $datosOrdenCompra[0]['exenta'];
                  var_dump($datosOrdenCompra[0]['exenta']);
                  if(isset($datosOrdenCompra[0]['exenta']) and $datosOrdenCompra[0]['exenta'] == 1){

                      $checked="on";

                  }else{
                    $checked="off";
                  }

              ?>
              <input type="checkbox" id="exenta" name="exenta" <?php echo $checked;?> > <span class="label-text"> Exenta</span>

Proszę zwrócić uwagę na użycieisset($datosOrdenCompra[0]['exenta'])

Elvis Technologies
źródło
0

filter_input (INPUT_POST, 'checkbox_name', FILTER_DEFAULT, FILTER_FORCE_ARRAY)

Thowfeek
źródło
0

Wordpress ma checked()funkcję. Odniesienie: https://developer.wordpress.org/reference/functions/checked/

checked( mixed $checked, mixed $current = true, bool $echo = true )

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

Aliqua
źródło
-3
<?php

if(isset($_POST['nameCheckbox'])){
    $_SESSION['fr_nameCheckbox'] = true;
}

?>

<input type="checkbox" name="nameCheckbox" 

<?php 

if(isset($_SESSION['fr_nameCheckbox'])){
    echo 'checked'; 
    unset($_SESSION['fr_nameCheckbox']);
} 

?>
Grzegorz
źródło
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!
Scott Weldon