المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : تابع لدروس php


moulay
08-05-2008, 18:29
الخامس [فقط الأعضاء المسجلين والمفعلين يمكنهم رؤية الوصلات]
====================================

الأوامر الشرطية

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



دعنا نعطيك فكرة من حياتنا اليومية ....

تقوم في الصباح وتريد أن تحضر فطورك الذي يتكون من التالي :



عسل

جبنة

خبز

شاي


ستقوم بالذهاب إلى الثلاجة ثم تقوم بالبحث عن الأشياء التي يتكون منها فطورك ، فإذا لم تجد ما تريد تستعد للذهاب إلى المركز التجاري لشرائه حاجتك ، تذهب إلى المطبخ وتتأكد مره أخرى وتبحث عن المؤونة التي يحتاجها البيت بشكل عام .



1- تبحث عن جبنة وإذا لم تجدها تنتقل إلى الخطوة 3 .

2- إذا وجدت جبنة فإنك تبحث عن العسل فإذا وجدته تنتقل الى الخطوة 4 ، واذا لم تجده تنتقل الى الخطوة 5 .

3- تقوم بكتابتها في ورقة جانبية وتقوم بالبحث عن العسل .

4- تتجهز للذهاب إلى المركز التجاري .

5- تكتبه في ورقه جانبيه ثم تتجهز للذهاب إلى المركز التجاري .



هل لاحظت انك كنت تقوم بالبحث عن أشياء معينة فاذا وجدتها (true ) قمت بالبحث عن التي تليها وإذا لم تجدها (false) تقوم بتسجيلها في قائمة المشتريات لديك .



القيم المنطقية والدوال الشرطية

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





العبارة IF



IF condition is true ( إذا كان الشرط صحيحاً )

{

excute this code (قم بتنفيذ هذا الكود)

}

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

سيقوم الـPHP بتنفيذ الكود التي بين { و } فقط اذا كان الشرط صحيحاً .

أما إذا لم يكن صحيحاً فسيقوم بتجاوزه وتنفيذ الكود الذي يليه .

ويمكنك أيضا أن تقوم بجعلها بسطر واحد ولا تستخدم الأقواس بل تكتب الأمر مباشرة :



IF condition is true excute function;



لاحظ أنه لابد من استخدام { و } إذا كان الكود يتكون من عدة أسطر أما إذا كان يتكون من سطر واحد فلا داعي لاستخدامها .



فالمثالين التاليين كلهما صحيحين

مثال(1)

<?

$S=10

IF ($S=10) echo 11;

?>

مثال (2)

<?

$S=10

IF ($S=10){

echo 11;

}

?>



لنتخيل مثلاً أن الجو ممطر وسنقوم بإعطاء المطر متغيراً ونسميه rain ونقوم بإعطاء المظلة اسم متغير آخر ونسميه umbrella وسنقوم بإفتراض أن هناك أمر في الـphp يسمي go out حسناً الآن الكود الذي نريد أن نقوم بكتابته هو :



If $rain = true

{

$umberrlla = true

}

go out();



فائدة هذا الكود هو أن تأمر الـPHP بحمل المظلة ($umberrlla=true) معه إذا كان الجو ممطراً ($rain=true)وإذا لم يكن ممطراً ولم يتحقق الشرط فإنه سيخرج إلى النزهه بدون أي مظلة .



طبعا ليس هناك دالة تقوم بذلك إنما قمنا بذلك من أجل التوضيح للمستخدم هيكلية عمل الدالة بشكل عام .





مقدمه الى القيم المنطقيه (Boolean Values)

القيم المنطقية ترمز إلى الأشياء التي لاتحتمل أكثر من احتمالين وهما إما صح وإما خطأ ، وهي نوع جديد من القيم غير التي كنت نعرفها سابقا (مثل الرقميه والنصيه) .



مثال



<?

$variable=true;

echo “$variable”;

?>





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




المعاملات المنطقية

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



المعاملات : < و >

من المفترض أن تكون متآلفاً مع علامتي الأكبر من والأصغر من في الرياضيات التي تتعلمها في المدرسة مما يجعل فهم هذا الأمثله بسيطاً .



<?

If (6>5)

{

echo “الرقم ستة أكبر من الرقم خمسة ”;

}

Echo “end”;

?>



سيقوم الـPHP في مثالنا هذا بفحص الشرط (6>5) فإذا كان صحيحاً (true) سيقوم بطباعة السطر (الرقم سته اكبر من الرقم خمسه) ثم يقوم بطباعة end ، وإذا لم يكن صحيحاً فسيقوم بتجاهل الكود وطباعة (end) فقط .



يمكننا أيضا استعمالها في المقارنة بين متغير ورقم أو بين متغير وثابت (constant) أو العكس أو المقارنة بين متغيرين .



مثال (1)

<html dir =”rtl”>

<?

$LuckeyNumber = 5;

If ($LuckeyNumber<6)

{

echo (“رقم الحظ أصغر من الرقم ستة ”);

}

?>



مثال (2)

<html dir=”rtl”>

<?

$f=5;

$r=10;

If ($f >$r)

{

echo “المتغير $f أكبر من المتغير $r”;

}

?>




تطبيق عملي :

قم بتشغيل محرر النصوص واكتب الكود التالي واحفظه باسم thegame.php



<html dir = “rtl”>

<body>

<form method =get action=”game.php”>

ماهو الرقم الذي أفكر به الآن والذي هو بين 1 و10 ؟

<input type=”text” name=”number”>

<br>

<br>

<input type =submit>

</form>

</body>

</html>



قم بفتح محرر النصوص لديك من جديد واكتب الكود التالي واحفظه باسم game.php

<html dir=”rtl”>

<body>

<?

$num = rand (1,10);

if ($number>$num)

{

echo “لقد اخترت رقم أكبر من الذي أفكر فيه” ;

Echo “الرقم الذي أفكر فيه هو “;

Echo $num;

Echo “<br>”.“يؤسفنا فعلاً أنك لم تنجح ، نتمنى أن نقول لك في المرات القادمة “ ;

}

if ($number<$num)

{

echo “لقد اخترت رقم أصغر من الذي أفكر فيه” ;

Echo “الرقم الذي كان في مخيلتي هو $num”;

Echo “<br>”. “يؤسفنا فعلاً أنك لم تنجح ، نتمنى أن نقول لك في المرات القادمة “;

}

?>

لقد نجحت

</body>

</html>



شرح التطبيق :



الداله rand



تقوم هذه الدالة باختيار رقم عشوائي من بين رقمين يتم اعطاءها إياها الرقم الاول(x) هو الأصغر والرقم الثاني هو الأكبر(y)

Rand (x,y);

يمكنك حفظ القيمة التي تقوم بإخراجها هذه الدالة في متغير مباشرة



مثال



$Num = rand (5.57);

وهذا يوضح ماقمنا به في الكود



$num=rand(1,10);



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



if ($number>$num)

{

echo “لقد اخترت رقم أكبر من الذي أفكر فيه” ;

Echo “الرقم الذي أفكر فيه هو “;

Echo $num;

Echo “<br>”.“يؤسفنا فعلاً أنك لم تنجح ، نتمنى أن نقول لك في المرات القادمة “ ;

}



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



if ($number<$num)

{

echo “لقد اخترت رقم أصغر من الذي أفكر فيه” ;

Echo “الرقم الذي كان في مخيلتي هو $num”;

Echo “<br>”. “يؤسفنا فعلاً أنك لم تنجح ، نتمنى أن نقول لك في المرات القادمة “;

}



فإذا لم يتطبق الشرطين فإنه يتركهما ويكتب الكلمة (لقد نجحت ) بدون أي كلمات آخرى مثلما كنا نكتب الكلمه (يؤسفنا فعلاً أنك لم تنجح ، نتمنى أن نقول لك في المرات القادمة ) قبل كلمة (لقد نجحت ) ، أتمني أنك قد فهمت جيداً ما أقول .... وتظهر هذه العبارة جلية في الأسطر التالية :



?>

لقد نجحت

</body>

</html>



على هذا نكون قد صنعنا لعبة كاملة تقوم بإخبار المستخدم عند نجاحه او خسارته .



معاملات المساواة : == و ===

لقد قمنا باستخدام علامة المساواة الفردية سابقاً في تخزين قيمة في متغير وهانحن نأخذ نوعاً من علامات المساواة وهو علامة الساواة المزدوجة (==) وعلامة المساواة المضاعفة (=== ) .


لقد كنا نستخدم علامة المساواة الفردية او العادية في تخزين القيم في المتغيرات .

مثال :



<?

$m=12;

?>



ولكن العلامات التي نتكلم عنها الآن تستخدم في تحديد إذا ماكانت قيمة معينة تساوي قيمة اخري .



مثال :



<?

$m=”11”;

$u=11;

If ($m==$u)

{

Echo “القيم متساوية ”;

}

?>



لاحظ أن $m متغير حرفي وان $u متغير رقمي .

إذا كنا نريد ارجاع قيمة إلى متغير نستخدم علامة المساواة العادية (=) وإذا أردنا اختبار متغيرين أو قيمة معينة من أنها متساوية نقوم باختبار القيم بواسطة علامة المساواة المزدوجه (==) .

في الـphp4.01 تم إصدار علامة مساواة جديدة تقوم باختبار القيم ولاتعطي القيمه (true) إلا إذا كانت أنواع القيم متساوية وأنواع البيانات في المتغيرات ايضا متساوية .



مثال (1) :

<?

$m=”11”;

$u=11;

If ($m==$u)

{

Echo “القيم متساوية ”;

}

?>

مثال (2) :

<?

$m=”11”;

$u=11;

If ($m===$u)

{

Echo “القيم متساوية ”;

}

?>



التوضيح

لاحظ أننا في المثال الأول استخدمنا علامة المساواة المزدوجة لاختبار القيم وكانت القيم متساوية في المتغيرين فتم طباعة أن القيم متساوية (مع أن نوع البيانات مختلف ) ولكن في المثال الثاني عندما استخدمنا علامة المساواة المضاعفة لم يتم طباعة أي شي وذلك لان القيم متساوية ولكن نوع البيانات مختلف فالمتغير $m حرفي بينما المتغير $u رقمي .



المعاملات : =! و <>

إن عكس علامة المساواة هي علامة عدم المساواة (!=)



مثال :



<?

If (5!=99) echo “القيم غير متساوية”;

?>



لاحظ أن 5 لاتساوي 99 لذلك فإن الشرط صحيح (true) لذلك قام بطباعة أن القيم غير متساوية .



إن الضد من علامة أكبر من وأصغر من هو علامة الـ(<>) وهو يقوم بارجاع قيمة (true) إذا كانت القيمتين مختلفتين عن بعضهما أي أنه مثل علامة != تقريباً .



مثال :

<?

If (5<>99) echo “القيم غير متساوية”;

?>





تطبيق عملي على علامات المساواة وعدم المساواة



قم بفتح محرر النصوص لديك واكتب الكود التالي :



<html>

<head></head>

<body>

<Form method =get ACTION= “quiz.php”>

ماهو اسم الرجل الذي يسمي بالفاروق ؟

<br><br>

<input type =”radio” name = “man” value=”عمر”>

عمر بن الخطاب رضي الله عنه

<br>

<input type =”radio” name = “man” value=”أبوبكر”>

أبو بكر الصديق رضي الله عنه

<br>

<input type =”radio” name = “man” value=”عثمان”>

عثمان بن عفان رضي الله عنه

<br>

<input type = submit>

</form>

</body>

</html>





احفظها باسم quiz.html ...



قم بفتح محرر النصوص لديك واكتب الكود التالي :

<html dir=”rtl”>

<head></head>

<body>

<?

If ($q==”عمر ”) echo “الإجابة صحيحة”;

If ($q!=”عمر”) echo “الإجابة خاطئة”;

?>



قم بحفظه باسم quiz.php وضعهما في مجلد السيرفر



قم بتشغيل الملف quiz.html





المعاملات المنطقيه (AND,OR,NOT)

إن هذه المعاملات المنطقية تتيح لك بتنفيذ الكود بعد التحقق من مجموعة شروط وأيضا تنفيذ الكود إذا تحقق أكثر من شرط : (AND)

أو تحقق شي معين من بين عده أشياء : (OR)

ويمكنك مثلاً التحقق من عدم صحة شي لكي تقوم بتنفيذ شي آخر : (NOT)



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

ويمكنك أن تقول : إذا كان الجو هادئاً أو لايوجد أمطار فسأقوم بالخروج الى المنتزه .

ويمكنك أيضا أن تقول : إذا لم يكن الجو ممطراً سأقوم بالخروج إلى نزهة .



ولكن عند استخدامك لهذه الدوال عليك مراعاة أن تقوم بجعل هذه الشروط بين قوسين .



المعامل (AND) ونظيره( && )

يمكننا استعمال المعامل (AND) والمعامل (&&) للتحقق من صحة عدة شروط لتنفيذ شي معين



مثال(1)

<?

$w=10;

$g=12;

IF ($w=10 and $g=12) echo (“لقد تحققت جميع الشروط”);

?>



مثال (2)

<?

$w=10;

$g=12;

IF ($w=10 && $g=15) echo (“لقد تحققت جميع الشروط”);

?>

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

لاحظ أننا قمنا بجعل الشروط بين قوسين () لكي يعمل الكود بشكل صحيح :



($w=10 && $g=15)

($w=10 and $g=12)

المعامل (OR) ونظيره ( || )

المعامل OR يقوم بالتحقق من عدة شروط وإذا تحقق أي واحد منها فإنه يقوم بتنفيذ الكود ونظيره (||) الذي يقوم بنفس العمليه .



مثال (1)

<?

$E=100;

$T=8;

IF ($E=14 OR $E=55 OR $E = 10 OR $T=8 ) echo (“لقد تحقق أحد هذه الشروط”);

?>



مثال (2)

<?

$E=100;

$T=458;

IF ($E=14 || $E=55 || $E = 10 || $T=8 ) echo (“لقد تحقق أحد هذه الشروط”);

?>



إذن عندما تحقق واحد من هذه الشروط تم طباعة السطر (لقد تحقق أحد هذه الشروط ) .



ملحوظة قد لاتكون بتلك الأهمية لكن يجب أن تعرف أن الرموز && و || لها الأسبقية والأفضلية على استخدام AND و OR .



المعامل NOT ونظيره ( ! )

في الواقع لايمكنك استخدام NOT أبدا لأنها ليست أصلاً موجودة في لغة PHP لكن يمكنك استخدام المعامل ( ! ) كبديل لها فهو يؤدي نفس وظيفتها وهي القيام بالتأكد من أن هناك قيمة غير صحيحة (FALSE) لكي يتم تنفيذ شي معين .



<?

$F=”الفارس”;

IF !($F==”نعمان”) echo ("أهلاً بك");

?>

في المثال السابق يقوم الـPHP بالتأكد من أن المتغير $F لايحتوي على القيمة الحرفية (نعمان) ويتم ذلك باستخدام المعامل ( ! ) وعندما يتم التأكد من ذلك يقوم بطباعة السطر (أهلاً بك)



ونشير إلى أننا عندما نقوم باختبار متغير بواسطة المعامل ( ! ) فإن الـPHP إذا وجد المتغير فارغاً أو لم يتم انشاؤه يعطيه القيمة صفر وهي FALSE .



مثال

IF (!($R)) echo (10);



استخدام المعاملات <= و >=

من المعاملات المعروفة والمشهورة في الرياضيات هي علامتي أصغر من أو يساوي <= أو أكبر من أو يساوي >= وهي تستخدم بنفس وظيفتها بالـphp وهي معرفة إذا ماكانت قيمة أصغر أو أكبر من أو تساوي قيمة آخري ، وهذه الأمثلة تعطيك مدخلاً أشمل لفهم هذه الدوال :



<?

$t = 15;

If ($t >= 10 ) echo (“ممتاز” . “<br>”);

$t = 5;

If ($t <= 9 ) echo (“جيد جدا”);

?>



تجميع المعاملات



يمكننا في الشرط أن نتحقق من مجموعة من القيم باستخدام مجموعة من المعاملات ، ونقوم بتجميع هذه المجموعات داخل أقواس () مثلما كنا نستخدم سابقاً أكثر من معامل (+ ، - ،/ ،*) باستخدام الأقواس .



وسيبدو ذلك واضحاً وجلياً في مثالنا التالى :



<?

$a=10;

$y=5;

$t =29;

If (($a == 10) or ($a==54) and ($y !=25) and ($t >= 11)) echo "تحققت جميع الشروط";

?>



سيتم طباعة 18 لأنه قيمة تجميع التعبير السابق تكون صحيحة ولو قمنا بشرح المثال فسنقوم برؤية القسم الأول وهو :

($a == 10) or ($a==54)

وطبعاً المتغير يحمل القيمة 10 فسيكون هذا الجزء صحيحاً .



ثم نقوم برؤية الجزء :



($y !=25) and ($t >= 11)

وطبعاً تم التحقق من جميع الشروط وتم طباعة الكلمة (تحققت جميع الشروط ) .



تعدد الشروط ( else if و else )

يمكننا استخدام أكثر من هيكلية للعباره if فهناك مثلاً الهيكلية التالية :

If condtion is true

{

Excute code

}

Else

{

Excute other code

}



وهي تقوم بالتحقق من الشرط فإذا وجدته صحيحاً قامت بتنفيذ الكود الأول وإذا لم تجده صحيحاً ستقوم بتنفيذ الكود الآخر .

مثال

<?

$age=10;

If ($age>18)

{

echo "مرحبا بك في أكبر موقع تجاري إلكتروني";

}

else

{

echo “ممنوع دخول الأطفال الموقع لأنهم لايملكون المال”;

}

?>

ويمكننا أيضا استخدام الهيكلية التالية :

If condtion is true

{

Excute code

}

Elseif

{

Excute other code

}

Else

{

Excute other code

}

وهي تقوم بتطبيق أكثر من شرط فإذا لم يكن أي شرط من الشروط صحيحاً سيتم تنفيذ الكود الذي يقع بعد كلمه else . مثال :

<?

$age=10;

If ($age<=18)

{

echo "مرحبا بك في أكبر موقع تجاري إلكتروني";

}

elseif )$y >= 44(;

{

echo “مافي مشكلة برضه إذا كنت كبير ”;

}

else

{

echo “ممنوع البقية”;

}

?>



تعشيش العبارات الشرطية

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

مثال :

<?

$h=”ahmed”;

$f=45;

If ($h = = “ahmed” )

{ If ( $f= = 45)

{

echo “الاسم والرقم صحيحان”;

}

else

{

echo (“الرقم غير صحيح “ );

} }

else {

echo “اسم تسجيل الدخول غير صحيح “ ;

}

?>

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



تطبيق عملي

سنقوم في هذا التطبيق بصناعة مسابقة بسيطة نستخدم فيها ماتكلمنا عنه سابقاً

1- قم بانشاء ملف Msabqa.html .

2- قم بكتابه الكود التالي فيه :

<html>

<body>



<form method="POST" action="msabqa.php" dir="rtl">

<br> من هو أول الخلفاء الراشدين

<p><br><input type="radio" value="abubaker" name="s">أبوبكر الصديق<br><input type="radio" value="3mar" name="s">عمر

<br><input type="radio" value="3thman" checked name="s">عثمان<br><br><br>



</p>



<p><input type="submit" value="ارسال"> <input type="reset" value="حــــــــــذف"></p>

</form>



</body><html>



قم بفتح ملف وقم بتسميته msabqa.php

<?

<html dir = “rtl”>

If $s == “3mar”{

الإجابه صحيحة

}

else

{

echo “الإجابه خاطئة”;

}

?>






العبارة Switch



Switch (VARIABLE) {

CASE THING1 :

Excute code ;

break;

CASE THING2 :

Excute code ;

break;

Default;

Excute code ;



}



تقوم العبارة بنفس عملية العبارة if ولكن بهيكلية أسهل ومحببة أكثر وتتيح لك اختبار قيمة متغير وإجراء أكثر من اختبار عليه .



break;

تقوم بالخروج من عباره معينه مثل switch و if والذهاب الى الأوامر والعبارات التي بعدها .

EXIT;

تقوم بعملية الخروج من الكود نهائياً ولاتطبق أي أوامر بعدها ، وفي الأمثله التوضيحية التالية ستجد أن break; تخرج من العبارة فقط (Statement) بينما الـexit; تقوم بالخروج من كامل الكود (code).



مثال :

<?

$s=10;

if ($s=10) {

echo “number=10”;

exit;

}

elseif ($s<11) {

echo “number is less than 11”

{

echo “hello”;

?>



مثال :

<?

$s=10;

if ($s=10) {

echo “number=10”;

break;

}

elseif ($s<11) {

echo “number is less than 11”

{

echo “Hello”;

?>




Defualt;

إذا لم تصلح جميع الحالات (Cases) في العبارة (Switch) فسيتم تنفيذ الأوامر التي تقع بعد هذه الكلمة وهي تؤدي نفس عمل else تقريباً في العباره if .



مثال ( 1)

<?

$g= “ahmed”;

Switch ($g) {

Case “ahmed”:

Echo “مسموح “;

Break ;

Case “khaled “ :

Echo “ممنوع “ ;

Break ;

Case “salem“ :

Echo “ممنوع “ ;

Break ;

Case “Mohmed “ :

Echo “مسموح “ ;

Break ;

Default ;

Echo “لقد ادخلت اسم غير صالح”;

}

?>



مثال (2)

Switch ($g) {

Case $g>50:

Echo “كبير “;

Break ;

Case 40 :

Echo “لاباس “ ;

Break ;

Case ($g<15) :

Echo “أطفال ممنوع “ ;

Break ;

Case 30 :

Echo “مسموح “ ;

Break ;

}

لاحظ أننا عند اختبارنا لنصوص نحتاج الى علامتي تنصيص مزدوجة وعند الارقام فاننا لانحتاج الي ذلك .



تطبيق عملي

قم بفتح محرر النصوص لديك واكتب الكود التالي واحفظه باسم age.html



<html>

<form method=post action=”age.php”>

كم عمرك ؟

<br>

<input type=”text” name = “g”>

<input type=submit value=”ارسال”>

</form>

</html>

قم بفتح محرر النصوص لديك واكتب الكود التالي واحفظه باسم age.php



<?

Switch ($g) {

Case $g>50:

Echo “كبير “;

Break ;

Case 40 :

Echo “لاباس “ ;

Break ;

Case ($g<15) :

Echo “أطفال ممنوع “ ;

Break ;

Case 30 :

Echo “مسموح “ ;

Break ;

}

?>





الشرح

تقوم العبارة Switch باختبار قيمة متغير ما ويمكنك إجراء أكثر من افتراض عليه ويجب عليك كتابة الكلمة break; لكي تقوم بإيقاف تنفيذ العبارة switch فمثلاً لو قمت بكتابة الكود التالي :

<?

$g=40

Switch ($g) {

Case $g<50:

Echo “1 “;



Case 40 :

Echo “2“ ;

}

?>



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


التخلص من وسوم الـ html

إذا قمت بوضع مربع نص وأردت من المستخدم كتابة شي فيه فإنه يستطيع ادخال أي شي ولنفترض أنه كتب في مربع النص كالتالى :

I am <b>ahmed</b> …

فسيقوم المتصفح بعرضها بعد معالجتها كالتالى :

I am ahmed ….

ولنقم بتطبيق عملي على ذلك

قم بفتح محرر النصوص واكتب الكود التالي واحفظه باسم htmlch.html

<html dir="rtl">

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

أدخل اسمك الكريم

<br>

<input type="text" name = "fname">

<input type=submit value="ارسال">

</form>

</html>

قم بفتح محرر النصوص واكتب الكود التالي واحفظه باسم html.php

<?

Echo “هذا هو الشكل الطبيعي للعبارة عند طباعتها ”;

Echo “<br>” . $fname;

?>

قم بوضع الملفات في مجلد السيرفر ثم قم بتشغيل الملف htmlch.html واكتب في مربع النص أي شي وضعه بين وسوم html



مثال :

I am <b><i>alfareees</b></i>



ستجد أنه قدتم التعامل مع الوسوم كـ html وليس كنص عادي ولكي تعرضها كنص عادي فإنك تقوم باستخدام الدالة

HtmlSpecialChars();

حيث أنها ستقوم بمعاملة كود الـhtml كنص عادي وطبيعي تماماً .

إذاً نقوم بتعديل ملف الـhtml.php ليصبح كالتالى :



<?

$fname = HtmlSpecialChars($fname);

Echo “هذا هو الشكل بعد استخدام الدالة ”;

Echo “<br>” . $fname;

?>

moulay
08-05-2008, 18:31
الدرس السادس
==================================
التكرارت والمصفوفات

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



في الواقع قد يكون لديك يومياً شي تفعله بشكل مستمر مثل الإفطار في الصباح الباكر والنوم مساء ، انك تستمر على هذا الروتين دائماً .... نحن نسمي هذا الشي في لغة البرمجه التكرار .



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



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

إن دمج ميزة التكرارات مع المصفوفات يساعدك على توفير عدد الأسطر للكود ويساعدك على صنع أشياء عجيبة في أقل عدد ممكن من الأسطر .



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

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

إن أول دالة نقوم بأخذها في البداية هي الدالة while



التكرار while

لقد قمنا بأخذ التكرار while لأنه بسيط جداً وصيغه هذا التكرار هي :

While (condition شرط (

{

code

}

مثال :

<?

$d =10 ;

while ($d<15)

{

echo “$d <br>”;

$d++;

}

?>

سيقوم الـPHP أولا بإعطاء المتغير $d القيمة 10 ثم يقوم بعد ببدء التكرار while فإذا كان الشرط صحيحاً (وهو أن المتغير أصغر من الرقم 15) فإنه يقوم بتنفيذ الكود الذي بين الأقواس وعمل هذا الكود أن يقوم بطباعة المتغير ثم يقوم بإضافة واحد على القيمة الموجودة في المتغير $d ثم بعد ذلك سيتم اختبار الشرط مرة ثانية فإذا كان صحيحاً فسيتم نفس العملية حتي يكون الشرط غير صحيح فيتوقف عندها التكرار ويتم إكمال الكود التي تقع بعد الاقواس .



إذا لم تقم بوضع حد للتكرار فلن يتوقف التكرار وقد يكون لانهائي ....

مثال :

<?

$d =10 ;

while ($d<15)

{

echo “$d <br>”;

}

?>

سيتم طباعة الرقم 10 ولن يتوقف التكرار لأن الشرط صحيح دائماً وليس هناك مايوقفه بينما في الكود السابق استطعنا إيقاف الكود بسبب أننا كنا نضيف واحد على القيمة الموجودة في المتغير وكلما يتم اعادة اختبار الكود كل ما تتغير القيمة حتي يصبح الشرط غير صحيح بسبب أن $d أكبر من 15 .



التكرار do - while

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

do

code

while (conditionشرط );

مثال :

<?

$f=15 ;

do

{

echo “$f”;

$f ++

}

while () ;



سيقوم التكرار بتنفيذ السطر الموجود بين القوسين أولا ثم يقوم بتنفيذ بإختبار الشرط فإذا كان الشرط صحيحاً قام بإعادة العملية الموجودة بين القوسين وهي إضافة واحد على المتغير $f وهكذا حتي يكون الشرط غير صحيح فيتم التوقف .. لاحظ أننا في التكرار الأول قمنا باختبار الشرط قبل صناعة أي عمل بينما في التكرار الثاني قمنا بتنفيذ الكود أولا ثم قمنا بإجراء الاختبار .



التكرار FOR

يختلف هذا التكرار عن سابقيه لكن وظيفته هي نفس وظيفتهما وهي تكرار الأوامر عند حصول شي معين



الصيغة :
For (counter عداد ; test value اختبار القيمة ; set counter اداء عمليه على العداد )

{

code شفرة

}

مثال :

<?

For ($u = 18 ; $u>10 ; $u--)

{

echo $u;

}

?>



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



كأننا نقول للـphp بشكل عامي أن يقوم في البداية بإعطاء المتغير $u القيمة 18 وقبل ان يقوم بتنفيذ الكود عليه أن يقوم بتحليل الشرط فإذا كان الشرط صحيحاً فإنه يقوم بإنقاص واحد من المتغير $u ويتم تنفيذ الكود حتي يصبح المتغير$u قيمته 9 فيقوم الـPHP آنذاك بالخروج من التكرار والذهاب الي الكود الذي يلى القوسين .



المصفوفات

لقد قمنا بتعريف المصفوفات سابقاً بشكل بسيط وحان الوقت الآن لنعرفها ونعرف كيفية عملها . المصفوفات عبارة عن متغير وهذا المتغير يحتوي على أكثر من قيمة أو عنصر (element) وكل عنصر له فهرسة (Index) تبدأ هذه الفهرسة من الصفر إذا لم تقم بتحديدها



مثال :

<?

$A[ ] = “alfareees”;

$A[ ] = 13;

?>

في هذا المثال سيقوم الـPHP بإعطاء الفهرسة تلقائياً فسيقوم بوضع الرقم فتصبح المتغير فهرسته كالتالى :

$A[0] = “alfareees”;

$A[1] = 13;

إننا لم نقم بإدخال هذه الأرقام من تلقاء أنفسنا ولكن الـPHP قام بوضعها مع أنه يمكننا أن ندخلها بشكل عادي فمثلاً لو كتبنا :

<?

$A[0]= “alfareees”;

$A[1] = 13;

?>

سيقوم الـPHP بأخذ الفهرسة المعتمدة ولن يضع أي فهرسة أخري يمكننا أيضا أن نكتب أي فهرسة ولانعتمد على الترتيب في الارقام .



مثال :

<?

$A[10 ] = “alfareees”;

$A[ 25] = 13;

?>

هل لاحظت أيضا أننا لم نقم بتعريف نوع متغيرات المصفوفة وقام الـPHP بتعريفها تلقائياً بدلاً منا فمرة استخدمنا قيمة حرفية ومرة استخدمنا رقماُ ورغم ذلك فلم يقم الـPHP بعمل أي اعتراض إضافة إلى ذلك فإن الـPHP يقوم بتحديد عدد عناصر المصفوفة تلقائياً فهو يعرف مثلاً من المثال السابق أن عدد عناصر المصفوفة الكلي هو عنصرين .

يمنحنا الـPHP ميزة أخري وهي عدم التقيد بالأرقام في الفهرسة فمثلاً يمكننا استخدام حروف عادية .



مثال :

<?

$A[“a” ] = “alfareees”;

$A[“b” ] = 13;

?>



لاحظ أننا استخدمنا القيم الحرفية ولم يعترض الPHPJ بتاتاً ويمكننا طباعة أي عنصر من عناصر المصفوفة بكل بساطة .



مثال :

<?

$r [“aa”] = “ahmed ali”;

$r [1] = 13273;

$r [20] = 13273;

echo $r[aa];

echo $r[20];

echo $r["aa"];

?>



لا فرق بين أن نكتب النص الحرفي (aa) بين علامتي تنصيص عند الطباعه وعند كتابته بدون علامات تنصيص ... سيقوم الـPHP بمعرفة ذلك تلقائياً .



يمكننا تعريف المصفوفات أيضا بطريقة أخري



$variable = array (elements) ;



مثال :

<?

$t =array (“ahmed”, “ali”, “salem”, “alfarsi”);

echo $t [0];

?>

يقوم الـPHP بإعطاء كل عنصر من عناصر المصفوفة رقم فهرسة فتصبح كالتالى :
[فقط الأعضاء المسجلين والمفعلين يمكنهم رؤية الوصلات]

[فقط الأعضاء المسجلين والمفعلين يمكنهم رؤية الوصلات]



مثال :
$r [ss]= “لمياء”;

لاحظ أننا قمنا بتغيير القيمة من (ahmed) الى (لمياء) ....طريقة بسيطة أليس كذلك : )



قراءه المصفوفات واستخراج القيم

تكلمنا سابقا عن التكرار For

يمكننا استخراج عناصر مصفوفة وطباعتها في بساطة وتوفير وقت عن طريق التكرارات



لنفرض أن لديك هذه المصفوفة :

<?

$people =array (“ahmed”, “ali”, “salem”, “alfarsi”);

?>



واردت أن تطبع أسماء جميع الاشخاص المتواجدين فيها

أولاً نحن نعرف أن المصفوفة إذا لم نقم بتعريف رقم فهرسة لها فإن الـPHP يقوم ببداية فهرستها من الصفر وعلى ذلك فان رقم العنصر الأول 0 ورقم العنصر الرابع 3 ... على ذلك يمكننا بكل بساطه كتابة الكود التالي الذي يقوم بطباعة المصفوفة كالتالى :

<?

$people =array (“ahmed”, “ali”, “salem”, “alfarsi”);

echo “$people[0]. <br>”;

echo “$people[1]. <br>”;

echo “$people[2]. <br>”;

echo “$people[3]. <br>”;

?>



لنفرض أن لديك ثلاثين أو ثلاثة آلاف اسم في مصفوفة ألن تبدو هذه الطريقة متعبة قليلا !!!

هناك طريقة أخري وهي عن طريق التكرارات .

لنفرض أننا أردنا كتابة تكرار يقوم بطباعة الارقام من واحد الى عشرة فإننا نستطيع كتابة التكرار بالشكل التالى :

<?

For ($I=1;$I<11;$I++)

{

Echo "$I <br>";

}

?>







والآن لنقل أننا نريد طباعة الأربعة عناصر في المصفوفة كل ماعلينا هو إجراء عملية بسيطة على الكود لكي يتم ذلك :

<?

$people =array ("ahmed", "ali", "salem", "alfarsi");



For ($I=0;$I<4;$I++)

{

Echo "$people[$I] <br>";

}

?>



لاحظ أننا بدأنا العداد بالقيمة صفر ثم اشترطنا أن يكون أقل من 4 لأن آخر عنصر في المصفوفة رقم فهرسته 3 ثم قمنا بجعله يزداد بقيمة 1 لأننا نريد طباعة جميع عناصر المصفوفة وقمنا بوضع رقم العداد في خانة الفهرسة وعلى ذلك سيتم في كل تكرار طباع عنصر المصفوفة الذي فهرسته تساوي رقم العداد .



لقد تكلمنا سابقاً في درس النماذج عن إخراج القيم من قائمة على شكل مصفوفة .



مثال :

<form action = “array.php” method = post>

ما هو مشروبك المفضل ؟

<br>

<select name = “a[]” multiple>

<option>شاي</option>

<option>قهوة</option>

<option>كابتشينو</option>

<option>توت</option>

<option>برتقال</option>

</select>

<br>

<input type=submit value = “لذيذ” >

</form>

في ملف الـarray.php اكتب :

<html>

لقد قمت باختيار التالى :

<?

For ($I=0;$I<4;$I++)

{

Echo "$a[$I] <br>";

}

?>

</html>



لقد عرضنا في القائمة خمسة عناصر ... لاحظ أننا وضعنا في اسم المتغير للقائمة قوسين [ ] لكي يتعرف الـhtml على أنه سيتم تخزين البيانات تلقائياً بعد ذلك قام الـPHP بفهرسة العناصر التي تم إرسالها من قبل العميل سواء كانت ثلاثة أو أربعة ولكنها بالطبع لن تزيد على خمسة .... على ذلك سيكون آخر رقم تنتهي به المصفوفة هو 4 .




أتوقع أنك الآن بدأت تحب المصفوفات .... يمكننا صناعة القائمة عن طريق المصفوفة أيضاً ....



مثال :
<form action = “list.php” method = post>

ما هو مشروبك المفضل ؟

<br>

<select name = “s” >

<?

$shrab =array(“شاي”,”قهوة”,”كابتشينو”,”توت”,”برتقال”);

For ($k=0;$k<4;$k++)

{

echo “<option>”.$shrab[$k].”</option>”;

}

?>

</select>

</form>



عند اختيار المستخدم للقيمة سيتم وضعها في المتغير $s يمكنك مراجعة درس النماذج لكي تفعل ذلك ، هذا المثال يقوم بصناعة مصفوفة للمشروبات ثم يقوم بإخراجها في قائمة مما يوفر علينا الوقت في كتابة الكود فلو كان لديك مثلا حوالى مئة دولة فيمكنك مثلا وضعها في مصفوفة وبعد ذلك بناء القائمة التي سوف تقوم ببناء القائمة التي ستحتوي على هذه الدول عن طريق المصفوفات والتكرارات .



قم بحفظ التغييرات في ملف إمتداده php وقم بكتابة الملف list.php اعتمادا على معلوماتك السابقة في درس النماذج .



دوال المصفوفات



الدالة key

لنفرض أن لدينا مصفوفة مكونة من عنصرين :

مثال :
$s= array (“على”,”محمد”);

الآن لنضف إليها هذه السطور

<?

$s= array (“على”,”محمد”);

$t=key ($s);

echo $t;

?>

يقوم الأمر key بإيجاد رقم الفهرسه (index) العنصر النشط حالياً .... وهو الرقم صفر حيث أننا لم نضع فهرسة وهذه هي الفهرسة التي وضعها الـPHP تلقائياً عندما لم نضع فهرسة ... قد تحيرك كلمة النشط لكن ستعرف أننا نستطيع التجول بين عناصر المصفوفة لاحقاً .



قد يكون رقم الفهرسة حروف أو كلمات



مثال :
<?

$s= array (“ع”=>“على”,”م”=>”محمد”);

$t=key ($s);

echo $t;

?>





الدالة current()

تقوم الدالة current بإيجاد القيمة لعنصر المصفوفة الحالى (index value) .

مثال :
<?

$s= array (“ع”=>“على”,”م”=>”محمد”);

$p=current ($s);

echo $p;

?>

في المثال السابق قمنا بإيجاد القيمة الحالية للعنصر النشط .... لاحظ أننا أوجدنا بالأمر key رقم الفهرسة بينما أوجدنا بالأمر current القيمة للعنصر المفهرس .



كيف يمكننا تنشيط العناصر الاخري للمصفوفه ؟!

يمكننا ذلك عن طريق الدالتين next() و prev اللتان تقومان بالتجول بين عناصر المصفوفة ..... لنفرض أن لدينا مصفوفة تتكون من ثلاثة عناصر

مثال :
<?

$s= array (“ع”=>“على”,”م”=>”محمد”,”ا”=>”احمد”);

echo key($s).”<br>”;

echo current($s) .”<br>”;

?>

لقد قمنا في هذا المثال بطباعة قيمة رقم الفهرسة للعنصر الحالى وقيمته ( اقصد برقم الفهرسة الحرف(ع) واقصد بالقيمة (على) .... لنقم الآن بالتجول بين عناصر المصفوفة ولنر نتيجة الطباعة .



مثال :
<?

$s= array (“ع”=>“على”,”م”=>”محمد”,”ا”=>”احمد”);

next($s);

echo key($s).”<br>”;

echo current($s) .”<br>”;

?>



<?

$s= array (“ع”=>“على”,”م”=>”محمد”,”ا”=>”احمد”);

next($s);

next($s);

echo key($s).”<br>”;

echo current($s) .”<br>”;

?>

لاحظ أننا كتبنا الدالة next() قبل أن نقوم بالإنتقال لكي يتم تنشيط العنصر الثاني في أول مثال ولتنشيط العنصر الثالث في ثالث مثال (ولاحظ أننا كتبنا next() مرتين ) .



يمكننا الرجوع لتنشيط العنصر السابق بوضع الدالة prev() فمثلاً يمكننا تعديل المثال التالى :

<?

$s= array (“ع”=>“على”,”م”=>”محمد”,”ا”=>”احمد”);

next($s);

next($s);

prev($s);

echo key($s).”<br>”;

echo current($s) .”<br>”;

?>

فسيقوم الـPHP في هذه الحاله طباعة العنصر الثاني وليس الثالث لأنه تم التراجع خطوه عن طريق prev()



ماذا سيحصل إذا قمنا بإضافة عنصر على مصفوفة غير محدودة الفهرسة ؟!

لنفرض أن لدينا مصفوفة وأضفنا إليها عنصر غير محدد الفهرسة . مثل :

<?

$s= array (12=>“على”,5=>”محمد”,44=>”احمد”);

$s[ ]= “هشام”;

Next($s);

Next($s);

Next($s);

Echo key ($s).”<br>”;

Echo current( $s ).”<br>”;

?>



سيقوم الـPHP ببساطة بالبحث عن أكبر رقم فهرسة وبعد ذلك يبدأ بإعطاء الفهرسة تسلسلاً بعده فإذا كانت أرقام الفهرسة حروفاً بدأ من الصفر في اعطاء الرقم .. ولاحظ في هذا المثال بأنه قام بإعطاء العنصر الرقم 45 لأن أكبر عنصر في المصفوفة هو 44 وعلى ذلك قام بإعطاء الأرقام تسلسلاً بعد هذا الرقم .



الدالة List و Each

لنفرض أنك قد قمت بصنع مصفوفة غير مفهرسة بالترتيب

مثال :
<?

$s= array (12=>“على”,5=>”محمد”,44=>”احمد”);

?>

على ذلك دعنا نخبرك بخبر سار وهو أنك تستطيع أن تجعل حياتك مع PHP أسهل مع حياتك مع نفسك !

While (list(ارقام الفهرسة Index,Element valueقيمة العنصر )=each (array)

تستطيع بواسطة هذه الدالتين وعن طريق التكرار while استخراج جميع العناصر الموجودة في المصفوفة

While (list($e,$r) = each ($s))

{

echo “<br> $e<br> $r”;

}

أولاً أنت تقوم بتسمية متغيرين واحد منهما لرقم الفهرسة ($e) والثاني للعنصر ($r) ويمكننا تسميتهما بأي اسم وفي حالة ما إذا أردنا عرض العنصر فقط أو معرفة العنصر فقط فيمكننا حذف ($e) ولكننا لانحذف الفاصلة

While (list(,$r) = each ($s))

{

echo “<br> $e<br> $r”;

}

لنعد الى المثال الذي فيه رقم الفهرسة والعنصر ... سيقوم التكرار بوضع رقم الفهرسة (الذي قد يكون نصياً) في المتغير $e وسيضع قيمة العنصر الذي رقم الفهرسة له هو $e في المتغير $r ثم سيقوم بطباعة العناصر حتي ينتهي منها جميعها ...

ملاحظة مهمة : إذا لم تقم بتعريف فهرسة للمصفوفة (حروف أو أرقام أيا كان) فسيتم استخدام العناصر عندما يطلب التكرار الفهارس .

مثال :
<?

$e=array("fsda","terhfgfd","tewr");

While (list ($I,$V)=each($e))

{

echo "<br>$e[$I]";

}

?>



لاحظ مع Hننا طلبنا طباعة الفهرسة (index) إلا أنه تم أخذ العناصر(elements) بدلاً من الفهرسة



يمكننا بواسطة هذه الدالة صناعة أشياء مفيده وكمثال لذلك لنفرض أن لدينا مصفوفة أرقام هواتف ونريد أن نخرج هذه المصفوفة على جدول html فسنستطيع صناعة هذا الجدول عن طريق التكرار السابق بكل سهولة .

مثال :
<table align='center' dir = "rtl" border="1" width="100%" cellspacing="0" bordercolorlight="#000000" bordercolordark="#000000" bordercolor="#000000">

<tr>

<td align='center'>الاسم</td>

<td align='center'>رقم التلفون</td>

</tr>

<?

$s = array (658=>"عادل" ,456546=>"سالم" , 465873);

While (list($e,$r) = each ($s))

{

echo "<tr><td align='center'>". $r . "</td><td align='center'>" .$e . "</td></tr>";

}

?>

</table>

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



يمكنك أيضا معرفة عدد العناصر في مصفوفة معينة إذا كنت تريد معرفة عددها وذلك بالطريقة التالية :

<?

$s= array (12=>“على”,5=>”محمد”,44=>”احمد”);

$S=0;

While (list($E,$r) = each ($s))

{

$S++;

}

ECHO “عدد عناصر المصفوفه ” . $S++;

?>



فرز المصفوفات

هناك العديد من الدوال التي يوفرها لنا الـPHP لفرز المصفوفات . نحن سنأخذ نظرة عن الخمسة دوال الأكثر استخداماً :



الدالة Sort()

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



Sort (ArrayName);





إذا قمنا بإنشاء مصفوفة بالشكل التالى :

$NaNo=array (“ali”,“salem”,“hythem”,“Khaled”,“Ammar”,“Hesham”( ;

فإذا أردنا فرزها عن طريق الدالة sort() فإننا نقوم باستخدامها كالتالى :

<?

$NaNo=array (“ali”,“salem”,“hythem”,“Khaled”,“Ammar”,“Hesham”( ;

sort($NaNo);

While (list($e,$r) = each ($NaNo))

{

echo “<br> $e<br> $r”;

}

?>



لاحظ أنه عند تنفيذك للمثال ستجد أن الـPHP قام بالفرز اعتماداً على الأحرف الكبيرة أولاً ثم قام بالفرز بعدها اعتماداً على الأحرف الصغيرة .



الدالة Arsort()

هذه الدالة تعمل نفس عملية الدالة sort() ولكن هناك اختلاف بسيط فمثلاً لو كتبنا المصفوفه كالتالى :

$NaNo=array ( “ad”=>”ahmed”, “kh”=> “khaled”);

وأردنا فرزها وطباعة الفهارس والقيم كما في المثال التالى :

<?

$NaNo=array ( “ad”=>”ahmed”, “kh”=> “khaled”);

sort($NaNo);

While (list($e,$r) = each ($NaNo))

{

echo “<br> $e<br> $r”;

}

?>

قارن ناتج المثال السابق مع هذا المثال :

<?

$NaNo=array ( “ad”=>”ahmed”, “kh”=> “khaled”);

asort($NaNo);

While (list($e,$r) = each ($NaNo))

{

echo “<br> $e<br> $r”;

}

?>

اعتقد انك قد عرفت الفرق ففي المثال الاول قامت الدالة sort باستبدال الحروف بأرقام في الفهرسة أما في المثال الثاني فقد تم وضع الحروف كما هي وتم فرزها كما تفعل الدالة sort في الفرز .

باختصار لايوجد فرق بين sort و asort إلا في أن الدالة sort تستبدل فهرسة الحروف بأرقام .



الدالة Rsort() و arsort

تقوم بنفس عمل sort و asort ولكن بشكل عكسي جرب الأمثلة التالية :

مثال :

<?

$NaNo=array ( “ad”=>”ahmed”, “kh”=> “khaled”);

rsort($NaNo);

While (list($e,$r) = each ($NaNo))

{

echo “<br> $e<br> $r”;

}

?>



مثال :
<?

$NaNo=array ( “ad”=>”ahmed”, “kh”=> “khaled”);

arsort($NaNo);

While (list($e,$r) = each ($NaNo))

{

echo “<br> $e<br> $r”;

}

?>

ستجد أن الدالة rsort تقوم بنفس عملية الدالة sort ولكن بشكل عكسي

أيضاً الدالة arsort تقوم بنفس عملية asort ولكن بشكل عكسي .

يمكنك استعمال كل هذه الدوال في الفرز مع الحروف العربية ( إذا كان السيرفر يدعم اللغة العربية )

قم بتطبيق المثال التالى :

RSORT()

<?

$NaNo=array ( "ad"=>"سالم", "kh"=> "احمد");

rsort($NaNo);

While (list($e,$r) = each ($NaNo))

{

echo "<br> $e<br> $r";

}

?>

<br>--------<br>

ARSORT()

<?

$NaNo=array ( "ad"=>"احمد", "kh"=> "أحمد");

arsort($NaNo);

While (list($e,$r) = each ($NaNo))

{

echo "<br> $e<br> $r";

}

?>

<br>--------<br>

ASORT()

<?

$NaNo=array ( "ad"=>"هاشم", "kh"=> "جمال");

asort($NaNo);

While (list($e,$r) = each ($NaNo))

{

echo "<br> $e<br> $r";

}

?>

<br>--------<br>

SORT()

<?

$NaNo=array ( "ad"=>"هاشم", "kh"=> "جمال");

sort($NaNo);

While (list($e,$r) = each ($NaNo))

{

echo "<br> $e<br> $r";

}

?>

الدالة ksort

تكلمنا سابقاً عن طريقة فرز المصفوفات ولكن نريد أن نلفت نظرك أننا كنا نعتمد على العنصر في الفرز (element) ولكن هذه الدالة تقوم بالاعتماد على رقم الفهرسه في الفرز (index)

مثال : sort

<br>--------<br>

asort()

<?

$NaNo=array ( "ad"=>"هاشم", "kh"=> "جمال");

asort($NaNo);

While (list($e,$r) = each ($NaNo))

{

echo "<br> $e<br> $r";

}

?>

<br>--------<br>

ksort()

<?

$NaNo=array ( "ad"=>"هاشم", "kh"=> "جمال");

ksort($NaNo);

While (list($e,$r) = each ($NaNo))

{

echo "<br> $e<br> $r";

}

?>

لقد اعتمد الـphp على index ولم يعتمد على الـelement في الفرز .



دوال المصفوفات الإضافيه

هناك الكثير من الدوال التي يمنحنا إياها الـPHP للتعامل مع المصفوفات والتي لايكفي الوقت لذكرها الآن سنقوم بشرح أهم دالتين والمستخدمة بكثره وهي array_push() و array_pop()



لنفرض أننا قمنا بإنشاء مصفوفة بالشكل التالى :

<?

$saher[ 5]=”salem”;

$saher[ 85]=”khaled”;

$saher[ 35]=”mohmed”;

$saher[ 19]=”hajeer”;

?>

وأردنا أن نضيف عنصر جديد لها فقمنا بالتالى :

<?

$saher[ 5]=”salem”;

$saher[ 85]=”khaled”;

$saher[ 35]=”mohmed”;

$saher[ 19]=”hajeer”;

$saher[ ]=”Alfarees”;

?>



انظر إلى العنصر الأخير الذي سيعطيه الـPHP رقم الفهرسة (index) وسيكون رقم فهرسته هو 86 .

نريد أن نلفت نظرك بأننا نستطيع عمل إضافة لعنصر على المصفوفة بطريقة أخري وهي عن طريق الدالة array_push() كالتالى :



array_push (ArrayNameاسم المصفوفه,Elemnt1, Elemnt2, Elemnt3,…..)

نضع في القسم الأول من الدالة اسم المصفوفة التي نريد إضافة العنصر لها ونضع في القسم الثاني عنصر واحد أو أكثر وهي التي سيتم إضافتها للمصفوفة .

مثال :

<?

$saher[ 5]=”salem”;

$saher[ 85]=”khaled”;

$saher[ 35]=”mohmed”;

$saher[ 19]=”hajeer”;

array_push ($saher,Alfarees)

?>

مثال :

<?

$saher[ 5]=”salem”;

$saher[ 85]=”khaled”;

$saher[ 35]=”mohmed”;

$saher[ 19]=”hajeer”;

array_push ($saher,Alfarees,salem,sameer,thamer)

?>



ولو أردنا حذف مثلاً عنصر من المصفوفة فإننا نقوم بتعريف المصفوفة من جديد أو يمكننا استخدام الدالة array_pop التي تقوم بحذف آخر عنصر من المصفوفة والتي تتطلب فقط اسم المصفوفة



Array_pop(ArrayName اسم المصفوفه)



مثال :

<?

$saher[ 5]=”salem”;

$saher[ 85]=”khaled”;

$saher[ 35]=”mohmed”;

$saher[ 19]=”hajeer”;

array_pop($saher)

?>

سيتم حذف العنصر hajeer من المصفوفة ولن يكون في المصفوفة غير ثلاث عناصر .



Implode و Explode

تقوم هذه الدالتين باقتصاص قيمة معينة من مصفوفة أو نصوص وتقوم بإضافة قيمة معينة على مصفوفة أو نصوص .



الدالة Implode

تقوم بإضافة قيمة على بين عناصر المصفوفة .



مثال :

<?

$stng =array ("ahmed", "salem", "ali", "alfarsi");

$r =implode ("H",$stng);

echo $r;

?>





الدالة explode

تقوم بحذف قيمة من مصفوفة وذلك لايعني حذف عناصر من المصفوفة .



مثال :

<?

$stng =array ("ahmed", "salem", "ali", "alfarsi");

$r =implode ("-",$stng);

echo $r;

$r= explode ("-",$stng);

echo $r;

?>



[فقط الأعضاء المسجلين والمفعلين يمكنهم رؤية الوصلات] و [فقط الأعضاء المسجلين والمفعلين يمكنهم رؤية الوصلات]

هذه ليست متغيرات بل مصفوفات ، نعم هذه مصفوفات ولكن في ماذا نستخدمها ولماذا ؟

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

عندما تصل البيانات محفوظة في متغيرات إلى صفحة الـPHP فإنه يقوم بتعريفها تلقائياً ويمكنك طباعة المتغيرات وقيمها مباشرة من غير تعريف .... ولكن هذه الميزة في الـPHP يمكن إلغاؤها عن طريق الملف PHP.INI وذلك بإغلاق ميزة register_globals

وذلك بوضع off بدلا من on



الوضع الافتراضي لها هو on ولكن تستطيع إغلاقها وقد تكون مستاجراً عند مزود خدمة ويب وسيط فيقوم بإغلاق هذه الميزة من باب الحماية ليس إلا .... لاتقلق يمكنك الحصول على البيانات فهي ما زالت موجودة ولكن يجب عليك أن تقوم بإستخدام هذه المصفوفتين لكي تستخرج البيانات .



لنفرض أنك اشتركت عند مزود ويب وكان قد أغلق ميزة (register_globals) حسناً لنفرض أنك قد صنعت نموذجاً يستخدم مربع نص ويحفظ قيمته في متغير اسمه Dorrah ثم بعد ذلك يقوم بإرسال هذه القيمة باستخدام الأسلوب GET إذاً سيكون جزء من الكود في الصفحة الأولى والتي تحتوي على النموذج كالتالى

<form method =get action = “try.php”>

ماهو اسم الطفل الذي استيقظ به العالم الاسلامي من غفلته قبل عده شهور !!

<br>

<input type=text name = “Dorrah”>

<br>

في الملف الثاني(try.php) سنقوم بكتابة الجزء الذي سيقوم بطباعة القيمة كالتالى

<?

Echo [فقط الأعضاء المسجلين والمفعلين يمكنهم رؤية الوصلات][“Dorrah”];

?>

لاحظ أننا لم نستخدم $ ولكن إذا أردنا الإحتفاظ بقيمة المتغير في متغير آخر فيمكننا ذلك بشكل عادي كالتالى :

<?

$Dorrah= [فقط الأعضاء المسجلين والمفعلين يمكنهم رؤية الوصلات][“Dorrah”];

?>



طريقه بسيطة .... أليس كذلك ولكن .... لنفترض أن مزود خدمة الويب لديك حريص جداً ولذلك فقد ألغي أيضا ميزة استقبال هذه القيم في المصفوفات .... يمكنه ذلك في ملف الـphp.ini في اعدادات الـtrack_vars الذي يقوم بمنع السيرفر من استخدام هذه المصفوفات (هذه الميزة يمكن إلغاؤها في php4 ) .... على ذلك انصحك بإرسال رسال تذمر وشكوي إلى مزود الخدمة لديك .. تعلن فيها أن الأمر اصبح لايحتمل .





مصفوفه متعدده الابعاد

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



يمكننا كتابة مصفوفة متداخلة كالتالى :

<?

$mon= array (1=>array ("sharkeh al-jafali",154786) ,2 => array ("salem almazen",1257) );

while (list($personnum) =each ($mon))

{

echo ("<br>$personnum<br>");



while (list(,$phone)=each ($mon[$personnum]))

{

echo ("$phone");

}

}

?>



الشرح

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

الآن لدينا مصفوفة تتكون من رقمين للفهرسة هذين الرقمين كل واحد منهما عنصره عبارة عن مصفوفة هذه المصفوفة تحتوي على عنصرين ( ولنتناسي أنهما يحتويان على أرقام فهرسة ) وهما اسم شخص ورقم هاتفه .

echo

في أول خطوة :

while (list($personnum) =each ($mon))

{

echo (“<br>$personnum”);

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



في الخطوة الثانية :

while (list(,$phone)=each ($mon[$personnum]))

{

echo ("$phone");

}

نقوم بإخبار الـPHP بطباعة العناصر الذي تحتويها المصفوفة التى تم طباعة رقم فهرستها ، ولاحظ (,$phone) أنها تشير إلى عناصر مصفوفة وليس فهارسها لأننا تجاهلنا فهارس المصفوفة الداخلية .

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




تطبيق عملي

افتح محرر النصوص لديك واكتب الكود التالي :

<?

Echo "<form method =post action = 'exam2.php' " ;

$boy=array ("أحمد" , "خالد", "سعد","حسن");

while (list(,$Name) = each ($boy))

{

echo "ماهي السنة الدراسية لـ $Name ؟";

Echo "<select name = 'school[]'>

<option>اول ثانوي</option>

<option>ثاني ثانوي</option>

<option>ثالث ثانوي</option>

</select>";

echo "<br><br>";

echo "<input type =hidden name =boy[] value ='$Name'>";

}

echo "<input type =submit ></form>";

?>

احفظ الكود باسم exam.php

افتح محرر النصوص واكتب الكود التالي واحفظه في ملف باسم exam2.php

<html dir = "rtl">

<?

While (list($I,$V)=each($school))

{

$friendschool[] = $school[$I].$boy[$I];

}

asort ($friendschool);

While (list ($I,$V)=each($friendschool))

{

echo "<br>$boy[$I]"." ".$school[$I];

}

?>

قم بتشغيله بعد نقله لمجلد السيرفر



الشرح

الذي قمنا به في المثال السابق هو أننا قمنا بإنشاء مصفوفة لعده أشخاص ($boy) ونريد أن نعرف مرحلهم الدراسية في الثانوية فأنشأنا لكل طالب قائمة منسدلة بواسطة التكرار (list-each) بصناعة قوائم منسدلة وحقول مخفية يتم تخزين قيم الحقول (التي تحتوي على أسماء الأشخاص) في المصفوفة ($boy) وسيتم تخزين نتائج كل القوائم في مصفوفة ($school) وبعد أن يختار المستخدم الإجابات التي تناسبه وارسال البيانات سيتم استقبال المصفوفة التي فيها نتائج القوائم المنسدلة ($school) واستقبال المصفوفة التي فيها أسماء الأشخاص ($boy) ومن ثم يتم إنشاء مصفوفة جديدة باسم $friendschool[] ويؤخذ منها معلومات المصفوفتين ويتم دمجها فيها ومن ثم يتم بتكرار آخر طباعة عناصر المصفوفتين $boy و$school .



تكرار foreach

هذا التكرار هو من الأشياء الجديدة في الـphp4 وهو يساعدك على معرفة عناصر مصفوفة معينة أو طباعة محتوياتها .

Foreach ($ArrayName As $ArrayItem)

{

code شفره

}

مثال :

<?

$T= array (a=>”ahmed “ , b => “basem”, c=>”car”)



Foreach ($T As $A => $r)

{

echo $A .”-----”. $r;

}

?>



الدالة count

تقوم بحساب عدد العناصر الموجودة في المصفوفة



مثال :

<?

$c=array("a","b","c");

$v=count($c);

echo $v;

?>
-------