الدرس الحادي عشر: تغيير المتغيرات من خلال النماذج

المواقع التفاعلية تتطلب مدخلات من المستخدمين، أحد أكثر الطرق استخداماً للحصول على المدخلات هي النماذج.

في هذا الدرس سنلقي نظرة على كيفية إنشاء نموذج ومعالجة مدخلاته في المزود.

<form>

عندما تبرمج نموذجاً فهناك خاصيتان مهمتان: action وmethod.

action
تستخدم لإدخال عنوان الصحفة التي ستسقبل مدخلات النموذج، ستكون ملف PHP تريده أن يتعامل مع المدخلات.
method
يمكنها أن تقبل إحدى القيمتين إما "post" أو "get"، وهما طريقتان مختلفتان لتمرير المدخلات، في هذه المرحلة لست بحاجة لمعرفة الكثير، باستخدم "get" البيانات ترسل من خلال عنوان الموقع، وباستخدام "post" البيانات ترسل من خلال كتلة بيانات من خلال تقنية (STDIN)، في بقية الدرس سنلقي نظرة على كيفية الحصول على البيانات من خلال عنوان الموقع باستخدام توثيق$_GET، في هذا الدرس سنلقي نظرة على كيفية استرجاع البيانات المرسلة بطريقة "post".

صفحة HTML تحوي نموذجاً

الصفحة التي تحوي نموذجاً لا تحتاج لأن تكون ملف PHP، يمكنها أن تكون إن أردت، ولا تحتاج حتى لأن تكون في نفس الموقع الذي يحوي ملفاً سيتلقى البيانات.

في المثال الأول سنلقي نظرة على نموج بسيط يحوي حقلاً نصياً واحداً::


	<html>
	<head>
	<title>Form</title>
	</head>
	<body>

	<h1>Enter your name</h1>

	<form method="post" action="handler.php">
	<input type="text" name="username">
	<input type="submit">
	</form>

	</body>
	</html>

	
	

النتيجة في المتصفح ستكون:

نموذج

هنا يأتي الجزء الممتع: تلقي البيانات ومعالجتها باستخدام PHP.

طلب بيانات النموذج باستخدام PHP

عندما تحتاج لطلب بيانات أرسلت من خلال نموذج بطريقة post فعليك استخدام أمر توثيق$_POST:

	
	$_POST["fieldname"];
	
	

الذي يأخذ قيمة حقل في النموذج، لنجرب استخدامه في مثال.

في البداية اكتب صفحة تحوي النموذج كما في المثال أعلاه، ثم اكتب صفحة PHP وسمها "handler.php" لاحظ أن هذا هو اسم الصفحة الذي كتبناه في خاصية action في النموذج.

ملف "handler.php" سيحوي التالي:


	<html>
	<head>
	<title>Form</title>
	</head>

	<body>

	<?php

	echo "<h1>Hello " . $_POST["username"] . "</h1>";

	?>

	</body>
	</html>
	
	

مدخلات المستخدم والشروط

في المثال التالي سنجرب استخدام مدخلات المستخدم لإنشاء شروط، في البداية نحن بحاجة لنموذج:


	<html>
	<head>
	<title>Form</title>
	</head>
	<body>

	<form method="post" action="handler.php">

	<p>What is your name:</p>
	<input type="text" name="username"></p>

	<p>What is your favorite color:
	<input type="radio" name="favoritecolor" value="r" /> Red 
	<input type="radio" name="favoritecolor" value="g" /> Green 
	<input type="radio" name="favoritecolor" value="b" /> Blue </p>

	<input type="submit" value="Submit" />

	</form>

	</body>
	</html>
	
	

سيبدو بهذا الشكل في المتصفح:

الآن سنستخدم هذه المدخلات لإنشاء صفحة تغير لون خلفيتها تلقائياً بحسب اختيار المستخدم للونه المفضل، يمكننا فعل ذلك من خلال إنشاء شرط، (اقرأ الدرس السادس) يستخدم البيانات التي أدخلها المستخدم في النموذج.

	<?php

	$strHeading = "<h1>Hello " . $_POST["username"] . "</h1>";

	switch ($_POST["favoritecolor"]) {
	case "r":
		$strBackgroundColor = "rgb(255,0,0)";
		break;
	case "g";
		$strBackgroundColor = "rgb(0,255,0)";
		break;
	case "b":
		$strBackgroundColor = "rgb(0,0,255)";
		break;
	default:
		$strBackgroundColor = "rgb(255,255,255)";
		break;
	}

	?>

	<html>
	<head>
	<title>Form</title>

	</head>
	<body style="background: <?php echo $strBackgroundColor; ?>;">

	<? echo $strHeading; ?>

	</body>
	</html>
	
	

لون خلفية الصفحة سيكون أبيضاً إن لم يختر المستخدم لوناً مفضلاً في النموذج، هذا يمكن إنجازه من خلال أمر default لتحديد ما يحدث إن لم تتحقق أي من الشروط السابقة.

لكن ماذا لو لم يدخل المستخدم اسمه؟ البرنامج سيقول فقط "Hello", سنضيف شرطاً إضافياً لتغيير هذا.


	<?php

	$strUsername = $_POST["username"];
	 
	if ($strUsername != "") {
	    $strHeading = "<h1>Hello " . $_POST["username"] . "</h1>";
	}
	else {
	    $strHeading = "<h1>Hello stranger!</h1> ";
	}

	switch ($_POST["favorite color"]) {
	case "r":
		$strBackgroundColor = "rgb(255,0,0)";
		break;
	case "g";
		$strBackgroundColor = "rgb(0,255,0)";
		break;
	case "b":
		$strBackgroundColor = "rgb(0,0,255)";
		break;
	default:
		$strBackgroundColor = "rgb(255,255,255)";
		break;
	}

	?>

	<html>

	<head>

	<title>Form</title>
	</head>
	<body style="background: <?php echo $strBackgroundColor; ?>;">

	<? echo $strHeading; ?>

	</body>
	</html>

	
	

في المثال أعلاه استخدمنا شرطاً للتحقق من المعلومات التي أرسلها المستخدم، في هذه الحالة قد لا يكون من المهم أن يكتب المستخدم اسمه، لكن عندما تبدأ في برمجة برامج متقدمة من الضروري أن تضع في الحسبان أن المستخدم قد لا يدخل المعلومات كما ترغب.

مثال: نموذج مراسلة

بمعرفتك الجديدة حول لغة PHP والنماذج يمكنك إنشاء نموذج مراسلة من خلال استخدام الوظيفة توثيقmail، التي تكتب بهذه الطريقة:

	
	mail(to, subject, message);
	
	

أولاً نحن بحاجة لنموذج بسيط:


	<html>
	<head>
	<title>Contact form</title>
	</head>
	<body>

	<h1>Contact form</h1>

	<form method="post" action="handler.php">
	<p>Subject:<br /><input type="text" name="subject" /></p>
	<p>Message:<br /><textarea name="message"></textarea></p>
	<input type="submit">
	</form>

	</body>
	</html>
	
	

ثم نحن بحاجة إلى برنامج PHP ليرسل مدخلات المستخدم:


	<html>
	<head>
	<title>Functions</title>
	</head>
	<body>

	<?php

	// Recipient (change to your e-mail address)
	$strEmail = "name@mydomain.com";

	// Get user inputs
	$strSubject = $_POST["subject"];
	$strMessage = $_POST["message"];

	mail($strEmail,$strSubject,$strMessage);
	echo "Mail Sent.";
	 
	
	?>

	</body>
	</html>
	
	

لاحظ أن المثال سيعمل فقط إن كنت تملك حق الوصول إلى مزود بريد إلكتروني، هذا غير متوفر في XAMPP ومعظم خدمات الاستضافة المجانية، كذلك وبعض شركات الاستضافة تطلب إضافة معلومات المرسل والذي يمكن إضافته بهذا الشكل:

	
	mail("you@yourdomain.com", "Test", "This is a test mail", "From: me@mydomain.com");
	
	


<< Lesson 10: تمرير المتغيرات في عنوان الموقع URL

Lesson 12: الجلسات >>

cron