Истифодаи чекбоксҳо дар 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 солрасид шудааст ё не. Агар
шудааст, ба ӯ иҷозати даромад ба сомонаро бидеҳ, ва агар
нашудааст - иҷозат надиҳ.