Nuances do uso de checkboxes em PHP

Suponha que em nosso formulário haja apenas uma checkbox:

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

Suponha que o código de processamento do nosso formulário seja assim:

html<?php
  if (!empty($_GET)) { // se o formulário foi enviado
    if (isset($_GET['flag'])) { // se a checkbox estiver marcada
      echo 'marcado';
    } else {
      echo 'não marcado';
    }
  }
?>

Enfrentaremos um problema - se a checkbox não estiver marcada, então, como não há outros elementos no formulário além da checkbox, o array $_GET estará vazio. Isso significa que no código de processamento do formulário não entraremos no primeiro if, que verifica o envio do formulário.

Para resolver esse problema, usa-se uma técnica especial: cria-se um input hidden com o mesmo nome da nossa checkbox. Ao mesmo tempo, o valor do input hidden é definido como zero, e o da checkbox - como um:

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

Nesse caso, acontecerá o seguinte. Se a checkbox não estiver marcada, apenas o valor do input hidden será enviado para o servidor. Se a checkbox estiver marcada, ambos os valores com o mesmo nome serão enviados para o servidor. Mas, como o valor da checkbox será o segundo, ele simplesmente sobrescreverá o primeiro.

Então, agora nossa checkbox enviará para o servidor zero ou um:

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

Vamos usar isso na nossa verificação:

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

Usando uma checkbox, pergunte ao usuário se ele já tem 18 anos ou não. Se tiver, permita o acesso ao site, e se não tiver - não permita.