Nuances do uso de checkboxes em PHP
Suponha que em nosso formulário haja apenas uma checkbox:
<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:
<?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:
<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:
<?php
var_dump($_GET['flag']); // '0' ou '1'
?>
Vamos usar isso na nossa verificação:
<?php
if (!empty($_GET)) {
if ($_GET['flag'] === '1') {
echo 'marcado';
} else {
echo 'não marcado';
}
}
?>
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.