الدرس الثاني PHP

على غير ما كنت تتوقع

في الدرس الأول من هذه السلسلة, أعطيتك مقدمة سريعة عن لغة PHP وعن كيفية استخدامها في بيئة تطوير مواقع الإنترنت. كما قمت بالشرح عن اساسيات المتغيرات في لغة PHP, وقمت بالتوضيح عن كيفية الجمع والضرب والدمج بين المتغيرات.
 
والآن بعد تعلم هذه الأساسيات, حان الوقت للتركيز في شيء من اجمل مزايا لغة ال PHP وهي قدرتها على استقبال المدخلات من المستخدم وإدراجها كمتغيرات في لغة PHP بشكل اوتوماتيكي.
التصنيف: 

القوالب Forms...

القوالب Forms...

القوالب هي دائماً اسرع واسهل طريقة لإضافة ميزة التفاعل (interactivity) لموقعك. القالب يسمح لك بأن تطلب من العملاء او الزوار العاديين ان يكتبوا ملاحظات عن بضاعتك او خدماتك اذا اعجبتهم. ولغة ال PHP ستقوم بتبسيط مهمة معالجة البيانات من القالب, كما سيوضح المثال الأول. هذا المثال يتكون من ملفين الأول اسمه form.htm ويحتوي على كود القالب وهو بلغة HTML والثاني يحتوي على الكود المسؤول عن معالجة المدخلات واسمه message.php, والتالي هو كود form.htm:


<html>
<head></head>
<body>
<form action="message.php" method="post">
Enter your message: <input type="text" name="msg" size="30">
<input type="submit" value="Send">
</form>
</body>
</html>

أهم سطر في هذا الكود هو علامة ال

<form> tag


<form action="message.php" method="post">
...
</form>

ربما انت تعلم مسبقاً, الخاصية attribute الخاصة بالقالب تحدد اسم ملف ال PHP الموجود على الخادم والذي سيقوم بمعالجة المعلومات التي تم ادخالها بالقالب. والخاصية method تحدد كيفية ايصال هذه المعلومات.

والعمليات Functions ...

والعمليات Functions ...

والآن النصف الثاني من اللغز : ملف message.php. هذه الكود يقرأ البيانات التي قام المستخدم بإدخالها و "يقوم بعمل شيء ما فيها". وكود هذا الملف كالتالي:

 

<html>
<head></head>
<body>
<?php
// retrieve form data
$input = $_POST['msg'];
// use it
echo "You said: <i>$input</i>";
?>
</body>

</html>

عندما تقوم بإدخال بعض البيانات في ملف form.htm لنقل مثلا "boo" وتقوم بعد ذلك بعملية الإرسال, قوم الملف المسؤول عن المعالجة message.php بقرائة البيانات وطباعة الجملة "You said: boo". بمعنى آخر في كل مرة يتم ارسال البيانات للقالب, جميع قيم المتغيرات الموجودة بالقالب تصبح متاحة لكود ال PHP الذي قام بإستلامها من خلال $_POST. بعد ذلك يمكنك الوصول لهذه المتغيرات من خلال وضع اسمها في $_POST كما فعلت انا في الكود أعلاه.

من الواضح ايضاً ان لغة ال PHP تدعم ايضا طريقة الإرسال GET. كل ما عليك القيام به هو تغيير خاصية طريقة الإرسال method لتصبح get وقم بعد ذلك بإستلام البيانات من خلال $_GET بدلاً من $_POST. ال $_GET وال $_POST هما عبارة متغيرات خاصة بلغة PHP من نوع المصفوفة Array. لا تقلق كثيراً الآن, فقط تأكد بأنك فهمت وتمكنت من عملية استلام البيانات من القالب داخل كود ال PHP. وأكمل الدرس لتتعلم المزيد عن العمليات في ال PHP.

التعامل مع العمليات بحذر شديد

التعامل مع العمليات بحذر شديد

لحد الآن الكود الذي قمنا بمناقشته كان غبي نوعاً ما. لإضافة بعض الذكاء الى الكود, يجب عليك معرفة كيف تعمل ما يسموه العباقرة الجمل الشرطية (conditional statement) الجملة الشرطية هي الجملة التي تمكنك من عمل شيء معياً بناء على نتيجة عملية مقارنة معينة. وبما ان اساس هذه المقارنات هي المساواة, يجب عليك معرفة كيف تقارن بين متغيرين وتقرر هل هم متشابهات ام لا.

سبق لك ورأيت بعض كودات لغة ال PHP في العمليات الحسابية والعمليات على النصوص. أيضا لغة ال PHP جائت أيضاً بإشارات مصممة بشكل خاص للمقارنات بين قيم المتغيرات: تسمى هذه الإشارات إشارات المقارنة (comparison operators). والتالي هو مثال على كيفية عمل هذه الإشارات:

 

<?php

/* define some variables */
$mean = 9;
$median = 10;
$mode = 9;

// less-than operator
// returns true if left side is less than right
// returns true here
$result = ($mean < $median);
print "result is $result<br />";

// greater-than operator
// returns true if left side is greater than right
// returns false here
$result = ($mean > $median);
print "result is $result<br />";

// less-than-or-equal-to operator
// returns true if left side is less than or equal to right
// returns false here
$result = ($median <= $mode);
print "result is $result<br />";

// greater-than-or-equal-to operator
// returns true if left side is greater than or equal to right
// returns true here
$result = ($median >= $mode);
print "result is $result<br />";

// equality operator
// returns true if left side is equal to right
// returns true here
$result = ($mean == $mode);
print "result is $result<br />";

// not-equal-to operator
// returns true if left side is not equal to right
// returns false here
$result = ($mean != $mode);
print "result is $result<br />";

// inequality operator
// returns true if left side is not equal to right
// returns false here
$result = ($mean <> $mode);
print "result is $result";

?>

 

جميع نتائج هذه العمليات هي نتائج منطقية : بمعنى إما صحيح (true) (1) او خطأ (false)(0) - صفر تعني لا تطبع اي شيء. هذه يجعل المقارنة اداة لا يمكن الإستغناء عنها في عملك, لأنه يمكنك استخدامها في الجمل الشرطية لتوجيه خط سير عمل الكود للمكان الذي تريده.

في الإصدارة PHP 4.0 تم إستحداث إشارة جديدة تقوم بمقارنة القيم بالنسبة للمساواة وأيضاً تقوم بالمقارنة بالنسبة لنوع المتغير وهي ===. المثال التالي يوضح ما تقوم به:

 

<?php

/* define two variables */
$str = '10';
$int = 10;

/* returns true, since both variables contain the same value */
$result = ($str == $int);
print "result is $result<br />";

/* returns false, since the variables are not of the same type even though they have the same value */
$result = ($str === $int);
print "result is $result<br />";

/* returns true, since the variables are the same type and value */
$anotherInt = 10;
$result = ($anotherInt === $int);
print "result is $result";

?>

 

إقرأ المزيد عن عمليات المقارنة على الموقع http://www.php.net/manual/en/language.operators.comparison.php

سؤال في المنطق

سؤال في المنطق

بالإضافة الى إشارات المقارنة التي قمت بإستخدامها في الأمثلة السابقة, لغة ال PHP تدعم ايضاً عمليات منطقية, والتي تقوم بدمج عمليات منطقية بعضها مع بعض. وهذه العمليات الأربعة هي : و المنطقية (AND), أو المنطقية (OR), إما المنطقية (XOR), لا المنطقية(NOT). جميعها مستخدمة في المثال التالي:

 

<?php

/* define some variables */
$auth = 1;
$status = 1;
$role = 4;

/* logical AND returns true if all conditions are true */
// returns true
$result = (($auth == 1) && ($status != 0));
print "result is $result<br />";

/* logical OR returns true if any condition is true */
// returns true
$result = (($status == 1) || ($role <= 2));
print "result is $result<br />";

/* logical NOT returns true if the condition is false and vice-versa */
// returns false
$result = !($status == 1);
print "result is $result<br />";

/* logical XOR returns true if either of two conditions are true, or returns false if both conditions are true */
// returns false
$result = (($status == 1) xor ($auth == 1));
print "result is $result<br />";

?>

 

العمليات المنطقية تلعب دور مهم جداً في بناء الجمل الشرطية, لأنها تستطيع ان تدمج شروط معينة بطريقة سهلة ومنمقة. قم بزيارة الموقع التالي لمشاهدة أمثلة أكثر عن هذه الموضوع http://www.php.net/manual/en/language.operators.logical.php.

أقدم ولكن ليس أكثر حكمة

أقدم ولكن ليس أكثر حكمة

والآن بعد ان تعلم كل ما يتعلق بالمقارنات واشارات المقارنة, يمكنني ان اعلمك ما يخص الجمل الشرطية. كما أسلفت سابقاً, الجمل الشرطية تسمح لك بالإختبار ما اذا كان شرط معين صحيح ام لا, ومن ثم تنفيذ شيء معياً بناء على نتيجة هذا الإختبار. في لغة PHP ابسط شكل للجمل الشرطية هي جملة إذا (if). والتي تبدو تقريباً مثل الآتي:

 

if (condition) {
do this!
}

 

المدخلات (argument) لجملة if هي عبارة منطقية, وهي التي تعطي نتيجة اما صواب واما خطأ. اذا كانت تيجة العبارة المنطقية صحيحة فإن الكود الموجود داخل القوسين المعقوفين سيتم تنفيذه , واذا لم تكن النتيجة صحيحة فإنه سيتم تجاهل المود والإستمرار بالتنفيذ من الجملة اسفل الجملة الشرطية.

شاهد كيف تقوم جملة if بالعمل اذا ما دمجت بقالب. في المثال التالي يطلب من المستخدم إدخال عمره او عمرها:

 

<html>

<head></head>
<body>
<form action="ageist.php" method="post">
Enter your age: <input name="age" size="2">
</form>
</body>
</html>

 

Depending on whether the entered age is above or below 21, a different message is displayed by the ageist.php script:

 

<html>
<head></head>
<body>


<?php
// retrieve form data
$age = $_POST['age'];
// check entered value and branch
if ($age >= 21) {
echo 'Come on in, we have alcohol and music awaiting you!';
}
if ($age < 21) {
echo "You're too young for this club, come back when you're a little older";
}
?>

</body>
</html>

إذا لم يكن هذا ماذا إذن؟

إذا لم يكن هذا ماذا إذن؟

بالإضافة الى الجملة الشرطية if, يوجد في لغة ال PHP جملة إذا-إلا (if-else), تستخدم لتعريف جزء من الكود يتم تنفيذه في حالة كان نتيجة الجملة الشرطية هي خطأ false.

شكل جملة if-else هو كالآتي:

 

if (condition) {
do this!
}
else {
do this!
}

 

هذه الجملة يمكن استخدامها بشكل فعال جداً في المثال السابق: يمكن دمج الجملتين الشرطيتين بجملة if-else واحدة.

 

<html>
<head></head>
<body>

<?php
// retrieve form data
$age = $_POST['age'];
// check entered value and branch
if ($age >= 21) {
echo 'Come on in, we have alcohol and music awaiting you!';
}
else {
echo "You're too young for this club, come back when you're a little older";
}
?>

</body>
</html>

نشر الضباب

نشر الضباب

إذا كنت تعقتد ان القيام بتضليل من هم يقرأون كودك يجعلك تشعر بالدفء والقوة, اذن ستحب الجملة الثلاثية(ternary operator) والتي تمثل ب علامة استفهام . هذه الإشارة تمكنك من عمل جملة شرطية في سطر واحد, بحيث جواب الشرط وعكسه عبارة عن جملة واحدة تغنيك عن جلمة if-else. يمكنك عملها كما بالمثال التالي :

 

<?php

if ($numTries > 10) {
$msg = 'Blocking your account...';
}
else {
$msg = 'Welcome!';
}

?>

 

يمكنك عمل المثال السابق كالتالي , كلا الجملتين متشابهتين وتعطي نفس النتيجة (لكن ليس نفس المتعة).

 

<?php

$msg = $numTries > 10 ? 'Blocking your account...' : 'Welcome!';

?>

 

تسمح لك لغة ال PHP أيضاً بدمج الجمل الشرطية بعضها في بعض. مثل الكود الصحيح التالي:

 

<?php

if ($day == 'Thursday') {
if ($time == '0800') {
if ($country == 'UK') {
$meal = 'bacon and eggs';
}
}
}

?>

أيضاً يمكنك كتابة الكود السابق بطريقة انيقة أكثر كالتالي:

<?php

if ($day == 'Thursday' && $time == '0800' && $country == 'UK') {
$meal = 'bacon and eggs';
}

?>

طبق اليوم

طبق اليوم

تمكنك الغة ايضاً من السيطرة على احتمالات كثيرة: جملة if-elseif-else. الشكل الإفتراضي لجملة if-elseif-else هو كالتالي :

 

if (first condition is true) {
do this!
}
elseif (second condition is true) {
do this!
}
elseif (third condition is true) {
do this!
}
... and so on ...
else {
do this!
}

 

 

وهذا المثال يوضح كيفية استخدامها


<html>
<head></head>
<body>
<h2>Today's Special</h2>
<p>
<form method="get" action="cooking.php">
<select name="day">
<option value="1">Monday/Wednesday
<option value="2">Tuesday/Thursday
<option value="3">Friday/Sunday
<option value="4">Saturday
</select>
<input type="submit" value="Send">
</form>
</body>
</html>

كما ترى هذا قالب بسيط يسمح لك بإختيار يوم من الأسبوع, العمل الحقيقي هو ما يقوم به كود ال PHP الكود cooking.php:

 

<html>
<head></head>
<body>

<?php
// get form selection
$day = $_GET['day'];
// check value and select appropriate item
if ($day == 1) {
$special = 'Chicken in oyster sauce';
}
elseif ($day == 2) {
$special = 'French onion soup';
}
elseif ($day == 3) {
$special = 'Pork chops with mashed potatoes and green salad';
}
else {
$special = 'Fish and chips';
}
?>

<h2>Today's special is:</h2>
<?php echo $special; ?>
</body>
</html>

 

هذا كل شيء للآن. لمشاهدة أمثلة اكثر عن الجمل الشرطية قم بزيارة الموقع http://www.php.net/manual/en/language.control-structures.php .

في الدرس الثالث سنتحدث عن جمل تحكم اكثر, عمليات اكثر وكودات اغرب اكثر إن شاء الله, لذا احرص على عدم تفويته.