Niuanse wykorzystania checkboxów w PHP
Załóżmy, że w naszym formularzu znajduje się tylko checkbox:
<form action="" method="GET">
<input type="checkbox" name="flag">
<input type="submit">
</form>
Załóżmy, że kod przetwarzający nasz formularz wygląda tak:
<?php
if (!empty($_GET)) { // jeśli formularz został wysłany
if (isset($_GET['flag'])) { // jeśli checkbox jest zaznaczony
echo 'zaznaczony';
} else {
echo 'nie zaznaczony';
}
}
?>
Czeka nas problem - jeśli checkbox nie jest zaznaczony,
to, ponieważ w formularzu poza checkboxem nie ma innych
elementów, w $_GET będzie znajdować się pusta
tablica. Oznacza to, że w kodzie przetwarzającym
formularz nie wejdziemy do pierwszego if, sprawdzającego
wysłanie formularza.
Aby rozwiązać problem, stosuje się specjalną sztuczkę: tworzy się ukryty input z taką samą nazwą, jak naszego checkboxa. Jednocześnie wartością ukrytego inputa ustawia się zero, a checkboxa - jeden:
<form action="" method="GET">
<input type="hidden" name="flag" value="0">
<input type="checkbox" name="flag" value="1">
<input type="submit">
</form>
W takim przypadku otrzymamy następujący efekt. Jeśli checkbox nie jest zaznaczony, to na serwer zostanie wysłana tylko wartość ukrytego inputa. Jeśli zaś checkbox jest zaznaczony, to na serwer zostaną wysłane obie wartości z jedną nazwą. Ale, ponieważ wartość checkboxa będzie druga, to po prostu nadpisze ona pierwszą.
Podsumowując, teraz nasz checkbox będzie wysyłał na serwer albo zero, albo jeden:
<?php
var_dump($_GET['flag']); // '0' lub '1'
?>
Wykorzystajmy to w naszym sprawdzeniu:
<?php
if (!empty($_GET)) {
if ($_GET['flag'] === '1') {
echo 'zaznaczony';
} else {
echo 'nie zaznaczony';
}
}
?>
Za pomocą checkboxa zapytaj użytkownika,
czy ma już 18 lat, czy nie.
Jeśli tak, zezwól mu na dostęp do strony, a jeśli
nie - nie zezwalaj.