Нюанси на използването на отметки в PHP

Да предположим, че във формата ни има само отметка:

html<form action="" method="GET">
  <input type="checkbox" name="flag">
  <input type="submit">
</form>

Да предположим, че кодът за обработка на нашата форма изглежда така:

html<?php
  if (!empty($_GET)) { // ако формата е изпратена
    if (isset($_GET['flag'])) { // ако отметката е отбелязана
      echo 'отбелязана';
    } else {
      echo 'не е отбелязана';
    }
  }
?>

Ще се сблъскаме с проблем - ако отметката не е отбелязана, тъй като във формата няма други елементи освен отметката, в $_GET ще има празен масив. Това означава, че в кодът за обработка на формата няма да влезем в първия if, който проверява изпращането на формата.

За решаване на проблема се използва специална техника: създава се скрито поле за въвеждане със същото име, както на нашата отметка. В този случай стойността на скритото поле се задава на нула, а на отметката - на единица:

html<form action="" method="GET">
  <input type="hidden" name="flag" value="0">
  <input type="checkbox" name="flag" value="1">
  <input type="submit">
</form>

В този случай ще се получи следното. Ако отметката не е отбелязана, на сървъра ще бъде изпратена само стойността на скритото поле. Ако отметката е отбелязана, на сървъра ще бъдат изпратени и двете стойности с едно и също име. Но, тъй като стойността на отметката ще бъде втора, тя просто ще презапише първата.

И така, сега нашата отметка ще изпраща на сървъра или нула, или единица:

html<?php
  var_dump($_GET['flag']); // '0' или '1'
?>

Нека използваме това в нашата проверка:

html<?php
  if (!empty($_GET)) {
    if ($_GET['flag'] === '1') {
      echo 'отбелязана';
    } else {
      echo 'не е отбелязана';
    }
  }
?>
Задание 1

С помощта на отметка попитайте потребителя дали е навършил 18 години или не. Ако е навършил, разрешете му достъп до сайта, а ако не е - не му разрешавайте.