Nuansy použitia checkboxov v PHP
Nech v našom formulári je iba checkbox:
<form action="" method="GET">
<input type="checkbox" name="flag">
<input type="submit">
</form>
Nech kód spracovania nášho formulára vyzerá takto:
<?php
if (!empty($_GET)) { // ak bol formulár odoslaný
if (isset($_GET['flag'])) { // ak je checkbox zaškrtnutý
echo 'zaškrtnutý';
} else {
echo 'nezaškrtnutý';
}
}
?>
Čaká nás problém - ak checkbox nie je zaškrtnutý,
tak, keďže vo formulári okrem checkboxu nie sú žiadne ďalšie
prvky, v $_GET bude prázdne
pole. To znamená, že v kóde na spracovanie
formulára sa nedostaneme do prvého if, ktorý kontroluje
odoslanie formulára.
Na vyriešenie problému sa používa špeciálna pomôcka: vytvorí sa skrytý input s rovnakým menom, ako má náš checkbox. Pričom hodnotou skrytého inputu nastavia nulu a checkboxu - jednotku:
<form action="" method="GET">
<input type="hidden" name="flag" value="0">
<input type="checkbox" name="flag" value="1">
<input type="submit">
</form>
V takom prípade nastane nasledovné. Ak checkbox nie je zaškrtnutý, na server sa odošle iba hodnota skrytého inputu. Ak je checkbox zaškrtnutý, na server sa odošlú obe hodnoty s jedným menom. Ale, keďže hodnota checkboxu bude druhá, tak jednoducho prepíše prvú.
Takže, teraz náš checkbox bude odosielať na server buď nulu, alebo jednotku:
<?php
var_dump($_GET['flag']); // '0' alebo '1'
?>
Využime to v našej kontrole:
<?php
if (!empty($_GET)) {
if ($_GET['flag'] === '1') {
echo 'zaškrtnutý';
} else {
echo 'nezaškrtnutý';
}
}
?>
Pomocou checkboxu sa spýtajte používateľa,
či má už 18 rokov alebo nie. Ak
áno, umožnite mu prístup na stránku, a ak
nie - neumožnite.