Nuances van het gebruik van checkboxes in PHP
Stel dat ons formulier alleen een checkbox heeft:
<form action="" method="GET">
<input type="checkbox" name="flag">
<input type="submit">
</form>
Stel dat de verwerkingscode voor ons formulier er als volgt uitziet:
<?php
if (!empty($_GET)) { // als het formulier is verzonden
if (isset($_GET['flag'])) { // als het vinkje is aangevinkt
echo 'aangevinkt';
} else {
echo 'niet aangevinkt';
}
}
?>
We staan voor een probleem - als het vinkje niet is aangevinkt,
dan, omdat er in het formulier behalve de checkbox geen andere
elementen zijn, zal $_GET een lege array bevatten.
Dit betekent dat we in de verwerkingscode
niet in de eerste if zullen komen, die
de formulierverzending controleert.
Om het probleem op te lossen, wordt een speciale techniek gebruikt: er wordt een verborgen input gemaakt met dezelfde naam als onze checkbox. Hierbij wordt de waarde van de verborgen input op nul gezet, en die van de checkbox op één:
<form action="" method="GET">
<input type="hidden" name="flag" value="0">
<input type="checkbox" name="flag" value="1">
<input type="submit">
</form>
In dat geval gebeurt het volgende. Als de checkbox niet is aangevinkt, wordt alleen de waarde van de verborgen input naar de server verzonden. Als de checkbox is aangevinkt, worden beide waarden met dezelfde naam naar de server verzonden. Maar, omdat de waarde van de checkbox de tweede zal zijn, zal deze de eerste overschrijven.
Kortom, nu zal onze checkbox naar de server of nul, of één sturen:
<?php
var_dump($_GET['flag']); // '0' of '1'
?>
Laten we dit gebruiken in onze controle:
<?php
if (!empty($_GET)) {
if ($_GET['flag'] === '1') {
echo 'aangevinkt';
} else {
echo 'niet aangevinkt';
}
}
?>
Vraag de gebruiker met behulp van een vinkje
of hij/zij al 18 jaar of ouder is.
Zo ja, sta hem/haar dan toegang tot de site toe, en zo
niet - sta het niet toe.