Nuancer ved brug af afkrydsningsfelter i PHP
Lad der i vores form kun være et afkrydsningsfelt:
<form action="" method="GET">
<input type="checkbox" name="flag">
<input type="submit">
</form>
Lad koden, der behandler vores form, se sådan ud:
<?php
if (!empty($_GET)) { // hvis formularen blev sendt
if (isset($_GET['flag'])) { // hvis afkrydsningsfeltet er markeret
echo 'markeret';
} else {
echo 'ikke markeret';
}
}
?>
Vi står over for et problem - hvis afkrydsningsfeltet ikke er markeret,
så vil $_GET indeholde en tom
array, da der ikke er andre elementer i formularen udover afkrydsningsfeltet.
Det betyder, at vi i koden, der behandler formularen,
ikke kommer ind i den første if, der kontrollerer
om formularen er blevet sendt.
For at løse dette problem bruger man et specielt trick: man opretter et skjult inputfelt med det samme navn som vores afkrydsningsfelt. Her sætter man værdien på det skjulte inputfelt til nul, og afkrydsningsfeltets værdi til en:
<form action="" method="GET">
<input type="hidden" name="flag" value="0">
<input type="checkbox" name="flag" value="1">
<input type="submit">
</form>
I dette tilfælde vil følgende ske. Hvis afkrydsningsfeltet ikke er markeret, vil kun værdien fra det skjulte inputfelt blive sendt til serveren. Hvis afkrydsningsfeltet derimod er markeret, vil begge værdier med samme navn blive sendt til serveren. Men, da afkrydsningsfeltets værdi vil være den sidste, vil den overskrive den første.
Således vil vores afkrydsningsfelt nu sende enten nul eller en til serveren:
<?php
var_dump($_GET['flag']); // '0' eller '1'
?>
Lad os bruge dette i vores kontrol:
<?php
if (!empty($_GET)) {
if ($_GET['flag'] === '1') {
echo 'markeret';
} else {
echo 'ikke markeret';
}
}
?>
Spørg brugeren ved hjælp af et afkrydsningsfelt, om
han/hun er over 18 år. Hvis
ja, giv ham/hende adgang til sitet, og hvis
nej - så giv ikke adgang.