Čekboksų naudojimo niuansai PHP

Tarkime, mūsų formoje yra tik čekboksas:

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

Tarkime, mūsų formos apdorojimo kodas atrodo taip:

html<?php
  if (!empty($_GET)) { // jei forma buvo išsiųsta
    if (isset($_GET['flag'])) { // jei varnelė pažymėta
      echo 'pažymėta';
    } else {
      echo 'nepažymėta';
    }
  }
?>

Mus laukia problema - jei varnelė nepažymėta, tai, kadangi formoje, išskyrus čekboksą, nėra kitų elementų, $_GET bus tuščias masyvas. Tai reiškia, kad formos apdorojimo kode mes nepateksime į pirmąjį if, tikrinantį formos išsiuntimą.

Problemai išspręsti naudojamas specialus priėmimas: sukuriamas paslėptas įvesties laukas su tokiu pačiu pavadinimu, kaip ir mūsų čekboksas. Tuo pačiu paslėpto įvesties lauko reikšmė nustatoma į nulį, o čekboksas - į vienetą:

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

Tokiu atveju bus taip. Jei čekboksas nepažymėtas, į serverį bus išsiųsta tik paslėpto įvesties lauko reikšmė. Jei čekboksas pažymėtas, į serverį bus išsiųstos abiejų reikšmės su vienu pavadinimu. Bet, kadangi čekboksų reikšmė bus antroji, ji tiesiog perrašys pirmąją.

Taigi, dabar mūsų čekboksas siųs į serverį arba nulį, arba vienetą:

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

Naudokime tai mūsų patikroje:

html<?php
  if (!empty($_GET)) {
    if ($_GET['flag'] === '1') {
      echo 'pažymėta';
    } else {
      echo 'nepažymėta';
    }
  }
?>
Задание 1

Naudodami varnelę paklauskite vartotojo, ar jam jau yra 18 metų, ar ne. Jei taip, leiskite jam prieigą prie svetainės, o jei ne - neleiskite.