Checkbox izmantošanas nianses PHP

Pieņemsim, ka mūsu formā ir tikai checkbox:

html<form action="" method="GET">
  <input type="checkbox" name="flag">
  <input type="submit">
</form>

Pieņemsim, ka mūsu formas apstrādes kods izskatās šādi:

html<?php
  if (!empty($_GET)) { // ja forma tika nosūtīta
    if (isset($_GET['flag'])) { // ja checkbox ir atzīmēts
      echo 'atzīmēts';
    } else {
      echo 'neatzīmēts';
    }
  }
?>

Mūs sagaida problēma - ja checkbox nav atzīmēts, tā kā formā bez checkbox nav citu elementu, $_GET būs tukšs masīvs. Tas nozīmē, ka formas apstrādes kodā mēs neiekļūsim pirmajā if, kas pārbauda formas nosūtīšanu.

Lai atrisinātu šo problēmu, izmanto speciālu paņēmienu: izveido slēpto input ar tādu pašu nosaukumu kā mūsu checkbox. Šajā gadījumā slēptā input vērtību iestata uz nulli, bet checkbox - uz vienu:

html<form action="" method="GET">
  <input type="hidden" name="flag" value="0">
  <input type="checkbox" name="flag" value="1">
  <input type="submit">
</form>

Šajā gadījumā sanāks sekojošais. Ja checkbox nav atzīmēts, uz serveri tiks nosūtīta tikai slēptā input vērtība. Ja checkbox ir atzīmēts, uz serveri tiks nosūtītas abas vērtības ar vienu nosaukumu. Bet, tā kā checkbox vērtība būs otrā, tā vienkārši pārrakstīs pirmo.

Tātad, tagad mūsu checkbox nosūtīs uz serveri vai nu nulli, vai vienu:

html<?php
  var_dump($_GET['flag']); // '0' vai '1'
?>

Izmantosim to mūsu pārbaudē:

html<?php
  if (!empty($_GET)) {
    if ($_GET['flag'] === '1') {
      echo 'atzīmēts';
    } else {
      echo 'neatzīmēts';
    }
  }
?>
Задание 1

Izmantojot checkbox, jautājiet lietotājam, vai viņam jau ir 18 gadi vai nav. Ja ir, atļaujiet viņam piekļuvi vietnei, bet ja nav - neatļaujiet.