PHP:ssä valintaruutujen käytön vivahteet

Oletetaan, että lomakkeessamme on vain yksi valintaruutu:

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

Oletetaan, että lomakkeen käsittelykoodi näyttää tältä:

html<?php
  if (!empty($_GET)) { // jos lomake lähetettiin
    if (isset($_GET['flag'])) { // jos valintaruutu on valittu
      echo 'valittu';
    } else {
      echo 'ei valittu';
    }
  }
?>

Meitä odottaa ongelma - jos valintaruuttua ei ole valittu, niin koska lomakkeessa ei ole muita elementtejä valintaruudun lisäksi, $_GET -taulukko on tyhjä. Tämä tarkoittaa, että lomakkeen käsittelykoodissa emme pääse ensimmäiseen if -ehtoon, joka tarkistaa lomakkeen lähetyksen.

Ongelman ratkaisemiseksi käytetään erikoista keinoa: luodaan piilotettu input-kenttä, jolla on sama nimi kuin valintaruudullamme. Tässä tapauksessa piilotetun kentän arvoksi asetetaan nolla ja valintaruudun arvoksi yksi:

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

Tässä tapauksessa tapahtuu seuraavaa. Jos valintaruuttua ei ole valittu, palvelimelle lähetetään vain piilotetun kentän arvo. Jos taas valintaruutu on valittu, palvelimelle lähetetään molemmat arvot samalla nimellä. Mutta koska valintaruudun arvo on toisena, se yksinkertaisesti korvaa ensimmäisen.

Siis, nyt valintaruutulamme lähettää palvelimelle joko nollan tai yhden:

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

Käytetään tätä tarkistuksessamme:

html<?php
  if (!empty($_GET)) {
    if ($_GET['flag'] === '1') {
      echo 'valittu';
    } else {
      echo 'ei valittu';
    }
  }
?>
Задание 1

Kysy valintaruudun avulla käyttäjältä, onko hänellä täyttänyt 18 vuotta vai ei. Jos on, salli hänen pääsy sivustolle, ja jos ei - älä salli.