Nyanser ved bruk av avkrysningsbokser i PHP
La det i vårt skjema bare være en avkrysningsboks:
<form action="" method="GET">
<input type="checkbox" name="flag">
<input type="submit">
</form>
La koden som behandler skjemaet vårt se slik ut:
<?php
if (!empty($_GET)) { // hvis skjemaet ble sendt
if (isset($_GET['flag'])) { // hvis avkrysningsboksen er merket
echo 'merket';
} else {
echo 'ikke merket';
}
}
?>
Vi står overfor et problem - hvis avkrysningsboksen ikke er merket,
vil $_GET inneholde en tom
array fordi det i skjemaet ikke er andre
elementer enn avkrysningsboksen. Dette betyr at vi i koden som behandler
skjemaet ikke vil komme inn i den første if-sjekken som kontrollerer
om skjemaet er sendt.
For å løse dette problemet bruker man et spesielt triks: man oppretter et skjult input-felt med samme navn som avkrysningsboksen vår. I tillegg setter man verdien på det skjulte input-feltet til null, og avkrysningsboksens verdi til én:
<form action="" method="GET">
<input type="hidden" name="flag" value="0">
<input type="checkbox" name="flag" value="1">
<input type="submit">
</form>
I dette tilfellet vil følgende skje. Hvis avkrysningsboksen ikke er merket, vil kun verdien fra det skjulte input-feltet bli sendt til serveren. Hvis avkrysningsboksen derimot er merket, vil begge verdiene med samme navn bli sendt til serveren. Men, siden verdien til avkrysningsboksen vil være den andre, vil den bare overskrive den første.
Så, nå vil avkrysningsboksen vår sende enten null eller én til serveren:
<?php
var_dump($_GET['flag']); // '0' eller '1'
?>
La oss bruke dette i kontrollen vår:
<?php
if (!empty($_GET)) {
if ($_GET['flag'] === '1') {
echo 'merket';
} else {
echo 'ikke merket';
}
}
?>
Spør brukeren ved hjelp av en avkrysningsboks
om hen allerede er 18 år eller ikke. Hvis
hen er det, gi tilgang til nettsiden, og hvis
ikke - ikke gi tilgang.