รายละเอียดการใช้ช่องทำเครื่องหมายใน PHP

สมมติว่าในฟอร์มของเรามีเพียงช่องทำเครื่องหมาย:

html<form action="" method="GET">
  <input type="checkbox" name="flag">
  <input type="submit">
</form>

สมมติว่ารหัสการประมวลผลฟอร์มของเราดูเหมือนว่านี้:

html<?php
  if (!empty($_GET)) { // หากส่งฟอร์มแล้ว
    if (isset($_GET['flag'])) { // หากช่องทำเครื่องหมายถูกเลือก
      echo 'ถูกเลือก';
    } else {
      echo 'ไม่ถูกเลือก';
    }
  }
?>

เรากำลังจะเจอปัญหา - หากช่องทำเครื่องหมายไม่ถูกเลือก เนื่องจากในฟอร์มไม่มีองค์ประกอบอื่นนอกจากช่องทำเครื่องหมาย ใน $_GET จะมีอาเรย์ว่าง ซึ่งหมายความว่าในโค้ดการประมวลผลฟอร์ม เราจะไม่เข้าสู่เงื่อนไข if แรก ที่ตรวจสอบ การส่งฟอร์ม

สำหรับการแก้ปัญหา ใช้เทคนิคพิเศษ: สร้างอินพุตแบบซ่อนด้วยชื่อเดียวกัน กับช่องทำเครื่องหมายของเรา ในกรณีนี้ค่า ของอินพุตแบบซ่อนถูกตั้งเป็นศูนย์ และช่องทำเครื่องหมาย - เป็นหนึ่ง:

html<form action="" method="GET">
  <input type="hidden" name="flag" value="0">
  <input type="checkbox" name="flag" value="1">
  <input type="submit">
</form>

ในกรณีนี้จะได้ผลดังต่อไปนี้ หาก ช่องทำเครื่องหมายไม่ถูกเลือก เซิร์ฟเวอร์จะได้รับ เฉพาะค่าจากอินพุตแบบซ่อนเท่านั้น แต่หาก ช่องทำเครื่องหมายถูกเลือก เซิร์ฟเวอร์จะได้รับ ค่าทั้งสองที่มีชื่อเดียวกัน แต่เนื่องจาก ค่าของช่องทำเครื่องหมายจะเป็นลำดับที่สอง มันจะ เขียนทับค่าลำดับแรก

ดังนั้น ตอนนี้ช่องทำเครื่องหมายของเราจะส่ง ไปยังเซิร์ฟเวอร์เป็นศูนย์หรือหนึ่ง:

html<?php
  var_dump($_GET['flag']); // '0' หรือ '1'
?>

มาใช้สิ่งนี้ในการตรวจสอบของเรา:

html<?php
  if (!empty($_GET)) {
    if ($_GET['flag'] === '1') {
      echo 'ถูกเลือก';
    } else {
      echo 'ไม่ถูกเลือก';
    }
  }
?>
Задание 1

ใช้ช่องทำเครื่องหมายถามผู้ใช้ ว่าอายุถึง 18 ปีแล้วหรือไม่ หาก ถึงแล้ว อนุญาตให้เขาเข้าถึงเว็บไซต์ได้ แต่หาก ไม่ถึง - ไม่อนุญาต