A jelölőnégyzetek használatának finomságai PHP-ben
Tegyük fel, hogy a formunkban csak egy jelölőnégyzet van:
<form action="" method="GET">
<input type="checkbox" name="flag">
<input type="submit">
</form>
Tegyük fel, hogy az űrlapfeldolgozó kódunk így néz ki:
<?php
if (!empty($_GET)) { // ha az űrlap elküldésre került
if (isset($_GET['flag'])) { // ha a jelölőnégyzet be van jelölve
echo 'bejelölt';
} else {
echo 'nincs bejelölve';
}
}
?>
Problémába fogunk ütközni - ha a jelölőnégyzet nincs bejelölve,
akkor, mivel az űrlapban a jelölőnégyzeten kívül nincsenek más
elemek, a $_GET egy üres
tömböt fog tartalmazni. Ez azt jelenti, hogy az űrlapfeldolgozó
kódban nem fogunk belépni az első if feltételbe, amely
az űrlap elküldését ellenőrzi.
A probléma megoldására egy speciális trükköt alkalmaznak: létrehozunk egy rejtett inputot ugyanazzal a névvel, mint a jelölőnégyzetünké. Ebben az esetben a rejtett input értékét nullára állítjuk, a jelölőnégyzetét pedig egyre:
<form action="" method="GET">
<input type="hidden" name="flag" value="0">
<input type="checkbox" name="flag" value="1">
<input type="submit">
</form>
Ebben az esetben a következő történik. Ha a jelölőnégyzet nincs bejelölve, akkor csak a rejtett input értéke kerül elküldésre a szerverre. Ha viszont a jelölőnégyzet be van jelölve, akkor mindkét érték, ugyanazzal a névvel, elküldésre kerül a szerverre. De mivel a jelölőnégyzet értéke lesz a második, ez egyszerűen felülírja az elsőt.
Tehát mostantól a jelölőnégyzetünk vagy nullát, vagy egyet fog küldeni a szerverre:
<?php
var_dump($_GET['flag']); // '0' vagy '1'
?>
Használjuk ezt az ellenőrzésünkben:
<?php
if (!empty($_GET)) {
if ($_GET['flag'] === '1') {
echo 'bejelölt';
} else {
echo 'nincs bejelölve';
}
}
?>
Kérdezd meg a jelölőnégyzet segítségével a felhasználótól,
hogy elmúlt-e már 18 éves vagy sem. Ha
igen, engedélyezd a számára a hozzáférést az oldalhoz, ha
nem - ne engedélyezd.