الدرس 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 في التعامل مع هذه البيانات.

في الدرس التالي ستتعلم كيف تستخرج المعلومات من قاعدة البيانات، لكن أولاً حاول إدخال مزيد من المعلومات في قاعدة البيانات.



<< Lesson 18: إنشاء قواعد البيانات والجداول

Lesson 20: استرجاع البيانات من قاعدة البيانات >>