Nuancen der Verwendung von Checkboxen in PHP
Nehmen wir an, in unserem Formular gibt es nur eine Checkbox:
<form action="" method="GET">
<input type="checkbox" name="flag">
<input type="submit">
</form>
Nehmen wir an, der Code zur Verarbeitung unseres Formulars sieht so aus:
<?php
if (!empty($_GET)) { // wenn das Formular abgeschickt wurde
if (isset($_GET['flag'])) { // wenn die Checkbox angekreuzt ist
echo 'angekreuzt';
} else {
echo 'nicht angekreuzt';
}
}
?>
Wir stoßen auf ein Problem - wenn die Checkbox nicht angekreuzt ist,
liegt in $_GET ein leeres Array, da es außer der Checkbox keine anderen
Elemente im Formular gibt. Das bedeutet, dass wir im Verarbeitungscode
nicht in die erste if-Bedingung gelangen, die das Abschicken
des Formulars überprüft.
Um dieses Problem zu lösen, wird ein spezieller Trick verwendet: Man erstellt ein verstecktes Input-Feld mit demselben Namen wie unsere Checkbox. Dabei setzt man den Wert des versteckten Input-Felds auf Null und den der Checkbox auf Eins:
<form action="" method="GET">
<input type="hidden" name="flag" value="0">
<input type="checkbox" name="flag" value="1">
<input type="submit">
</form>
In diesem Fall ergibt sich Folgendes. Wenn die Checkbox nicht angekreuzt ist, wird nur der Wert des versteckten Input-Felds an den Server gesendet. Wenn die Checkbox jedoch angekreuzt ist, werden beide Werte mit demselben Namen an den Server gesendet. Da aber der Wert der Checkbox der zweite sein wird, überschreibt er einfach den ersten.
Zusammenfassend wird unsere Checkbox nun entweder Null oder Eins an den Server senden:
<?php
var_dump($_GET['flag']); // '0' oder '1'
?>
Nutzen wir dies in unserer Überprüfung:
<?php
if (!empty($_GET)) {
if ($_GET['flag'] === '1') {
echo 'angekreuzt';
} else {
echo 'nicht angekreuzt';
}
}
?>
Fragen Sie den Benutzer mit einer Checkbox,
ob er bereits 18 Jahre alt ist oder nicht. Wenn
ja, erlauben Sie ihm den Zugriff auf die Website, andernfalls nicht.