پی ایچ پی میں ایچ ٹی ایم ایل فارم کی پڑتال کریں

ویب سائیٹس یا ویب ایپلی کیشنز میں صارفین سے معلومات حاصل کرنا معمول کی بات ہے۔ مثلاً‌:

  • اکاؤنٹ بناتے وقت صارف کا نام، ای میل اور فون نمبر وغیرہ معلوم کیے جاتے ہیں،
  • خریداری کے وقت کریڈٹ کارڈ نمبر اور ترسیل کا ایڈریس وغیرہ معلوم کیے جاتے ہیں،
  • ہوائی جہاز کی ٹکٹ خریدتے وقت سفری معلومات حاصل کی جاتی ہیں،
  • اور فیڈبیک فارم کے ذریعے کسی معاملے میں صارفین کی رائے معلوم کی جاتی ہے، وغیرہ وغیرہ۔


یہ معلومات ویب پیج میں موجود HTML فارم کے ذریعے حاصل کی جاتی ہیں۔ ویب پیج کے form ایلیمنٹ میں یہ بتایا جاتا ہے کہ یہ معلومات کس ویب پیج کو بھیجی جائیں۔ ویب سرور پر موجود جس ویب پیج کو یہ معلومات بھیجی جاتی ہیں، اب یہ اس پر منحصر ہے کہ وہ ان معلومات کو کیسے استعمال کرتا ہے۔ معلومات وصول کرنے والے ویب پیج پر جو بھی ٹیکنالوجی (JSP, ASP, PHP وغیرہ) استعمال کی گئی ہے، اس کی مدد سے یہ معلومات عام طور پر ڈیٹابیس میں محفوظ کی جاتی ہیں، لیکن فیڈبیک فارم کی صورت میں یہ معلومات ای میل ایڈریس پر بھی بھیجی جا سکتی ہیں۔

کوئی ڈیویلپر یہ نہیں چاہتا کہ صارف غلط معلومات مہیا کرے۔ غلط ان معنوں میں کہ نام کی جگہ فون نمبر مہیا کر دیا جائے، ای میل کی جگہ پوسٹل کوڈ لکھ دیا جائے، اور جو معلومات درکار ہیں وہ فراہم کیے بغیر ہی فارم بھیج دیا جائے۔ اگر ایسی معلومات کی پڑتال (Validation) نہ کی جائے تو آپ سمجھ سکتے ہیں کہ ڈیٹابیس میں کس قسم کا ڈیٹا محفوظ ہوگا اور یہ ڈیٹابیس آپ کے لیے کتنی مفید ثابت ہوسکے گی۔ معلومات کی پڑتال کے لیے نئے ڈیویلپرز Javascript بھی استعمال کرتے ہیں جو کہ کسی طرح سے بھی محفوظ طریقہ نہیں ہے۔ اس لیے کہ Javascript کوڈ ویب پیج کے اندر موجود ہوتا ہے جو کہ صارف کے کمپیوٹر پر ویب براؤزر میں چلتا ہے۔ آج کل ایسے ٹولز (Firebug وغیرہ) باآسانی دستیاب ہیں جنہیں استعمال کرتے ہوئے ویب پیج کا کوڈ تبدیل کیا جا سکتا ہے۔ یعنی مطلوبہ ویب پیج سے Javascript کوڈ ختم کر کے HTML فارم میں اپنی مرضی کی معلومات بھر کر بھیجی جا سکتی ہیں۔ اس کے برعکس ویب سرور جس پر ویب ایپلی کیشن چل رہی ہے، اس کا کنٹرول ڈیویلپرز کے پاس ہوتا ہے، اس لیے معلومات کی پڑتال ویب سرور پر ہونا ضروری ہے۔ چنانچہ اس ٹٹوریل میں ہم PHP کی مدد سے HTML فارم کی پڑتال کا طریقہ دیکھیں گے۔

ٹٹوریل کے آخر میں مکمل کوڈ ZIP فائل کی شکل میں موجود ہے۔

PHP کوڈ اور اس کی وضاحت

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

  1. PHP کوڈ میں سب سے پہلے js$ ویری ایبل بنا کر اس میں Javascript کوڈ رکھا گیا ہے ۔ جب یہ ویب پیج پہلی دفعہ براؤزر میں لوڈ ہوگا تو یہ ویری ایبل فارم کی پہلی فیلڈ name کا فوکس سیٹ کردے گا۔
  2. if بلاک پر مشتمل یہ کوڈ تب چلے گا جب صارف Submit بٹن پر کلک کر کے فارم ویب سرور پر بھیجے گا۔
  3. یہاں سب سے پہلے error$ ویری ایبل بنایا گیا ہے جس کی ویلیو 0 رکھی گئی ہے۔ اگلے مرحلے میں صارف کی طرف سے مہیا کی گئی فارم کی ویلیوز کی پڑتال کی جائے گی۔ اگر صارف نے کوئی ویلیو غلط فراہم کی ہوگی تو اس error$ ویری ایبل کی ویلیو 1 ہو جائے گی۔ اس کا مطلب یہ ہوگا کہ یہ فارم ای میل پر نہ بھیجا جائے بلکہ صارف کو بتایا جائے کہ فلاں ویلیو غلط ہے، اس لیے وہ صحیح ویلیو کے ساتھ فارم دوبارہ بھیجے۔
  4. اس مرحلے میں آپ دیکھ رہے ہیں کہ فارم کی ویلیوز کی پڑتال الٹی ترتیب کے ساتھ کی جا رہی ہے۔ یعنی سب سے پہلے message کی پڑتال کی جا رہی ہے۔ ایسا اس لیے کیا گیا ہے تاکہ اگر صارف ایک سے زیادہ فیلڈز کی غلط ویلیوز فراہم کرے تو Javascript کوڈ بعد والی فیلڈ کی بجائے پہلے والی فیلڈ کا فوکس سیٹ کرے۔ ()trim فنکشن ویلیو کے شروع اور آخر میں موجود خالی جگہ (White space) ختم کر دیتا ہے۔ اس کے بعد ()strlen فنکشن کی مدد سے یہ تسلی کی گئی ہے کہ message میں کم از کم 15 حروف ضرور موجود ہوں۔ اگر اس سے کم حروف ہوں گے تو اس کے نتیجے میں تین کام ہوں گے:
    • labelMessage$ ویری ایبل میں صارف کے لیے یہ پیغام رکھا جائے گا کہ بھئی مطلوبہ ویلیو فراہم کی جائے۔ یہ ویری ایبل message فیلڈ کے ساتھ پرنٹ ہو جائے گا۔
    • js$ ویری ایبل میں message فیلڈ کا فوکس سیٹ کرنے کے لیے Javascript کوڈ رکھ دیا جائے گا۔ یہ ویری ایبل ویب پیج کے آخر میں پرنٹ ہوگا۔
    • error$ ویری ایبل کی ویلیو 1 ہو جائے گی، یوں یہ فارم ای میل پر نہیں بھیجا جائے گا بلکہ صارف کو مطلوبہ ویلیو کے ساتھ فارم دوبارہ بھیجنے کا موقع دیا جائے گا۔

    فارم کی email ویلیو کی پڑتال کے لیے ()filter_var فنکشن استعمال کیا گیا ہے۔ لیکن یہ فنکشن myname@mydomain کو درست ای میل سمجھتا ہے، حالانکہ اس میں ڈومین کی قسم com یا org وغیرہ موجود نہیں ہے۔ چنانچہ یہ چیک کرنے کے لیے PHP کا ریگولر ایکسپریشن فنکشن ()preg_match استعمال کیا گیا ہے۔

  5. اگر صارف نے فارم کی تمام ویلیوز صحیح فراہم کی ہیں تو یہ کوڈ ان معلومات کو مہیا کیے گئے ایڈریس پر ای میل کر دے گا۔ یہ معلومات ڈیٹابیس میں بھی محفوظ کی جا سکتی ہیں، اس کے لیے یہ ٹٹوریل دیکھیں۔
  6. ای میل بھیجنے کے بعد ()header فنکشن کی مدد سے confirmation.php کی طرف ری ڈائریکٹ کر دیا گیا ہے۔
    ہم یہ بھی کر سکتے ہیں کہ ()unset فنکشن کی مدد سے فارم کے تمام ویری ایبلز ختم کر دیں اور پھر یہی صفحہ کھلنے دیں۔ لیکن ایسی صورت میں اگر صارف یہ ویب پیج Refresh کرے گا تو فارم ایک بار پھر ای میل پر بھیج دیا جائے گا۔ چنانچہ بہتر طریقہ یہ ہے کہ ویب فارم کا مقصد پورا ہو جانے کے بعد اسے کسی دوسرے صفحہ پر ری ڈائریکٹ کر دیا جائے۔

<?php
// 1. Javascript code to set focus on form's first element
$js "document.getElementById('name').focus();";

// 2. If user clicked on 'Submit' button
if ($_SERVER['REQUEST_METHOD'] == 'POST') {

    
// 3. Initialize error variable
    
$error 0;

    
// 4. Validate form values
    
$message trim($_POST["message"]);
    if (
strlen($message) < 15) {
        
$labelMessage "<div style='color:red;'>Provide a message of at least 15 characters.</div>";
        
$js "document.getElementById('message').focus();";
        
$error 1;
    }

    
$subject trim($_POST["subject"]);
    if (
strlen($subject) < 10) {
        
$labelSubject "<div style='color:red;'>Provide a subject of at least 10 characters.</div>";
        
$js "document.getElementById('subject').focus();";
        
$error 1;
    }
    
    
$email trim($_POST["email"]);
    if (!
filter_var($emailFILTER_VALIDATE_EMAIL) || !preg_match('/@.+\./'$email)) {
        
$labelEmail "<div style='color:red;'>Provide a valid email address.</div>";
        
$js "document.getElementById('email').focus();";
        
$error 1;
    }

    
$name trim($_POST["name"]);
    if (
strlen($name) < || is_numeric($name)) {
        
$labelName "<div style='color:red;'>Provide a name of at least 2 characters.</div>";
        
$js "document.getElementById('name').focus();";
        
$error 1;
    }

    
// 5. If no error found, send this information to an email address, or add it to a database
    
if ($error == 0) {
        
        
$senderName $name;
        
$senderEmail $email;
        
$recipientEmail "feedback@mywebsite.com";
        
$subject "mywebsite.com: " $subject;
        
$message "A feedback from mywebsite.com<br><br>" $message;

        
$header  'MIME-Version: 1.0' "\r\n";
        
$header .= 'Content-type: text/html; charset=utf-8' "\r\n";
        
$header .= "From: "$senderName " <" $senderEmail ">\r\n"

        
mail($recipientEmail$subject$message$header);
    
        
// 6. Redirect to a confirmation page
        
header("Location: confirmation.php?status=1");
    }
}
?>

HTML کوڈ اور اس کی وضاحت

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

  1. ویب پیج کے body ایلیمنٹ میں سب سے پہلے فارم ایلیمنٹ ہے۔ form ایلیمنٹ کے action ایٹری بیوٹ کے ذریعے یہ بتایا گیا ہے کہ جب فارم ویب سرور پر بھیجا جائے تو یہی ویب پیج یعنی feedback.php اس فارم کی معلومات حاصل کر کے استعمال کرے۔ اسی طرح method ایٹری بیوٹ کے ذریعے اس فارم کو ویب سرور پر بھیجنے کا طریقہ post مقرر کیا گیا ہے۔ post طریقہ استعمال کرتے ہوئے ویب فارم بھیجا جائے تو فارم کی ویلیوز چھپی ہوئی رہتی ہیں۔ جبکہ اس کے برعکس اگر get کا طریقہ استعمال کرتے ہوئے فارم بھیجا جائے تو فارم کی ویلیوز ویب ایڈریس (URL) کے ساتھ منسلک کر کے بھیجی جاتی ہیں۔
  2. نام، ای میل، موضوع اور پیغام حاصل کرنے کے لیے فارم کی فیلڈز مہیا کی گئی ہیں۔ آپ دیکھ رہے ہیں کہ ہر فیلڈ کے ساتھ PHP کا لیبل ویری ایبل بھی موجود ہے۔ یہ ویری ایبل اوپر PHP کوڈ میں تب بنایا جائے گا جب صارف یہ ویلیو فراہم نہیں کرے گا یا پھر غلط ویلیو فراہم کرے گا۔ PHP کے ()isset فنکشن کی مدد سے یہ بتایا گیا ہے کہ اگر یہ ویری ایبل اوپر بنایا گیا ہے تو اسے پرنٹ کر دو۔ آپ فارم کی ہر فیلڈ میں name اور id دونوں ایٹری بیوٹس دیکھ رہے ہیں۔ name ایٹری بیوٹ کی مدد سے ویب سرور پر PHP کوڈ میں اس فیلڈ کی ویلیو حاصل کی جائے گی۔ جبکہ id ایٹری بیوٹ کی مدد سے Javascript کوڈ کے ذریعے اس فیلڈ کا فوکس سیٹ کیا جائے گا۔
  3. فارم بٹن مہیا کیا گیا ہے جس پر کلک کرنے سے یہ فارم ویب سرور پر feedback.php کو بھیج دیا جائے گا۔
  4. آخر میں آپ PHP کوڈ دیکھ رہے ہیں جس کی مدد سے js$ ویری ایبل پرنٹ کیا گیا ہے۔ یہ PHP ویری ایبل ہے لیکن اس میں Javascript کوڈ رکھا جائے گا جس کی مدد سے فارم کی اس فیلڈ کا فوکس سیٹ کیا جائے گا جس کی ویلیو صارف نے مہیا نہیں کی، یا غلط ویلیو مہیا کی ہے۔ اور Javascript کوڈ ویب پیج کے آخر میں اس لیے درج کیا گیا ہے تاکہ پہلے براؤزر میں فارم لوڈ ہو جائے، اس کے بعد Javascript کوڈ فارم کی فیلڈ کا فوکس سیٹ کرے۔ اس لیے کہ اگر Javascript کوڈ فارم سے اوپر موجود ہوگا تو یہ براؤزر میں پہلے لوڈ ہو کر چل جائے گا، جبکہ فارم کی فیلڈز اس وقت ویب براؤزر میں موجود نہیں ہوں گی۔ نتیجہ یہ ہوگا کہ Javascript کوڈ کو فارم کی یہ فیلڈز نہیں ملیں گی اور یہ کوڈ ناکام ہو جائے گا۔
  5. یہاں ویب فارم کو مختصر رکھنے کی کوشش کی گئی ہے۔ لیکن عام طور پر فارم کی لازمی فیلڈز کے ساتھ سرخ * نشان دکھایا جاتا ہے، تاکہ صارف کو پہلے سے معلوم ہو کہ اس فارم کے قابل قبول ہونے کے لیے کونسی ویلیوز ضروری ہیں۔

فیڈبیک فارم کا ایچ ٹی ایم ایل کوڈ

کنفرمیشن پیج کا کوڈ

درج ذیل کوڈ میں یہ بتایا گیا ہے کہ اگر URL کے ساتھ status=1 کا پیرامیٹر بھیجا گیا ہے تو کنفرمیشن میسج دکھا دو۔ اگر نہیں بھیجا گیا تو feedback.php کی طرف ری ڈائریکٹ کر دو۔

کنفرمیشن پیج کا ایچ ٹی ایم ایل کوڈ