Как читать, если в PHP установлен флажок?

178

Как читать, если флажок установлен в PHP?

  • 5
    Этот вопрос фактически означает « был проверен» (когда форма была отправлена). PHP определения , если флажок потребует вызова Ajax после того , как элемент был переключен.
Теги:
forms
post
checkbox

14 ответов

211
Лучший ответ

Если ваша HTML-страница выглядит следующим образом:

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

После отправки формы вы можете ее проверить:

isset($_POST['test'])

или

if ($_POST['test'] == 'value1') ...
  • 55
    Флажки также могут иметь значение on , когда они проверяются. Поэтому для совместимости проще использовать isset($_POST['checkboxName']) .
  • 12
    Значение "on" может поддерживаться некоторыми браузерами, когда атрибут value не установлен, но в целом лучше установить атрибут value и проверить его при отправке.
Показать ещё 2 комментария
76

Zend Framework использует хороший хак на флажках, которые вы также можете сделать сами:

Каждый созданный флажок связан со скрытым полем с тем же именем, которое помещается непосредственно перед флажком и со значением "0". Тогда, если ваш флажок равен значению "1", вы всегда получите значение "0" или "1" в результате GET или POST

<input type="hidden" name="foo" value="0" />
<input type="checkbox" name="foo" value="1"> 
  • 0
    Я также заметил об этом, но я чувствую себя безопасным в использовании: Zend Framework делает это тоже!
  • 0
    Это интересно. Но есть ли крошечная вероятность того, что пользовательский агент может передать первое значение вместо последнего, при условии, что флажок установлен?
Показать ещё 3 комментария
35

При использовании флажков в виде массива:

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

Вы должны использовать in_array():

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

Не забудьте проверить, что массив задан первым, например:

if(isset($_POST['food']) && in_array(...
  • 2
    Большое спасибо, искал именно это!
30

Пусть ваш html для вашего флажка будет похож на

<input type="checkbox" name="check1">

Затем, отправив форму, вам нужно проверить, как

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

    // Checkbox is selected
} else {

   // Alternate code
}

Предполагая, что check1 должно быть вашим именем checkbox. И если ваш метод отправки формы GET, то вам нужно проверить с помощью переменных $_GET, например

if (isset($_GET['check1'])) {

   // Checkbox is selected
} 
6
$check_value = isset($_POST['my_checkbox_name']) ? 1 : 0;
  • 0
    очень быстро и очень умно
2

Ну, приведенные выше примеры работают только тогда, когда вы хотите ВСТАВИТЬ значение, не полезное для UPDATE разных значений для разных столбцов, так что вот мой маленький трюк для обновления:


//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[]" />

....

Секрет просто обновляет все значения VALUES сначала (в этом случае до 0), и поскольку команда будет отправлять только проверенные значения, это означает, что все, что вы получаете, должно быть установлено в 1, поэтому все, что вы установите, равно 1.

Пример PHP, но применяется для всего.

Удачи:)

2

Узнайте о isset, который является встроенной функцией, которая может использоваться в операторах if, чтобы определить, была ли использована или установлена ​​переменная

Пример:

    if(isset($_POST["testvariabel"]))
     {
       echo "testvariabel has been set!";
     }
2

Вы можете проверить соответствующее значение как заданное и непустое в массиве $_POST или $_GET в зависимости от вашего действия формы.

Например: с формой POST с использованием name "теста" (т.е.: <input type="checkbox" name="test">, вы должны использовать:

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

}
1

Вы можете сделать это с коротким, если:

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

или с новым PHP7 Null coalescing operator

$check_value = $_POST['my_checkbox_name'] ?? 0;
1

Минималистическая логическая проверка с сохранением положения позиции

<?php

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

?>

<input type="checkbox" name="foo" value=" checked"<?=$_POST['foo']?>>
  • 1
    Когда вы даете ответ, желательно дать какое-то объяснение, ПОЧЕМУ ваш ответ тот. Это особенно верно, отвечая на очень старый пост 11 других ответов.
  • 0
    Хорошо, что вы признаете необходимость того, чтобы флажок сохранял свое состояние. Тем не менее, ваш код для этого не является правильным.
1
$is_checked = isset($_POST['your_checkbox_name']) &&
              $_POST['your_checkbox_name'] == 'on';

Оценка короткого замыкания будет заботиться о том, чтобы вы не получили доступ к your_checkbox_name, когда он не был отправлен.

0

Я использую этот трюк в течение нескольких лет, и он отлично работает без каких-либо проблем для флажка check/unchecked checkbox при использовании с PHP и базой данных.

Код HTML: (для добавления страницы)

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

Подсказка: снимите флажок "checkbox", если вы хотите показать его как непроверенный по умолчанию

Код HTML: (для страницы редактирования)

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

Код PHP: (используйте для добавления/редактирования страниц)

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

Совет. Всегда будет пустое значение, если пользователь не проверит его. Итак, у нас уже есть PHP-код, чтобы поймать его, остальное значение равно 0. Затем просто используйте переменную $status для базы данных.

  • 1
    это действительно хорошая форма, чтобы сделать это в чистом простом php. но нужно отметить, что значение флажка является строкой, когда оно активировано, и несуществующим значением, если оно проверено.
0

Чтобы проверить, установлен ли флажок, используйте empty()

При отправке формы флажок ВСЕГДА будет установлен, поскольку переменные ВСЕ POST будут отправлены с формой.

Проверьте, установлен ли флажок с пустым следующим:

//Check if checkbox is checked    
if(!empty($_POST['checkbox']){
#Checkbox selected code
} else {
#Checkbox not selected code
}
  • 0
    Если флажок снят, он не будет опубликован, поэтому он будет установлен ВСЕГДА.
-4
<?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']);
} 

?>
  • 0
    Добро пожаловать в стек переполнения! Хотя этот фрагмент кода может решить проблему, он не объясняет, почему и как он отвечает на вопрос. Пожалуйста, включите объяснение вашего кода , так как это действительно помогает улучшить качество вашего сообщения. Помните, что вы отвечаете на вопрос читателей в будущем, и эти люди могут не знать причин, по которым вы предлагаете код. Флаггеры / рецензенты: для ответов только с кодом, таких как этот, downvote, не удаляйте!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню