Нюансы использования чекбоксов в PHP
Пусть в нашей форме есть только чекбокс:
<form action="" method="GET">
<input type="checkbox" name="flag">
<input type="submit">
</form>
Пусть код обработки нашей формы выглядит вот так:
<?php
if (!empty($_GET)) { // если форма была отправлена
if (isset($_GET['flag'])) { // если флажок отмечен
echo 'отмечен';
} else {
echo 'не отмечен';
}
}
?>
Нас ждет проблема - если флажок не отмечен,
то, так как в форме кроме чекбокса нет других
элементов, в $_GET
будет лежать пустой
массив. Это значит, что в коде обработки
формы мы не попадем в первый if
, проверяющий
отправку формы.
Для решения проблемы используют специальный прием: создают скрытый инпут с таким же именем, как и у нашего чекбокса. При этом значением скрытого инпута ставят ноль, а чебокса - единицу:
<form action="" method="GET">
<input type="hidden" name="flag" value="0">
<input type="checkbox" name="flag" value="1">
<input type="submit">
</form>
В таком случае получится следующее. Если чекбокс не отмечен, то на сервер отправится только значение скрытого инпута. Если же чекбокс отмечен, то на сервер отправятся оба значения с одним именем. Но, так как значение чекбокса будет вторым, то оно просто затрет первое.
Итак, теперь наша чекбокс будет отправлять на сервер или ноль, или один:
<?php
var_dump($_GET['flag']); // '0' или '1'
?>
Используем это в нашей проверке:
<?php
if (!empty($_GET)) {
if ($_GET['flag'] === '1') {
echo 'отмечен';
} else {
echo 'не отмечен';
}
}
?>
С помощью флажка спросите у пользователя,
есть ему уже 18
лет или нет. Если
есть, разрешите ему доступ на сайт, а если
нет - не разрешите.