Nyanser vid användning av kryssrutor i PHP
Låt det endast finnas en kryssruta i vårt formulär:
<form action="" method="GET">
<input type="checkbox" name="flag">
<input type="submit">
</form>
Låt koden som hanterar vårt formulär se ut så här:
<?php
if (!empty($_GET)) { // om formuläret skickades
if (isset($_GET['flag'])) { // om kryssrutan är markerad
echo 'markerad';
} else {
echo 'inte markerad';
}
}
?>
Vi kommer att möta ett problem - om kryssrutan inte är markerad,
och eftersom det inte finns några andra element i formuläret förutom kryssrutan,
kommer $_GET att innehålla en tom
array. Det betyder att vi i koden för formulärhanteringen
inte kommer att komma in i den första if-satsen som kontrollerar
om formuläret skickades.
För att lösa problemet används ett speciellt knep: man skapar en dold input med samma namn som vår kryssruta. Samtidigt sätter man värdet på den dolda inputen till noll, och kryssrutans värde till ett:
<form action="" method="GET">
<input type="hidden" name="flag" value="0">
<input type="checkbox" name="flag" value="1">
<input type="submit">
</form>
I det här fallet kommer följande att hända. Om kryssrutan inte är markerad, kommer bara värdet från den dolda inputen att skickas till servern. Om kryssrutan är markerad, kommer båda värdena med samma namn att skickas till servern. Men eftersom kryssrutans värde kommer att vara det andra, kommer det helt enkelt att skriva över det första.
Så, nu kommer vår kryssruta att skicka antingen noll eller ett till servern:
<?php
var_dump($_GET['flag']); // '0' eller '1'
?>
Låt oss använda detta i vår kontroll:
<?php
if (!empty($_GET)) {
if ($_GET['flag'] === '1') {
echo 'markerad';
} else {
echo 'inte markerad';
}
}
?>
Fråga användaren med hjälp av en kryssruta
om hen redan är 18 år eller inte. Om
hen är det, ge hen tillgång till webbplatsen, och om
inte - ge inte tillgång.