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