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 वर्ष है या नहीं। यदि हां, तो उसे साइट पर एक्सेस की अनुमति दें, और यदि नहीं - तो अनुमति न दें।