Nuanțe ale utilizării casetelor de bifat în PHP
Să presupunem că în formularul nostru există doar o casetă de bifat:
<form action="" method="GET">
<input type="checkbox" name="flag">
<input type="submit">
</form>
Să presupunem că codul de procesare al formularului nostru arată astfel:
<?php
if (!empty($_GET)) { // dacă formularul a fost trimis
if (isset($_GET['flag'])) { // dacă caseta este bifată
echo 'bifat';
} else {
echo 'nebifat';
}
}
?>
Ne așteaptă o problemă - dacă caseta nu este bifată,
atunci, deoarece în formular nu există alte elemente
în afară de caseta de bifat, în $_GET va fi un
array gol. Aceasta înseamnă că în codul de procesare
al formularului nu vom intra în primul if, care verifică
trimiterea formularului.
Pentru a rezolva această problemă, se utilizează o tehnică specială: se creează un input hidden cu același nume ca și caseta noastră de bifat. În acest caz, valoarea input-ului hidden se setează la zero, iar a casetei de bifat - la unu:
<form action="" method="GET">
<input type="hidden" name="flag" value="0">
<input type="checkbox" name="flag" value="1">
<input type="submit">
</form>
În acest caz, se va întâmpla următoarele. Dacă caseta de bifat nu este bifată, atunci pe server va fi trimisă doar valoarea input-ului hidden. Dacă însă caseta de bifat este bifată, atunci pe server vor fi trimise ambele valori cu același nume. Dar, deoarece valoarea casetei de bifat va fi a doua, aceasta va înlocui prima.
Deci, acum caseta noastră de bifat va trimite pe server fie zero, fie unu:
<?php
var_dump($_GET['flag']); // '0' sau '1'
?>
Să utilizăm acest lucru în verificarea noastră:
<?php
if (!empty($_GET)) {
if ($_GET['flag'] === '1') {
echo 'bifat';
} else {
echo 'nebifat';
}
}
?>
Folosind o casetă de bifat, întrebați utilizatorul
dacă are deja 18 ani sau nu. Dacă
are, permiteți-i accesul pe site, iar dacă
nu - nu-i permiteți.