Αποχρώσεις χρήσης πλαισίων ελέγχου σε PHP
Ας υποθέσουμε ότι στη φόρμα μας υπάρχει μόνο ένα πλαίσιο ελέγχου:
<form action="" method="GET">
<input type="checkbox" name="flag">
<input type="submit">
</form>
Ας υποθέσουμε ότι ο κώδικας επεξεργασίας της φόρμας μας μοιάζει με αυτόν:
<?php
if (!empty($_GET)) { // εάν η φόρμα έχει σταλεί
if (isset($_GET['flag'])) { // εάν το πλαίσιο ελέγχου είναι επιλεγμένο
echo 'επιλεγμένο';
} else {
echo 'δεν είναι επιλεγμένο';
}
}
?>
Θα αντιμετωπίσουμε ένα πρόβλημα - εάν το πλαίσιο ελέγχου δεν είναι επιλεγμένο,
τότε, καθώς στη φόρμα εκτός από το πλαίσιο ελέγχου δεν υπάρχουν άλλα
στοιχεία, στο $_GET θα υπάρχει ένας κενός
πίνακας. Αυτό σημαίνει ότι στον κώδικα επεξεργασίας
της φόρμας δεν θα μπούμε στο πρώτο if, που ελέγχει
την αποστολή της φόρμας.
Για την επίλυση του προβλήματος χρησιμοποιείται μια ειδική τεχνική: δημιουργούν ένα κρυφό πεδίο εισόδου με το ίδιο όνομα, όπως αυτό του πλαισίου ελέγχου μας. Σε αυτήν την περίπτωση, η τιμή του κρυφού πεδίου εισόδου ορίζεται στο μηδέν, ενώ του πλαισίου ελέγχου - στη μονάδα:
<form action="" method="GET">
<input type="hidden" name="flag" value="0">
<input type="checkbox" name="flag" value="1">
<input type="submit">
</form>
Σε αυτήν την περίπτωση θα συμβεί το εξής. Εάν το πλαίσιο ελέγχου δεν είναι επιλεγμένο, τότε στον διακομιστή θα σταλεί μόνο η τιμή του κρυφού πεδίου εισόδου. Εάν όμως το πλαίσιο ελέγχου είναι επιλεγμένο, τότε στον διακομιστή θα σταλούν και οι δύο τιμές με το ίδιο όνομα. Αλλά, καθώς η τιμή του πλαισίου ελέγχου θα είναι η δεύτερη, απλά θα αντικαταστήσει την πρώτη.
Επομένως, τώρα το πλαίσιο ελέγχου μας θα στέλνει στον διακομιστή είτε μηδέν, είτε ένα:
<?php
var_dump($_GET['flag']); // '0' ή '1'
?>
Ας το χρησιμοποιήσουμε στον έλεγχο μας:
<?php
if (!empty($_GET)) {
if ($_GET['flag'] === '1') {
echo 'επιλεγμένο';
} else {
echo 'δεν είναι επιλεγμένο';
}
}
?>
Με τη βοήθεια πλαισίου ελέγχου ρωτήστε τον χρήστη
αν είναι ήδη 18 ετών ή όχι. Εάν
ναι, επιτρέψτε του την πρόσβαση στον ιστότοπο, αλλά αν
όχι - μην του επιτρέψετε.