Nuance používání zaškrtávacích polí v PHP
Nechť je v našem formuláři pouze zaškrtávací políčko:
<form action="" method="GET">
<input type="checkbox" name="flag">
<input type="submit">
</form>
Nechť kód zpracování našeho formuláře vypadá takto:
<?php
if (!empty($_GET)) { // pokud byl formulář odeslán
if (isset($_GET['flag'])) { // pokud je zaškrtávací políčko zaškrtnuto
echo 'zaškrtnuto';
} else {
echo 'nezaškrtnuto';
}
}
?>
Čeká nás problém - pokud zaškrtávací políčko není zaškrtnuto,
tak, protože ve formuláři kromě zaškrtávacího políčka nejsou žádné další
prvky, bude v $_GET ležet prázdné
pole. To znamená, že v kódu pro zpracování
formuláře se nedostaneme do prvního if, který kontroluje
odeslání formuláře.
Pro řešení problému se používá speciální trik: vytvoří se skrytý input se stejným názvem, jako má naše zaškrtávací políčko. Přitom hodnotou skrytého inputu nastaví nulu a zaškrtávacího políčka - jedničku:
<form action="" method="GET">
<input type="hidden" name="flag" value="0">
<input type="checkbox" name="flag" value="1">
<input type="submit">
</form>
V takovém případě nastane následující. Pokud zaškrtávací políčko není zaškrtnuto, na server se odešle pouze hodnota skrytého inputu. Pokud je zaškrtávací políčko zaškrtnuto, na server se odešlou obě hodnoty se stejným názvem. Ale protože hodnota zaškrtávacího políčka bude druhá, tak jednoduše přepíše tu první.
Takže nyní naše zaškrtávací políčko bude odesílat na server buď nulu, nebo jedničku:
<?php
var_dump($_GET['flag']); // '0' nebo '1'
?>
Použijeme to v naší kontrole:
<?php
if (!empty($_GET)) {
if ($_GET['flag'] === '1') {
echo 'zaškrtnuto';
} else {
echo 'nezaškrtnuto';
}
}
?>
Pomocí zaškrtávacího políčka se zeptejte uživatele,
zda je mu již 18 let nebo ne. Pokud
ano, povolte mu přístup na web, a pokud
ne - nepovolte.