Čekboksų naudojimo niuansai PHP
Tarkime, mūsų formoje yra tik čekboksas:
<form action="" method="GET">
<input type="checkbox" name="flag">
<input type="submit">
</form>
Tarkime, mūsų formos apdorojimo kodas atrodo taip:
<?php
if (!empty($_GET)) { // jei forma buvo išsiųsta
if (isset($_GET['flag'])) { // jei varnelė pažymėta
echo 'pažymėta';
} else {
echo 'nepažymėta';
}
}
?>
Mus laukia problema - jei varnelė nepažymėta,
tai, kadangi formoje, išskyrus čekboksą, nėra kitų
elementų, $_GET bus tuščias
masyvas. Tai reiškia, kad formos apdorojimo
kode mes nepateksime į pirmąjį if, tikrinantį
formos išsiuntimą.
Problemai išspręsti naudojamas specialus priėmimas: sukuriamas paslėptas įvesties laukas su tokiu pačiu pavadinimu, kaip ir mūsų čekboksas. Tuo pačiu paslėpto įvesties lauko reikšmė nustatoma į nulį, o čekboksas - į vienetą:
<form action="" method="GET">
<input type="hidden" name="flag" value="0">
<input type="checkbox" name="flag" value="1">
<input type="submit">
</form>
Tokiu atveju bus taip. Jei čekboksas nepažymėtas, į serverį bus išsiųsta tik paslėpto įvesties lauko reikšmė. Jei čekboksas pažymėtas, į serverį bus išsiųstos abiejų reikšmės su vienu pavadinimu. Bet, kadangi čekboksų reikšmė bus antroji, ji tiesiog perrašys pirmąją.
Taigi, dabar mūsų čekboksas siųs į serverį arba nulį, arba vienetą:
<?php
var_dump($_GET['flag']); // '0' arba '1'
?>
Naudokime tai mūsų patikroje:
<?php
if (!empty($_GET)) {
if ($_GET['flag'] === '1') {
echo 'pažymėta';
} else {
echo 'nepažymėta';
}
}
?>
Naudodami varnelę paklauskite vartotojo,
ar jam jau yra 18 metų, ar ne. Jei
taip, leiskite jam prieigą prie svetainės, o jei
ne - neleiskite.