PHP да чекбокслардан фойдаланишнинг нуанслари
Фарз қилайлик, бизнинг формамизда фақат чекбокс бор:
<form action="" method="GET">
<input type="checkbox" name="flag">
<input type="submit">
</form>
Фарз қилайлик, бизнинг формани қайта ишлаш кодимиз шундай кўринишда:
<?php
if (!empty($_GET)) { // агар форма юборилган бўлса
if (isset($_GET['flag'])) { // агар чекбокс белгиланган бўлса
echo 'белгиланган';
} else {
echo 'белгиланмаган';
}
}
?>
Бизни муаммо кутмоқда - агар чекбокс белгиланмаган бўлса,
унда, формада чекбоксдан бошқа бошқа элементлар
мавжуд бўлмагани сабабли, $_GET да бўш
массив бўлади. Демак, формани қайта ишлаш кодида
биз форманинг юборилганлигини текширадиган биринчи if га киролмаймиз.
Бу муаммони ҳал қилиш учун махсус усулдан фойдаланилади: чекбоксимизнинг номи бир хил бўлган яхширитма инпут яратилади. Бунда яхширитма инпутнинг қийматига нол, чекбокснинг қийматига эса бир қўйилади:
<form action="" method="GET">
<input type="hidden" name="flag" value="0">
<input type="checkbox" name="flag" value="1">
<input type="submit">
</form>
Бундай ҳолатда куйидаги натижа ҳосил бўлади. Агар чекбокс белгиланмаган бўлса, унда серверга фақат яхширитма инпутнинг қиймати юборилади. Агар эса чекбокс белгиланган бўлса, унда серверга бир ном билан иккита қиймат юборилади. Лекин, чекбокснинг қиймати иккинчи бўлгани сабабли, у биринчисини ўчириб юборади.
Демак, энди бизнинг чекбоксимиз серверга йўналтирадиган қиймат нол ёки бир бўлади:
<?php
var_dump($_GET['flag']); // '0' ёки '1'
?>
Бунни текширишда фойдаланамиз:
<?php
if (!empty($_GET)) {
if ($_GET['flag'] === '1') {
echo 'белгиланган';
} else {
echo 'белгиланмаган';
}
}
?>
Чекбокс ёрдамида фойдаланувчидан сўранг,
унинг ёши 18 га етганми ёки йўқми. Агар
ётган бўлса, унга сайтга киришга рухсат беринг, агар
ётмаган бўлса - рухсат берманг.