Märkeruutude kasutamise nüansid PHP-s
Oletame, et meie vormis on ainult märkeruut:
<form action="" method="GET">
<input type="checkbox" name="flag">
<input type="submit">
</form>
Oletame, et meie vormi töötlemise kood näeb välja selline:
<?php
if (!empty($_GET)) { // kui vorm saadeti
if (isset($_GET['flag'])) { // kui märkeruut on märgitud
echo 'märgitud';
} else {
echo 'märkimata';
}
}
?>
Meid ootab probleem - kui märkeruutu pole märgitud,
siis, kuna vormis pole peale märkeruudu muid
elemente, on $_GET-s tühi massiiv.
See tähendab, et vormi töötlemise koodis
me ei satu esimesse if-i, mis kontrollib
vormi saatmist.
Probleemi lahendamiseks kasutatakse spetsiaalset võtet: luuakse peidetud sisendväli sama nimega, nagu meie märkeruudul. Sel juhul pannakse peidetud sisendvälja väärtuseks null ja märkeruudu väärtuseks üks:
<form action="" method="GET">
<input type="hidden" name="flag" value="0">
<input type="checkbox" name="flag" value="1">
<input type="submit">
</form>
Sel juhul saab järgmine tulemus. Kui märkeruut pole märgitud, saadetakse serverisse ainult peidetud sisendvälja väärtus. Kui aga märkeruut on märgitud, saadetakse serverisse mõlemad väärtused ühe nimega. Kuid kuna märkeruudu väärtus on teine, siis see lihtsalt kirjutab esimese üle.
Kokkuvõttes saadab nüüd meie märkeruut serverisse kas nulli või ühe:
<?php
var_dump($_GET['flag']); // '0' või '1'
?>
Kasutame seda meie kontrollis:
<?php
if (!empty($_GET)) {
if ($_GET['flag'] === '1') {
echo 'märgitud';
} else {
echo 'märkimata';
}
}
?>
Küsi märkeruudu abil kasutajalt,
kas ta on juba 18-aastane või mitte. Kui
on, anna talle ligipääs saidile, ja kui
mitte - ära anna.