Subtilités de l'utilisation des cases à cocher en PHP
Supposons que notre formulaire n'ait qu'une case à cocher :
<form action="" method="GET">
<input type="checkbox" name="flag">
<input type="submit">
</form>
Supposons que le code de traitement de notre formulaire ressemble à ceci :
<?php
if (!empty($_GET)) { // si le formulaire a été soumis
if (isset($_GET['flag'])) { // si la case est cochée
echo 'coché';
} else {
echo 'non coché';
}
}
?>
Nous allons rencontrer un problème - si la case n'est pas cochée,
alors, comme il n'y a pas d'autres éléments dans le formulaire à part la case à cocher,
$_GET contiendra un tableau
vide. Cela signifie que dans le code de traitement du formulaire,
nous n'entrerons pas dans la première condition if, qui vérifie
la soumission du formulaire.
Pour résoudre ce problème, une astuce spéciale est utilisée : créer un champ caché avec le même nom que notre case à cocher. Dans ce cas, la valeur du champ caché est mise à zéro, et celle de la case à cocher - à un :
<form action="" method="GET">
<input type="hidden" name="flag" value="0">
<input type="checkbox" name="flag" value="1">
<input type="submit">
</form>
Dans ce cas, voici ce qui se passera. Si la case à cocher n'est pas cochée, seule la valeur du champ caché sera envoyée au serveur. Si la case à cocher est cochée, les deux valeurs avec le même nom seront envoyées au serveur. Mais, comme la valeur de la case à cocher sera la seconde, elle écrasera simplement la première.
Ainsi, notre case à cocher enverra désormais au serveur soit zéro, soit un :
<?php
var_dump($_GET['flag']); // '0' ou '1'
?>
Utilisons cela dans notre vérification :
<?php
if (!empty($_GET)) {
if ($_GET['flag'] === '1') {
echo 'coché';
} else {
echo 'non coché';
}
}
?>
À l'aide d'une case à cocher, demandez à l'utilisateur
s'il a 18 ans ou plus. S'il
les a, autorisez son accès au site, et sinon - ne l'autorisez pas.