Nuanțe ale utilizării casetelor de bifat în PHP

Să presupunem că în formularul nostru există doar o casetă de bifat:

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

Să presupunem că codul de procesare al formularului nostru arată astfel:

html<?php
  if (!empty($_GET)) { // dacă formularul a fost trimis
    if (isset($_GET['flag'])) { // dacă caseta este bifată
      echo 'bifat';
    } else {
      echo 'nebifat';
    }
  }
?>

Ne așteaptă o problemă - dacă caseta nu este bifată, atunci, deoarece în formular nu există alte elemente în afară de caseta de bifat, în $_GET va fi un array gol. Aceasta înseamnă că în codul de procesare al formularului nu vom intra în primul if, care verifică trimiterea formularului.

Pentru a rezolva această problemă, se utilizează o tehnică specială: se creează un input hidden cu același nume ca și caseta noastră de bifat. În acest caz, valoarea input-ului hidden se setează la zero, iar a casetei de bifat - la unu:

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

În acest caz, se va întâmpla următoarele. Dacă caseta de bifat nu este bifată, atunci pe server va fi trimisă doar valoarea input-ului hidden. Dacă însă caseta de bifat este bifată, atunci pe server vor fi trimise ambele valori cu același nume. Dar, deoarece valoarea casetei de bifat va fi a doua, aceasta va înlocui prima.

Deci, acum caseta noastră de bifat va trimite pe server fie zero, fie unu:

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

Să utilizăm acest lucru în verificarea noastră:

html<?php
  if (!empty($_GET)) {
    if ($_GET['flag'] === '1') {
      echo 'bifat';
    } else {
      echo 'nebifat';
    }
  }
?>
Задание 1

Folosind o casetă de bifat, întrebați utilizatorul dacă are deja 18 ani sau nu. Dacă are, permiteți-i accesul pe site, iar dacă nu - nu-i permiteți.