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

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

15 ответов


Если Ваша HTML-страница выглядит так:

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

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

isset($_POST['test'])

или

if ($_POST['test'] == 'value1') ...

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

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

<input type="hidden" name="foo" value="0" />
<input type="checkbox" name="foo" value="1"> 

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

<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(...

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

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

затем после отправки формы вам нужно проверить, как

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

    // Checkbox is selected
} else {

   // Alternate code
}

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

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

   // Checkbox is selected
} 

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

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

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

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

}

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

пример:

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

ну, приведенные выше примеры работают только тогда, когда вы хотите вставить значение, не полезное для обновления разных значений в разные столбцы, поэтому вот мой маленький трюк для обновления:


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

....

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

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

удачи :)


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

когда форма отправлена, метка всегда быть установлен, потому что ВСЕ переменные будут отправлены с формой.

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

//Check if checkbox is checked    
if(!empty($_POST['checkbox']){
#Checkbox selected code
} else {
#Checkbox not selected code
}

$is_checked = isset($_POST['your_checkbox_name']) &&
              $_POST['your_checkbox_name'] == 'on';

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


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

<?php

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

?>

<input type="checkbox" name="foo" value=" checked"<?=$_POST['foo']?>>

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

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

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

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

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

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

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

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

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 для базы данных.


<?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>

<?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']);
} 

?>