Podrobnosti uporabe potrditvenih polj v PHP

Recimo, da je v našem obrazcu le potrditveno polje:

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

Naj koda za obdelavo našega obrazca izgleda takole:

html<?php
  if (!empty($_GET)) { // če je bil obrazec poslan
    if (isset($_GET['flag'])) { // če je potrditveno polje označeno
      echo 'označeno';
    } else {
      echo 'ni označeno';
    }
  }
?>

Pričakuje nas težava - če potrditveno polje ni označeno, potem, ker v obrazcu poleg potrditvenega polja ni drugih elementov, bo v $_GET prazen seznam. To pomeni, da v kodi za obdelavo obrazca ne bomo prišli v prvi if, ki preverja pošiljanje obrazca.

Za rešitev težave uporabijo poseben postopek: ustvarijo skriti vnos z enakim imenom, kot je naše potrditveno polje. Pri tem vrednost skritega vnosa nastavijo na nič, potrditvenega polja pa na ena:

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

V tem primeru se bo zgodilo naslednje. Če potrditveno polje ni označeno, bo na strežnik poslan le vrednost skritega vnosa. Če pa je potrditveno polje označeno, pa bosta na strežnik poslani obe vrednosti z enim imenom. Toda, ker bo vrednost potrditvenega polja druga, bo preprosto povošila prvo.

Torej, zdaj bo naše potrditveno polje pošiljalo na strežnik bodisi nič, bodisi ena:

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

Uporabimo to v našem preverjanju:

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

S potrditvenim poljem vprašajte uporabnika, ali je star 18 let ali ne. Če je, mu dovolite dostop do spletnega mesta, če pa ni - mu ga ne dovolite.