Нюансы выкарыстання чэкбоксаў у 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 гадоў ці не. Калі
ёсць, дазвольце яму доступ на сайт, а калі
няма - не дазваляйце.