الدرس 19: إدخال البيانات في قاعدة البيانات
في هذا الدرس سنلقي نظرة على إدخال البيانات في قاعدة البيانات مباشرة من خلال PHP.
إدخال البيانات من خلال SQL
تستخدم SQL لإدخال البيانات في قاعدة البيانات بنفس الطريقة التي تستخدم SQL لإنشاء قاعدة البيانات والجداول، استعلام SQL يكتب بهذا الشكل:
INSERT INTO TableName(column1, column2, ...) VALUES(value1, value2, ...)
كما ترى يمكنك تحديث عدة أعمدة في استعلام SQL بتحديدها في قائمة تفصل بين كلماتها بفاصلة، لكن بالطبع يمكنك تحديد عمود واحد وقيمة واحدة، الأعمدة غير المذكورة في الاستعلام ستبقى فارغة.
مثال: إدخال بيانات شخص في الجدول
في هذا المثال سنستخدم قاعدة البيانات من الدرس 18، لنقل أننا نرغب في إدخال بيانات شخص في قاعدة البيانات، يمكن أن يكون اسمه Gus Goose ورقم هاتفه 99887766 وتاريخ ميلاده هو 1964-04-20.
استعلام SQL سيكون بهذا الشكل:
$strSQL = "INSERT INTO people(FirstName,LastName,Phone,BirthDate) VALUES('Gus','Goose','99887766 ','1964-04-20')";
mysql_query($strSQL) or die(mysql_error());
كما ترى استعلام SQL يمكن أن يكون طويلاً، ويمكن أن تشعر بأن هذا معقد، لذلك من الإيجابي أن تكتب استعلام SQL بطريقة مختلفة:
strSQL = "INSERT INTO people("; strSQL = strSQL . "FirstName, "; strSQL = strSQL . "LastName, " strSQL = strSQL . "Phone, "; strSQL = strSQL . "birth) "; strSQL = strSQL . "VALUES ("; strSQL = strSQL . "'Gus', "; strSQL = strSQL . "'Goose', "; strSQL = strSQL . "'99887766', "; strSQL = strSQL . "'1964-04-20')"; mysql_query($strSQL) or die(mysql_error());
بهذه الطريقة استعلام SQL كتب بتقسيم جمله إلى أقسام صغيرة ثم وضع في متغير اسمه $strSQL.
عملياً اختيار أي طريقة منهما لا يشكل فرقاً، لكن ما إن تعمل على جداول كبيرة من الضروري أن تعرف ما الذي تفعله لذلك اختر الطريقة الأنسب لك.
شغل البرنامج التالي لإدخال Gus Goose في قاعدة البيانات:
<html> <head> <title>Insert data into database</title> </head> <body> <?php // Connect to database server mysql_connect("mysql.myhost.com", "user", "sesame") or die (mysql_error ()); // Select database mysql_select_db("mydatabase") or die(mysql_error()); // The SQL statement is built $strSQL = "INSERT INTO people("; $strSQL = $strSQL . "FirstName, "; $strSQL = $strSQL . "LastName, "; $strSQL = $strSQL . "Phone, "; $strSQL = $strSQL . "BirthDate) "; $strSQL = $strSQL . "VALUES("; $strSQL = $strSQL . "'Gus', "; $strSQL = $strSQL . "'Goose', "; $strSQL = $strSQL . "'99887766', "; $strSQL = $strSQL . "'1964-04-20')"; // The SQL statement is executed mysql_query($strSQL) or die (mysql_error()); // Close the database connection mysql_close(); ?> <h1>The database is updated!</h1> </body> </html>
حفظ مدخلات المستخدم في قاعدة بيانات
غالباً سترغب في أن تحفظ مدخلات المستخدم في قاعدة البيانات.
يمكن إنجاز ذلك من خلال نموذج كما شرحنا في الدرس 11، حيث القيم من النموذج يمكن إدخالها في استعلام SQL، افترض أن لديك نموذجاً بسيطاً بهذا الشكل:
<form action="insert.php" method="post"> <input type="text" name="FirstName" /> <input type="submit" value="Save" /> </form>
النموذج يرسل بياناته إلى ملف insert.php الذي يتلقى بيانات المستخدم بطلبها من محتويات النموذج، في هذا المثال استعلام SQL سيكون بهذا الشكل:
strSQL = "INSERT INTO people(FirstName) values('" . $_POST["FirstName"] . "')"
بنفس الطريقة من الممكن طلب البيانات من الكوكيز، الجلسات، وغيرها.
الأخطاء الشائعة عند المبتدئين
في البداية قد تواجه كثيراً من رسائل الأخطاء عندما تحاول تحديث قاعدة البيانات، لا يوجد مساحة لأي خطأ أو عدم دقة عندما تعمل مع قواعد البيانات، وجود فاصلة في المكان الخطأ قد يعني عدم تحديث قاعدة البيانات وستتلقى رسالة خطأ، أدناه نشرح الأخطاء الشائعة عند المبتدئين.
أنواع بيانات غير صحيحة
من الضروري أن يكون هناك توافق بين نوع البيانات والعمود في الجدول، كل عمود حدد له نوع بيانات، اللقطة أدناه توضح نوع البيانات للجدول في مثالنا.
يحدث الخطأ عندما مثلاً تحاول إدخال نص أو رقم في حقل التاريخ لذلك حاول أن تحدد بدقة نوع البيانات.
أدناه قائمة بأنواع البيانات الأكثر شيوعاً:
الإعداد | نوع البيانات | الحجم |
---|---|---|
CHAR |
نص أو خليط من النصوص والأرقام، يمكن استخدامه للأرقام التي لا تستعمل في العمليات الحسابية مثل أرقام الهواتف | 255 حرفاً أو يمكن تحديد عدد الحروف الأقصى من خلال "Length" |
TEXT |
نصوص طويلة أو خليط من النصوص والأرقام. | يصل الى 65535 حرفا. |
INT |
أرقام تستخدم في العمليات الحسابية. | 4 بايت |
DATE |
تواريخ بتنسيق YYYY-MM-DD | 3 بايت. |
TIME |
الوقت بتنسيق hh:mm:ss | 3 بايت. |
DATETIME |
الوقت والتاريخ بتنسيق YYYY-MM-DD hh:mm:ss | 8 بايت. |
استعلام SQL بعلامة الاقتباس أو الشرطة المائلة للخلف (backslash)
إذا جربت إدخال نص يحوي علامة اقتباس أحادية (') أو ثنائية (") أو شرطة مائلة للخلف (\) قد لا تستطيع إدخال البيانات في قاعدة البيانات، الحل هو إضافة شرطة مائلة قبل هذه العلامات.
هذا يمكن أن ينجز من خلال وظيفة addslashes بهذه الطريقة:
<?php $strText = "Is your name O'Reilly?"; $strText = addslashes($strText); ?>
كل علامات الاقتباس الأحادية (') والثنائية (") والشرطة المائلة (\) ستحصل على شرطة مائلة قبلها، هذا سيكون فقط لإضافة البيانات إلى قاعدة البيانات، الشرطة المائلة لن تضاف في قاعدة البيانات، لاحظ أن PHP تشغل addslashesفي كل بيانات $_GET و$_POST و$_COOKIE تلقائياً، لذلك لا تستخدم addslashes في التعامل مع هذه البيانات.
في الدرس التالي ستتعلم كيف تستخرج المعلومات من قاعدة البيانات، لكن أولاً حاول إدخال مزيد من المعلومات في قاعدة البيانات.