PHP:ssä valintaruutujen käytön vivahteet
Oletetaan, että lomakkeessamme on vain yksi valintaruutu:
<form action="" method="GET">
<input type="checkbox" name="flag">
<input type="submit">
</form>
Oletetaan, että lomakkeen käsittelykoodi näyttää tältä:
<?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:
<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:
<?php
var_dump($_GET['flag']); // '0' tai '1'
?>
Käytetään tätä tarkistuksessamme:
<?php
if (!empty($_GET)) {
if ($_GET['flag'] === '1') {
echo 'valittu';
} else {
echo 'ei valittu';
}
}
?>
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.