Как читать, если флажок установлен в PHP?
Если ваша 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
должен быть вашим именем checkbox. И если ваш метод отправки формы GET
вам нужно проверить переменные $_GET
например
if (isset($_GET['check1'])) { // Checkbox is selected }
$check_value = isset($_POST['my_checkbox_name']) ? 1 : 0;
Вы можете проверить соответствующее значение как заданное и непустое в массиве $ _POST или $ _GET в зависимости от действия вашей формы.
т.е.: с формой POST, использующей name
«test» (то есть: <input type="checkbox" name="test">
, вы должны использовать:
if(isset($_POST['test']) { // The checkbox was enabled... }
Узнайте о isset
который является встроенной функцией, которая может использоваться в операторах if, чтобы определить, была ли использована или задана переменная
Пример:
if(isset($_POST["testvariabel"])) { echo "testvariabel has been set!"; }
Ну, приведенные выше примеры работают только тогда, когда вы хотите INSERT значение, не полезное для 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, но применяется ко всему.
Повеселись 🙂
$is_checked = isset($_POST['your_checkbox_name']) && $_POST['your_checkbox_name'] == 'on';
Оценка короткого замыкания будет позаботиться о том, чтобы вы не your_checkbox_name
доступ к your_checkbox_name
если оно не было отправлено.
Минималистическая логическая проверка с сохранением положения переключателя
<?php $checked = ($_POST['foo'] == ' checked'); ?> <input type="checkbox" name="foo" value=" checked"<?=$_POST['foo']?>>
Вы можете сделать это с коротким, если:
$check_value = isset($_POST['my_checkbox_name']) ? 1 : 0;
или с новым Null coalescing operator
коллаборации PHP7 Null coalescing operator
$check_value = $_POST['my_checkbox_name'] ?? 0;
Чтобы проверить, установлен ли флажок, используйте empty ()
Когда форма отправляется, флажок ВСЕГДА устанавливается, потому что все переменные POST будут отправляться с формой.
Проверьте, установлен ли флажок с пустым значением:
//Check if checkbox is checked if(!empty($_POST['checkbox']){ #Checkbox selected code } else { #Checkbox not selected code }
Я использую этот трюк в течение нескольких лет, и он отлично работает без каких-либо проблем при проверке / снятии флажка при использовании с 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 для базы данных.
<?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']); } ?>
с<?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']); } ?>