Nuance používání zaškrtávacích polí v PHP

Nechť je v našem formuláři pouze zaškrtávací políčko:

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

Nechť kód zpracování našeho formuláře vypadá takto:

html<?php
  if (!empty($_GET)) { // pokud byl formulář odeslán
    if (isset($_GET['flag'])) { // pokud je zaškrtávací políčko zaškrtnuto
      echo 'zaškrtnuto';
    } else {
      echo 'nezaškrtnuto';
    }
  }
?>

Čeká nás problém - pokud zaškrtávací políčko není zaškrtnuto, tak, protože ve formuláři kromě zaškrtávacího políčka nejsou žádné další prvky, bude v $_GET ležet prázdné pole. To znamená, že v kódu pro zpracování formuláře se nedostaneme do prvního if, který kontroluje odeslání formuláře.

Pro řešení problému se používá speciální trik: vytvoří se skrytý input se stejným názvem, jako má naše zaškrtávací políčko. Přitom hodnotou skrytého inputu nastaví nulu a zaškrtávacího políčka - jedničku:

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

V takovém případě nastane následující. Pokud zaškrtávací políčko není zaškrtnuto, na server se odešle pouze hodnota skrytého inputu. Pokud je zaškrtávací políčko zaškrtnuto, na server se odešlou obě hodnoty se stejným názvem. Ale protože hodnota zaškrtávacího políčka bude druhá, tak jednoduše přepíše tu první.

Takže nyní naše zaškrtávací políčko bude odesílat na server buď nulu, nebo jedničku:

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

Použijeme to v naší kontrole:

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

Pomocí zaškrtávacího políčka se zeptejte uživatele, zda je mu již 18 let nebo ne. Pokud ano, povolte mu přístup na web, a pokud ne - nepovolte.