پی ایچ پی میں چیک باکس کی ویلیو حاصل کریں

ویب فارم میں چیک باکسز اس لیے شامل کیے جاتے ہیں تاکہ مختلف چیزوں کے بارے میں صارف کی دل چسپی معلوم کی جا سکے۔ چیک باکس کی مدد سے کسی معاملے میں صارف سے ہاں یا ناں میں جواب معلوم کیا جاتا ہے۔ اگر صارف نے چیک باکس منتخب کیا ہے تو اس کا مطلب ہاں ہے، اگر نہیں کیا تو اس کا مطلب ناں ہے۔ اس ٹٹوریل میں یہ بتایا گیا ہے کہ صارف جب HTML فارم سرور پر بھیجتا ہے تو سرور پر موجود PHP کوڈ میں اس فارم کے چیک باکسز کی ویلیوز کیسے حاصل کی جا سکتی ہیں۔ آئیں اس کے دو طریقے دیکھتے ہیں:


انفرادی چیک باکسز کی ویلیوز حاصل کریں

انفرادی چیک باکس کا مطلب یہ ہے کہ آپ ہر چیک باکس کا ایک الگ نام رکھیں اور پھر ویب سرور پر PHP کوڈ میں یہ نام استعمال کرتے ہوئے چیک باکس کی ویلیو حاصل کریں۔ درج ذیل کوڈ میں کامنٹس کی لائنوں میں نمبر دیے گئے ہیں، ان نمبروں کے لحاظ سے کوڈ کی وضاحت دیکھیں:

  1. سب سے اوپر PHP کوڈ ہے جس کی پہلی لائن پر یہ چیک کیا گیا ہے کہ کیا صارف نے Submit بٹن پر کلک کر کے فارم سرور کی طرف بھیجا ہے۔ اگر بھیجا ہے تو پھر If-statement کے اندر لکھے ہوئے کوڈ پر عمل کیا جائے گا۔
  2. اگر صارف نے فارم پوسٹ کیا ہے تو پھر مزید If-statements کی مدد سے یہ دیکھا گیا ہے کہ صارف نے کونسے چیک باکسز منتخب کیے ہیں۔ جو چیک باکسز صارف نے منتخب کیے ہیں ان کی ویلیوز پرنٹ کی گئی ہیں۔ اصل ایپلی کیشن میں یا تو آپ ان چیک باکسز کی ویلیوز ڈیٹابیس میں محفوظ کریں گے یا پھر بذریعہ ای میل یہ فارم وصول کریں گے۔
  3. جب فارم حاصل کر لیا جائے گا تو پھر آپ چاہیں گے کہ فارم کے چیک باکسز منتخب نہ رہیں۔ اس کے لیے ()unset فنکشن استعمال کیا جا سکتا ہے۔
  4. یہاں سے HTML فارم کا آغاز ہوتا ہے۔ فارم میں دیکھا جا سکتا ہے کہ ہر چیک باکس کے name ایٹری بیوٹ کی ویلیو مختلف ہے۔ اور ہر چیک باکس کے value ایٹری بیوٹ کی ویلیو 1 سیٹ کی گئی ہے۔ اگر آپ ویلیو سیٹ نہیں کریں گے تو پھر سرور پر PHP کوڈ کو یہ ویلیو 1 کی بجائے on ملے گی۔ ڈیٹابیس میں محفوظ کرنے کے لیے on کی بجائے 1 ویلیو بہتر ہے۔ یعنی ڈیٹابیس میں 1 کا مطلب آن اور 0 کا مطلب آف ہوگا۔

    اس کے علاوہ آپ دیکھ سکتے ہیں کہ ہر چیک باکس فیلڈ میں PHP کوڈ کی مدد سے یہ بتایا گیا ہے کہ اگر صارف نے فارم سرور پر بھیجنے سے پہلے یہ چیک باکس منتخب کیا تھا تو اب دوبارہ اسے منتخب کر دو۔ ایسا اس صورت میں ہوگا جب صارف نے ویب سرور کی طرف نا مکمل یا غلط ویلیوز کے ساتھ فارم بھیجا ہوگا۔ اس مقصد کے لیے یہ کوڈ چیک باکس فیلڈ میں checked ویلیو شامل کر دیتا ہے۔

<?php
// (1)
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    
// (2)
    
if (isset($_POST["fruits"])) {
        print 
"Fruits checkbox = " $_POST["fruits"] . "<br>";
    }
    if (isset(
$_POST["grains"])) {
        print 
"Grains checkbox = " $_POST["grains"] . "<br>";
    }
    if (isset(
$_POST["vegetables"])) {
        print 
"Vegetables checkbox = " $_POST["vegetables"] . "<br>";
    }
    if (isset(
$_POST["meats"])) {
        print 
"Meats checkbox = " $_POST["meats"] . "<br>";
    }
    if (isset(
$_POST["dairy"])) {
        print 
"Dairy checkbox = " $_POST["dairy"] . "<br>";
    }
    
    
// (3)
    /* In case we want to deselect checkboxes
    unset($_POST["fruits"]);
    unset($_POST["grains"]);
    unset($_POST["vegetables"]);
    unset($_POST["meats"]);
    unset($_POST["dairy"]);
    */
}
?>

<!-- (4) -->
<br>
<form method="post" action="single-checkboxes.php">
    <input type="checkbox" name="fruits" value="1" 
        <?php if (isset($_POST["fruits"])) print 'checked="checked"'; ?>> Fruits<br>
    <input type="checkbox" name="grains" value="1" 
        <?php if (isset($_POST["grains"])) print 'checked="checked"'; ?>> Grains<br>
    <input type="checkbox" name="vegetables" value="1" 
        <?php if (isset($_POST["vegetables"])) print 'checked="checked"'; ?>> Vegetables<br>
    <input type="checkbox" name="meats" value="1" 
        <?php if (isset($_POST["meats"])) print 'checked="checked"'; ?>> Meats<br>
    <input type="checkbox" name="dairy" value="1" 
        <?php if (isset($_POST["dairy"])) print 'checked="checked"'; ?>> Dairy<br>
    <br>
    <input type="submit" value="Submit">
</form>


چیک باکسز کی ویلیوز Array کی شکل میں حاصل کریں

چیک باکس کی ویلیوز Array کی شکل میں حاصل کرنے کا ایک فائدہ یہ ہے کہ بہت سے چیک باکسز کو مختصر کوڈ لکھتے ہوئے لوپ کی مدد سے ہینڈل کیا جا سکتا ہے۔ دوسرا فائدہ یہ ہے کہ کوڈ کو بہتر طور پر سمجھنے کی غرض سے ہر گروپ کے چیک باکسز کو الگ الگ Arrays میں رکھا جا سکتا ہے۔

درج ذیل کوڈ میں کامنٹس کی لائنوں میں نمبر دیے گئے ہیں، ان نمبروں کے لحاظ سے کوڈ کی وضاحت دیکھیں:

  1. سب سے اوپر PHP کوڈ ہے، جس کی پہلی لائن پر یہ چیک کیا گیا ہے کہ کیا صارف نے Submit بٹن پر کلک کر کے فارم سرور کی طرف بھیجا ہے۔ اگر بھیجا ہے تو پھر If-statement کے اندر لکھے ہوئے کوڈ پر عمل کیا جائے گا۔
  2. اگر صارف نے فارم پوسٹ کیا ہے تو پھر []food$ کے نام سے ایک Array ڈیفائن کیا گیا ہے اور اس میں چیک باکسز کے نام اور ان کی ویلیوز محفوظ کی گئی ہیں۔
  3. صارف جب فارم بھر کر سرور کی جانب بھیجتا ہے تو صرف انہی چیک باکسز کی ویلیوز سرور کی طرف بھیجی جاتی ہیں جو منتخب کیے گئے ہوتے ہیں۔ جو چیک باکسز منتخب نہیں کیے گئے ہوتے ان کی ویلیوز سرور کی طرف نہیں بھیجی جاتیں۔ چنانچہ ()count فنکشن کی مدد سے معلوم کیا گیا ہے کہ food$ اررے میں کتنی ویلیوز ہیں، اگر دو سے کم ہیں تو پھر صارف کو بتایا گیا ہے کہ کم از کم دو چیک باکسز ضرور منتخب کرے۔
  4. پھر foreach لوپ کی مدد سے []food$ اررے میں موجود تمام ویلیووز پرنٹ کی گئی ہیں۔ key$ میں چیک باکس کے name ایٹری بیوٹ کی ویلیو ہے، جبکہ value$ میں چیک باکس کے value ایٹری بیوٹ کی ویلیو ہے۔
  5. اس کے بعد آپ کوڈ کی تین لائنیں دیکھ رہے ہیں جنہیں فی الحال کامنٹس میں تبدیل کیا گیا ہے۔ پہلی لائن یہ بتا رہی ہے کہ []food$ اررے میں موجود چیک باکسز کو انفرادی طور پر کیسے حاصل کیا جا سکتا ہے۔ دوسری لائن میں ()print_r فنکشن ہے جس کی مدد سے مکمل اررے پرنٹ کیا جا سکتا ہے۔ تیسری لائن میں دکھایا گیا ہے کہ ()unset فنکشن کی مدد سے مکمل اررے ختم کیا جا سکتا ہے، یعنی جب آپ فارم حاصل کر لیں گے تو پھر HTML فارم میں چیک باکسز کو غیر منتخب ہو جانا چاہیے۔
  6. یہاں HTML فارم شروع ہو رہا ہے۔ آپ دیکھ رہے ہیں کہ فارم میں موجود ہر چیک باکس کے name ایٹری بیوٹ کی ویلیوز [food[fruits کی شکل میں مقرر کی گئی ہیں۔ اس کا فائدہ یہ ہے کہ سرور پر PHP کوڈ میں انہیں بطور اررے استعمال کیا جا سکتا ہے۔

<?php
// (1) 
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    
// (2) 
    
$food = array();
    if (isset(
$_POST["food"])) {
        
$food $_POST["food"];
    }
    
// (3) 
    
if (count($food) < 2) {
        print 
"<div style='color:red;'>Please select at least 2 checkboxes</div><br>";
    }
    
// (4) 
    
foreach ($food as $key => $value) {
        print 
$key " = " $value "<br>";
    }
    
// (5) 
    // print $_POST["food"]["fruits"]; // access individual items in $food array by name
    // print_r($food); // print entire $food array
    // unset($_POST["food"]); // deselect all checkboxes
}
?>

<!-- (6) -->
<br>
<form method="post" action="array-checkboxes.php">
    <input type="checkbox" name="food[fruits]" value="1" 
        <?php if (isset($_POST["food"]["fruits"])) print 'checked="checked"'; ?> > Fruits<br>
    <input type="checkbox" name="food[grains]" value="1" 
        <?php if (isset($_POST["food"]["grains"])) print 'checked="checked"'; ?> > Grains<br>
    <input type="checkbox" name="food[vegetables]" value="1" 
        <?php if (isset($_POST["food"]["vegetables"])) print 'checked="checked"'; ?> > Vegetables<br>
    <input type="checkbox" name="food[meats]" value="1" 
        <?php if (isset($_POST["food"]["meats"])) print 'checked="checked"'; ?> > Meats<br>
    <input type="checkbox" name="food[dairy]" value="1" 
        <?php if (isset($_POST["food"]["dairy"])) print 'checked="checked"'; ?> > Dairy<br>
    <br>
    <input type="submit" value="Submit">
</form>