PHP-da checkboxlardan foydalanishning nozik tomonlari
Faraz qilaylik, bizning formada faqat bitta checkbox bor:
<form action="" method="GET">
<input type="checkbox" name="flag">
<input type="submit">
</form>
Formani qayta ishlash kodi quyidagicha ko'rinishda bo'lsin:
<?php
if (!empty($_GET)) { // agar forma yuborilgan bo'lsa
if (isset($_GET['flag'])) { // agar belgilangan bo'lsa
echo 'belgilangan';
} else {
echo 'belgilanmagan';
}
}
?>
Bizni muammo kutmoqda - agar checkbox belgilanmagan bo'lsa,
va formada checkboxdan tashqari boshqa elementlar bo'lmasa,
$_GET massivi bo'sh bo'ladi. Bu shuni anglatadiki,
forma qayta ishlash kodida biz formaning yuborilishini
tekshiradigan birinchi if ga kirmaymiz.
Bu muammoni hal qilish uchun maxsus usul qo'llaniladi: checkbox bilan bir xil nomga ega bo'lgan maxfiy input yaratiladi. Bunda maxfiy inputning qiymati nol, checkboxning qiymati esa bir bo'ladi:
<form action="" method="GET">
<input type="hidden" name="flag" value="0">
<input type="checkbox" name="flag" value="1">
<input type="submit">
</form>
Bunday holatda quyidagi natija paydo bo'ladi. Agar checkbox belgilanmagan bo'lsa, serverga faqat maxfiy inputning qiymati yuboriladi. Agar checkbox belgilangan bo'lsa, serverga bir xil nomdagi ikkala qiymat yuboriladi. Lekin, checkboxning qiymati ikkinchi bo'lgani uchun, u birinchisini bekor qiladi.
Shunday qilib, endi bizning checkbox serverga nol yoki bir qiymatini yuboradi:
<?php
var_dump($_GET['flag']); // '0' yoki '1'
?>
Buni tekshirishda qo'llaymiz:
<?php
if (!empty($_GET)) {
if ($_GET['flag'] === '1') {
echo 'belgilangan';
} else {
echo 'belgilanmagan';
}
}
?>
Checkbox yordamida foydalanuvchidan so'rang,
uning yoshi 18 dan oshganmi yoki yo'qmi.
Agar oshgan bo'lsa, unga saytga kirishga ruxsat bering,
aks holda - ruxsat bermang.