پی ایچ پی کی مدد سے مائی ایس کیو ایل ڈیٹابیس کے بنیادی امور سر انجام دیں

ویب ایپلی کیشنز کی تیاری کے لیے غالباً‌ PHP سب سے مقبول پروگرامنگ لینگوئج ہے، اور اس کے ساتھ سب سے زیادہ استعمال ہونے والی ڈیٹابیس MySQL ہے۔ ان دونوں کا استعمال آپ کو چھوٹے سائز کی کاروباری ایپلی کیشنز سے لے کر بڑے سائز کی سوشل میڈیا ایپلی کیشنز میں نظر آئے گا۔ اس ٹٹوریل میں PHP کی مدد سے MySQL ڈیٹابیس کے بنیادی کام سر انجام دینے کا طریقہ دکھایا گیا ہے۔ مثلاً‌ ڈیٹابیس ٹیبل میں ریکارڈ داخل کرنا، ڈیٹابیس ٹیبل سے ریکارڈز حاصل کرنا، ریکارڈ میں تبدیلی کرنا، ریکارڈ ختم کرنا، اور ڈیٹابیس ٹیبل سے ریکارڈز تلاش کرنا وغیرہ۔ اس مقصد کے لیے ایک نمونے کی MySQL ڈیٹابیس بنائی گئی ہے، اور اس ڈیٹابیس پر کام کرنے کے لیے مختصر لیکن عملی نوعیت کی PHP ایپلی کیشن تیار کی گئی ہے۔

کوڈ کو مختصر رکھنے کی غرض سے سرور پر فارم کی پڑتال نہیں کی گئی۔ PHP کی مدد سے سرور پر فارم کی پڑتال کا طریقہ جاننے کے لیے یہ ٹٹوریل دیکھیں۔
ٹٹوریل کے آخر میں مکمل کوڈ ZIP فائل کی شکل میں مہیا کیا گیا ہے۔

  1. ایک بنیادی نوعیت کی MySQL ڈیٹابیس بنائیں
  2. ڈیٹابیس ٹیبل میں نیا ریکارڈ داخل کریں
  3. ڈیٹابیس ٹیبل میں سے ریکارڈز حاصل کریں
  4. کسی ریکارڈ میں تبدیلی کریں
  5. کوئی ریکارڈ ختم کریں
  6. ڈیٹابیس ٹیبل میں سے ریکارڈز تلاش کریں
  7. ڈیٹابیس کنکشن

1- ایک بنیادی نوعیت کی MySQL ڈیٹابیس بنائیں

اگر آپ نے اپنے کمپیوٹر پر WampServerیا XAMPP کی انسٹالیشن کی ہوئی ہے تو پہلے اسے چلائیں، اور پھر phpMyAdmin ایپلی کیشن کھولیں۔

پی ایچ پی مائی ایڈمن ایپلی کیشن کھولیں


درج ذیل اسکرین شاٹس کے مطابق MySQL ڈیٹابیس بنائیں:

  1. پہلے Databases ٹیب پر کلک کر کے ڈیٹابیس والے سیکشن میں آجائیں تاکہ نئی ڈیٹابیس بنائی جا سکے۔
  2. اس اسکرین پر نئی ڈیٹابیس کا نام مہیا کریں، اور اس کے لیے ڈراپ ڈاؤن مینیو میں سے Collation منتخب کریں۔ کولیشن یہ بتاتی ہے کہ اس ڈیٹابیس میں کس قسم کے حروف یعنی کونسی زبانوں کا مواد محفوظ کیا جا سکتا ہے۔ utf8_unicode_ci کولیشن کی مدد سے انگلش، عربی، فارسی اور اردو کے علاوہ دیگر بہت سی زبانوں کا مواد ڈیٹابیس میں محفوظ کیا جا سکتا ہے۔
  3. اسکرین کے بائیں طرف موجود کالم میں سے وہ ڈیٹابیس منتخب کریں جو ابھی ابھی بنائی گئی ہے۔
  4. یہ ڈیٹابیس اس وقت خالی ہے اور اس کے اندر کوئی ٹیبل موجود نہیں ہے۔ اس اسکرین پر نئے ٹیبل کا نام اور اس کی فیلڈز کی تعداد مہیا کریں۔
  5. نئی سامنے آنے والی اسکرین پر ٹیبل کے لیے فیلڈز ڈیفائن کریں۔ آپ دیکھ رہے ہیں کہ پہلی فیلڈ profile_id ہے جس کے لیے INT ڈیٹا ٹائپ منتخب کی گئی ہے، اس فیلڈ کو Primary key کے طور پر ڈیفائن کیا گیا ہے، اور اسے A_I چیک باکس کی مدد سے Auto increment بنایا گیا ہے۔ یعنی یہ فیلڈ اس ٹیبل کے ہر ریکارڈ کو ایک منفرد نمبر مہیا کرے گی۔
    جبکہ name اور email فیلڈز کے لیے VARCHAR ڈیٹا ٹائپ مقرر کی گئی ہے اور ان میں زیادہ سے زیادہ ڈیٹا محفوظ کرنے کی حد 100 بائٹس رکھی گئی ہے۔

ایک بنیادی قسم کی مائی ایس کیو ایل ڈیٹابیس بنائیں


UP

2- ڈیٹابیس میں نیا ریکارڈ داخل کریں

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

  1. سب سے پہلے آپ If-statement دیکھ رہے ہیں۔ اس بلاک کے اندر کوڈ تب چلے گا جب یوزر نئے ریکارڈز کی ویلیوز مہیا کر کے فارم پوسٹ کرے گا۔
  2. پھر MySQL ڈیٹابیس کا کنکشن بنایا گیا ہے۔ اس مقصد کے لیے ڈیٹابیس کنکشن کا کوڈ connection.php_ کے نام سے ایک الگ فائل میں رکھ کر اسے اس فائل insert.php میں شامل کیا گیا ہے۔
  3. پھر پوسٹ کیے جانے والے فارم کی ویلیوز کو ڈیٹابیس میں داخل کرنے کے لیے تیار کیا جا رہا ہے، تاکہ اگر یوزر نے فارم کی ویلیوز میں کوئی خاص حروف شامل کیے ہیں تو ان کی وجہ سے ڈیٹابیس کی کیوئری اسٹیٹمنٹ خراب نہ ہو جائے۔ اس مقصد کے لیے PHP لینگوئج میں مہیا کیا گیا ()mysqli_real_escape_string فنکشن استعمال کیا گیا ہے۔ یہ فنکشن دو پیرامیٹرز لیتا ہے، ایک ڈیٹابیس کا کنکشن ویری ایبل، جبکہ دوسرا وہ ویری ایبل جس کی ویلیو ڈیٹابیس میں محفوظ کی جانی ہے۔
  4. اس کے بعد ڈیٹابیس کی کیوئری چلائی گئی ہے۔ یہ کیوئری پوسٹ کیے جانے والے فارم کی ویلیوز کی مدد سے ڈیٹابیس کے ٹیبل profiles میں ایک نیا ریکارڈ داخل کر دے گی۔ ریکارڈ داخل کرنے میں کامیابی یا ناکامی کی صورت میں If-statement کے بلاک میں پیغام پر مشتمل ایک ویری ایبل تیار کیا گیا ہے جو اگلے مرحلے میں HTML کوڈ میں شامل کر دیا جائے گا۔
  5. اب آپ HTML کوڈ والے حصے میں ہیں۔ اس کے head سیکشن میں اس ویب پیج کے ساتھ ایک اسٹائل شیٹ فائل منسلک کی گئی ہے۔ اس CSS فائل میں ویب پیج کے ٹیگز کو بہتر انداز میں دکھانے کے لیے اسٹائل رولز شامل کیے گئے ہیں۔
  6. ویب پیج کے body سیکشن میں سب سے پہلے آپ مختصر PHP کوڈ دیکھ رہے ہیں جس کی مدد سے menu.php_ فائل کو اس ویب پیج میں شامل کیا جا رہا ہے۔ یہ در اصل وہ مینیو ہے جو ایپلی کیشن کے ہر ویب پیج کے اوپر والے حصے میں نظر آئے گا۔ یہ مینیو الگ فائل میں اس لیے رکھا گیا ہے تاکہ اگر مینیو میں تبدیلی کی ضرورت پیش آئے تو صرف ایک فائل میں تبدیلی کرنا پڑے۔
  7. پھر وہ message$ ویری ایبل پرنٹ کیا گیا ہے جو ڈیٹابیس میں ریکارڈ داخل کرنے میں کامیابی یا ناکامی کی صورت میں بنے گا۔
  8. آخری حصے میں HTML فارم ہے جس میں یوزر نئے ریکارڈ کی معلومات مہیا کر کے سرور کی طرف پوسٹ کرے گا۔ اس فارم کے method ایٹری بیوٹ کے لیے post ویلیو مقرر کی گئی ہے،تاکہ جب یہ فارم پوسٹ کیا جائے تو اس کی ویلیوز ویب پیج کے ایڈریس کے ساتھ منسلک کرنے کی بجائے اس کی باڈی میں شامل کر کے ویب سرور کی طرف بھیجی جائیں۔ اس صورت میں فارم کی ویلیوز چھپی رہتی ہیں اور براؤزر انہیں اپنی کیش میں محفوظ نہیں کرتا۔

ڈیٹابیس میں نیا ریکارڈ داخل کریں


UP

3- ڈیٹابیس ٹیبل میں سے ریکارڈ حاصل کریں

  1. پہلے PHP کی پرنٹ اسٹیٹمنٹ کی مدد سے HTML ٹیبل کی عنوان والی سطر پرنٹ کی گئی ہے۔
  2. پھر ڈیٹابیس میں سے ریکارڈز حاصل کر کے results$ میں محفوظ کیے گئے ہیں۔ اور while لوپ کی مدد سے ہر ریکارڈ کی ویلیوز حاصل کر کے انہیں HTML ٹیبل میں شامل کیا گیا ہے۔ یعنی ہر ریکارڈ کے لیے ٹیبل کی سطر بنا کر پرنٹ کی گئی ہے۔ اس میں آپ دیکھ رہے ہیں کہ update.php اور delete.php کے لنکس بھی تیار کیے گئے ہیں۔ اور لنک کے ساتھ id پیرامیٹر بھی منسلک کیا گیا ہے جو کھلنے والے ویب پیج کو اس ریکارڈ کا نمبر مہیا کرے گا۔ یہ ویب پیج اس ریکارڈ نمبر کو استعمال کر کے اسے اپ ڈیٹ یا ڈیلیٹ کرے گا۔
    نوٹ: ویب ایپلی کیشن کی نوعیت کے مطابق ممکن ہے آپ کو ڈیٹابیس سے حاصل کردہ ویلیوز کو درج ذیل فنکشن استعمال کرتے ہوئے ویب پیج میں شامل کرنا پڑے۔ اس کا فائدہ یہ ہوگا کہ اگر یوزر نے ریکارڈ بناتے وقت ڈیٹابیس میں کوئی خطرناک کوڈ شامل کیا ہے تو یہ فنکشن اس کوڈ کو ناقابل عمل بنا دیتا ہے۔ یعنی جب غلط کوڈ پر مشتمل ریکارڈ براؤزر میں لوڈ ہوتا ہے تو براؤزر اس کوڈ کو چلانے کی بجائے یوزر کو دکھا دیتا ہے۔
    htmlspecialchars($row["name"]);
  3. آخر میں ()mysqli_num_rows فنکشن کی مدد سے یہ چیک کیا گیا ہے کہ اگر ڈیٹابیس سے موصول ہونے والے ریکارڈز کی تعداد صفر ہے تو پھر ایک پیغام پرنٹ کر کے یوزر کو اس کے متعلق بتا دیا جائے۔

ڈیٹابیس سے ریکارڈز حاصل کریں


UP

4- کسی ریکارڈ میں تبدیلی کریں

  1. پہلے If-statement کی مدد سے یہ چیک کیا گیا ہے کہ اگر اس ویب پیج کے ایڈریس کے ساتھ id پیرامیٹر مہیا کیا گیا ہے تو اس نمبر کو استعمال کرتے ہوئے ڈیٹابیس سے ریکارڈ حاصل کیا جائے۔ اس ریکارڈ کی ویلیوز کو ویری ایبلز میں رکھا گیا ہے تاکہ انہیں HTML فارم کی فیلڈز میں استعمال کیا جا سکے۔
  2. اس مرحلے میں یہ چیک کیا گیا ہے کہ اگر یوزر نے ریکارڈ کی ویلیوز تبدیل کر کے فارم پوسٹ کیا ہے تو ان نئی ویلیوز کے ساتھ ڈیٹابیس کے profiles ٹیبل کا ریکارڈ اپ ڈیٹ کر دیا جائے۔
  3. پھر HTML کوڈ والے حصے میں فارم موجود ہے جس کی مدد سے یوزر ریکارڈ کی ویلیوز تبدیل کر کے ویب سرور کی طرف بھیجے گا۔ اس میں دو باتیں اہم ہیں:
    پہلی اہم بات یہ ہے کہ فارم ٹیگ کے action ایٹری بیوٹ میں update.php کے ایڈریس کے ساتھ id پیرامیٹر بھی رکھا گیا ہے۔ ایسا کرنے کا مقصد یہ ہے کہ اگر یوزر کو یہ فارم بار بار پوسٹ کرنے کی ضرورت پیش آئے تو یہ ریکارڈ نمبر ہر دفعہ ساتھ شامل ہو، تاکہ سرور پر اس نمبر کو استعمال کرتے ہوئے ڈیٹابیس میں ریکارڈ اپ ڈیٹ کیا جا سکے۔
    دوسری اہم بات یہ ہے کہ input فیلڈز کے value ایٹری بیوٹس کے اندر PHP کوڈ کی مدد سے ویلیوز پرنٹ کی گئی ہیں۔ یعنی یہ فارم پہلی مرتبہ لوڈ ہو، یا پھر یوزر کے پوسٹ کرنے کے بعد یہ فارم ویب سرور سے براؤزر کی طرف واپس آئے، تو ان فیلڈز میں یہ ویلیوز موجود ہوں گی۔

کسی ریکارڈ میں تبدیلی کریں


UP

5- کوئی ریکارڈ ختم کریں

پہلے If-statement کی مدد سے یہ چیک کیا گیا ہے کہ اگر اس ویب پیج کے ایڈریس کے ساتھ id پیرامیٹر مہیا کیا گیا ہے تو پھر اس بلاک کے اندر موجود کوڈ پر عمل کیا جائے۔ اگلے مرحلے میں یہ ریکارڈ نمبر استعمال کرتے ہوئے ڈیٹابیس ٹیبل سے ریکارڈ ختم کیا گیا ہے۔

کوئی ریکارڈ ختم کریں


UP

6- ڈیٹابیس ٹیبل میں سے ریکارڈز تلاش کریں

  1. پہلے آپ ویب فارم دیکھ رہے ہیں جس کی search فیلڈ میں یوزر تلاش کے الفاظ ٹائپ کر کے ویب سرور کے پاس بھیجے گا۔ اس میں خاص بات اس کا method ہے۔ اس فارم میں یہ post کی بجائے get مقرر کیا گیا ہے۔ چنانچہ ویب سرور کی طرف بھیجتے ہوئے فارم کی ویلیوز ویب ایڈریس کے ساتھ کیوئری پیرا میٹرز کے طور پر منسلک کر دی جائیں گی، جیسا کہ آپ نیچے دیے گئے اسکرین شاٹ میں دیکھ سکتے ہیں۔
  2. اگلے مرحلے میں PHP کوڈ میں یہ چیک کیا گیا ہے کہ اگر ویب پیج کے ایڈریس کے ساتھ search پیرامیٹر موجود ہے تو اس کوڈ بلاک پر عمل کیا جائے۔ یہ پیرامیٹر ویب ایڈریس کے ساتھ تب موجود ہوگا جب یوزر تلاش کے الفاظ ٹائپ کر کے فارم ویب سرور کے پاس بھیجے گا۔
  3. اس کے بعد ڈیٹابیس کے profiles ٹیبل کی name فیلڈ میں سے مطلوبہ الفاظ تلاش کیے گئے ہیں۔ یعنی جن ریکارڈز میں یہ الفاظ موجود ہوں گے وہ نتیجے میں شامل ہو جائیں گے۔ یہاں جو SQL کیوئری استعمال کی گئی ہے اس میں خاص بات LIKE اور اس کے ساتھ % نشان کا استعمال ہے۔ اس کا مطلب یہ ہے کہ تلاش کا لفظ نام کے کسی بھی حصے میں موجود ہو، اسے نتیجے میں شامل کر لیا جائے۔
  4. آخر میں دیکھا گیا ہے کہ اگر کوئی ریکارڈ موصول نہ ہو تو یوزر کو ایک پیغام کے ذریعے اس بارے میں آگاہ کر دیا جائے۔

ڈیٹابیس میں سے ریکارڈز تلاش کریں


UP

7- ڈیٹابیس کنکشن

درج ذیل ڈیٹابیس کنکشن کا کوڈ ہے، جسے ایک الگ فائل connection.php_ میں ایک فنکشن کے اندر رکھا گیا ہے۔ اس کی وجوہات یہ ہیں:

  1. الگ فائل میں رکھنے کا مقصد یہ ہے کہ ایپلی کیشن میں کہیں بھی ڈیٹابیس کنکشن کی ضرورت ہو وہاں کنکشن کا مکمل کوڈ لکھنے کی بجائے صرف اس فائل کو شامل کر لیا جائے۔ اس کا فائدہ یہ ہوگا کہ اگر کنکشن میں کسی تبدیلی ضرورت پیش آئے تو ایپلی کیشن کے مختلف حصوں میں یہ تبدیلی کرنے کی بجائے صرف اس کنکشن کی فائل میں تبدیلی کی جائے۔
  2. جبکہ فنکشن استعمال کرنے کا فائدہ یہ ہے کہ اگر اس فائل کا ایڈریس براہ راست براؤزر میں ٹائپ کیا جائے تو ڈیٹابیس کنکشن نہیں بنے گا۔ یہ ڈیٹابیس کنکشن اسی صورت میں بنے گا جب کوڈ کے اندر یہ فنکشن کال کیا جائے گا۔ ایسا کرنے کا مقصد ڈیٹابیس کو غیر ضروری کنکشنز سے بچانا ہے۔

اس کوڈ میں آپ utf8 والی کیوئری بھی دیکھ رہے ہیں۔ یہ کیوئری استعمال کر کے ہم ڈیٹابیس کو انگلش کے علاوہ دیگر زبانوں کے حروف استعمال کرنے کے قابل بناتے ہیں۔

<?php
function db_connection() {
      
$database_server "localhost";
      
$username "user";
      
$password "password";
      
$database "database_name";
      
$con mysqli_connect($database_server$username$password$database);
      if (
mysqli_connect_errno()) {
            die(
'Error: ('mysqli_connect_errno() .') 'mysqli_connect_error());
      }
          
mysqli_query($con"SET NAMES 'utf8'");
          return 
$con;
}
?>