Các sắc thái khi sử dụng checkbox trong PHP
Giả sử trong biểu mẫu của chúng ta chỉ có một checkbox:
<form action="" method="GET">
<input type="checkbox" name="flag">
<input type="submit">
</form>
Giả sử mã xử lý biểu mẫu của chúng ta trông như thế này:
<?php
if (!empty($_GET)) { // nếu biểu mẫu đã được gửi
if (isset($_GET['flag'])) { // nếu checkbox được đánh dấu
echo 'đã đánh dấu';
} else {
echo 'không được đánh dấu';
}
}
?>
Chúng ta sẽ gặp phải vấn đề - nếu checkbox không được đánh dấu,
thì, vì trong biểu mẫu không có phần tử nào khác ngoài checkbox,
mảng $_GET sẽ rỗng. Điều này có nghĩa là trong mã xử lý
biểu mẫu, chúng ta sẽ không rơi vào điều kiện if đầu tiên, kiểm tra
việc biểu mẫu đã được gửi hay chưa.
Để giải quyết vấn đề này, người ta sử dụng một thủ thuật đặc biệt: tạo một trường input ẩn có cùng tên với checkbox của chúng ta. Trong đó, giá trị của input ẩn được đặt là số không, còn giá trị của checkbox là số một:
<form action="" method="GET">
<input type="hidden" name="flag" value="0">
<input type="checkbox" name="flag" value="1">
<input type="submit">
</form>
Trong trường hợp này, kết quả sẽ như sau. Nếu checkbox không được đánh dấu, chỉ có giá trị của input ẩn được gửi lên máy chủ. Nếu checkbox được đánh dấu, cả hai giá trị có cùng một tên sẽ được gửi lên máy chủ. Nhưng, vì giá trị của checkbox sẽ là thứ hai, nó sẽ ghi đè lên giá trị đầu tiên.
Vậy, bây giờ checkbox của chúng ta sẽ gửi lên máy chủ giá trị là không hoặc một:
<?php
var_dump($_GET['flag']); // '0' hoặc '1'
?>
Hãy sử dụng điều này trong phép kiểm tra của chúng ta:
<?php
if (!empty($_GET)) {
if ($_GET['flag'] === '1') {
echo 'đã đánh dấu';
} else {
echo 'không được đánh dấu';
}
}
?>
Sử dụng checkbox để hỏi người dùng
xem họ đã đủ 18 tuổi hay chưa. Nếu
đủ, cho phép họ truy cập trang web, còn nếu
chưa - thì không cho phép.