Matices del uso de casillas de verificación en PHP
Supongamos que en nuestro formulario solo hay una casilla de verificación:
<form action="" method="GET">
<input type="checkbox" name="flag">
<input type="submit">
</form>
Supongamos que el código de procesamiento de nuestro formulario se ve así:
<?php
if (!empty($_GET)) { // si el formulario fue enviado
if (isset($_GET['flag'])) { // si la casilla está marcada
echo 'marcado';
} else {
echo 'no marcado';
}
}
?>
Nos espera un problema: si la casilla no está marcada,
entonces, dado que en el formulario no hay otros elementos
además de la casilla de verificación, en $_GET habrá un array
vacío. Esto significa que en el código de procesamiento del
formulario no entraremos en el primer if, que verifica
el envío del formulario.
Para resolver el problema, se utiliza una técnica especial: crear un campo de entrada oculto con el mismo nombre que nuestra casilla de verificación. Al mismo tiempo, el valor del campo oculto se establece en cero, y el de la casilla de verificación, en uno:
<form action="" method="GET">
<input type="hidden" name="flag" value="0">
<input type="checkbox" name="flag" value="1">
<input type="submit">
</form>
En este caso, ocurrirá lo siguiente. Si la casilla de verificación no está marcada, solo se enviará el valor del campo oculto al servidor. Si la casilla de verificación está marcada, se enviarán ambos valores con un mismo nombre al servidor. Pero, dado que el valor de la casilla de verificación será el segundo, simplemente sobrescribirá al primero.
Entonces, ahora nuestra casilla de verificación enviará al servidor cero o uno:
<?php
var_dump($_GET['flag']); // '0' o '1'
?>
Usemos esto en nuestra verificación:
<?php
if (!empty($_GET)) {
if ($_GET['flag'] === '1') {
echo 'marcado';
} else {
echo 'no marcado';
}
}
?>
Usando una casilla de verificación, pregunte al usuario
si ya tiene 18 años o no. Si
los tiene, permítale el acceso al sitio, y si
no, no se lo permita.