Нюанси на използването на отметки в 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 години или не.
Ако е навършил, разрешете му достъп до сайта, а ако
не е - не му разрешавайте.