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

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


moulay
08-05-2008, 18:36
الدرس التاسع

=====================================


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

كما رأينا في الدروس السابقة ، فإن الـPHP يوفر رقم عظيم من المميزات عن الـhtml لبناء مواقع الويب ، من الأشياء الأساسيه التي لم نتكلم عنها حتي الآن هي الموثوقية (أو الاستقرار ) وهو بالمعني الصحيح والصريح :



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



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



بمصطلح آخر يمكننا أن نقول أن الـHTTP فاقدة لحالتها (stateless) أي أنها لاتعرف أي أن أمر طلب الصفحة ينتهي عند انتهاء الطلب ، فهي عندما تقوم بنقل بيانات صفحة من السيرفر الى المستخدم فهي تعرف من هو المستخدم الذي يطلب البيانات وعلى أي نافذه سيتم نقل البيانات وعند انتهاء ذلك فان كل هذا الموضوع ينتهي وإذا عاد المستخدم فطلب صفحة أخري فإنها لاتعرف إن كان هو نفس المستخدم أو لا !


إن القدرة على الحفاظ على وجود البيانات ليست وسيلة أو ميزة او قوة مقتصرة على الـPHP فقط .


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


التميز الحقيقي في قوة الفهم للـPHP ، يتطلب منا مفهومية جيدة في كيفيه استعمال الـPHP في التفاعل مع المستخدم والمتصفح الذي يستخدمه لكي نتغلب على نقاط الضعف التي في الـhttp .


هذا هو موضوعنا لهذا اليوم والذي سنتكلم فيه عن :


1 - الـHTTP والـ html ومحدودية قدراتهم ، وكيف يستطيع الـPHP التغلب علي القصور فيهم .

2 - الاحتفاظ بالمعلومات التي نريد أن نستخدمها بين طلب لصفحتين مختلفيتن .

3 - مكنكة الحفاظ على البيانات .

4 - الكعكات (cookies) وكيفية استخدامها .

5 - PHP4 والـ native session – المكنكة الداخلية للحفاظ على وجودية البيانات .


هذا الدرس مفيد بشكل ظاهري لمن هو جديد على انشاء مواقع متفاعلة متوسطة – كبيرة الحجم بواسطة الـPHP ..

إنه يحتوي على الكثير من بعض الأمثله التي تفيدك .


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


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


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


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


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


في بروتوكول الـhtml والـhttp لانستطيع معرفة إذا ما كان الشخص عندما يطلب صفحة ما هو نفسه عندما يذهب إلى الصفحة الثانية إذ أن المستخدم عندما يطلب صفحة ما (request) من السيرفر فإن السيرفر يقوم بمعرفة من أي مكان بالعالم يتكلم هذا الشخص ويقوم بارسال استجابه إليه باعطاءه الصفحة التي كان يطلبها (response) ولكن بعد ذلك فإن السيرفر لا يعرف إذا كان هذا الشخص هو نفسه الذي يقوم بطلب الصفحه الثانية أو الثالثة في السيرفر .



هنا تأتي ميزة الـPHP وغيره من لغات برمجة الانترنت لصناعة ميكانيكية إبقاء تفاعل مستمر بين المستخدم والسيرفر عن طريق الـsession و الـcookie ، ولكي لا نعقد الموضوع دعونا نتكلم عن ذلك عملياً فذلك أفضل لفهم الموضوع من الثرثرة التي لا فائدة منها .



استخدام الحقول المخفيه

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



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

<p dir="rtl" align="center">ادخل اسمك الكريم </p>

<form method="POST" action="quiz2.php">

<hr>

<input type="text" name="name" size="20"><br>

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

</form>

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



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

<html dir ="rtl">

<?

If (isset($name)) {

Echo "مرحبا بك يا" . $name ;

Echo '

<br>

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

<input type="hidden" name = "thename" value = "’.$name.’">"

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

<p dir="rtl"><input type="radio" value="أبوبكر الصديق" name="khlifa">أبوبكر

الصديق .</p>

<p dir="rtl"><input type="radio" value="عمر بن الخطاب" checked name="khlifa">عمر

بن الخطاب</p>

<p dir="rtl">من هو الفاروق ؟</p>

<p dir="rtl"><input type="radio" name="faroq" value="عمر بن الخطاب">عمر بن

الخطاب</p>

<p dir="rtl"><input type="radio" name="faroq" value="سالم" checked>سالم بن

عامر</p>

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

</form>' ;

}

else

{

echo "غير مصرح لك بدخول هذه الصفحة" ;

}

?>

احفظها باسم quiz2.php



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

<?

If ((isset($thename)) && (isset($khlifa)) && (isset($faroq)))

{

echo 'لقد انتهت المسابقه يا '. $thename ;

$range=0;

$co = 0;

if ($khlifa =="أبوبكر الصديق") {

$range=$range+10;

$co = $co +1;

}

if ($faroq =="عمر بن الخطاب")

{

$range=$range+10;

$co=$co+1;

}

if ( $range < 10)

{

echo "ليس هناك أي إجابة صحيحة";

}

else

{

echo "<br>"."عدد الاسئلة التي أجبت عليها =" . $co ;

echo "<br>" . "الدرجة التي حصلت عليها " . $range ;

}

}

?>

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




قمت في هذا المثال بمحاولة صنع مكنكة تواصل للبيانات ، بمعني أنني أحاول أن أقوم بالاختفاظ بالبيانات عبر الثلاث صفحات بشكل متواصل ، لاحظ أنني كنت اختبر في quiz2 و quiz3 باختبار المتغيرات قبل طباعة أي شي فقد يقومالشرح المستخدم مثلاً بالاحتفاظ بالصفحة التي وصل إليها في المفضلة ثم يقوم باكمال المسابقة في وقت آخر ولكني لا اريد ذلك بل أريد ان أجعل وقتها محدوداً (طبعاً هذا الكلام سيحصل إذا كانت المسابقة طويلة) لذلك فإنني في كل عند الانتقال من صفحة إلى صفحة اقوم باختبار إن كانت جميع هذه القيم موجودة ولاحظ أنني كنت اجتفظ دوماً بقيم المتغيرات في متغيرات جديدة في حقول مخفية وكلما كان عدد المعلومات أكبر في كل مره كان عدد الحقول المخفية أكثر ، إن لهذه الطريقة أيضا مشاكلها فقد يفتح المستخدم كود الـhtml ويقوم بتفحص كيفية ملاحقته عبر المسابقة وقد يصنع هو الكود في وقت لاحق لكي يستطيع اكمال المسابقة بهذه الخدعة الماكرة ... لذلك يفضل أن لا تقوم بذلك وتقوم بجعل المسألة السابقة اكثر تعقيداً باستخدام الـregular expression بمحاولة تلغيم البيانات بواسطته ومن ثم فك هذا التلغيم في الصفحات التي تصل اليها البيانات .



ارسال بيانات بواسطة query strings

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



قم بعمل صفحة وسمها ask.php وقم بكتابة الكود التالى فيها :



<?

If (isset($ask)) {

If ($ask == login) {

Echo "تم تسجيل الدخول إلى الصفحة";

}

}

if (!isset($ask)) {

echo "لم يتم تسجيل الدخول إلى الصفحة" . “<br>”;

Echo "<A HREF=$PHP_SELF?ask=login>اضغط هنا ليتم تسجيل دخولك </a><br>";

}

?>

قم بتجربة هذا المثال على موقع يدعم PHP على نظام تشغيل لينوكس إذا لم يعمل بشكل جيد على الوندوز



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



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



1 - جعل لكل مستخدم الألوان الخاصة التي يري فيها صفحتك ( أي أن تجعل للمستخدم مثلاً إعدادات الألوان الخاصة لرؤية موقعك ) .

2 - جعل مفتاح للمستخدم لكي يستطيع به التحكم في بياناته الخاصة عند زياراته لموقعك في مرات اخري.



الكوكيز مفيد للاستخدام في الأشياء البسيطة والغير خطيرة ، لكنه الآن يستخدم بشكل سئ ، مثل استخدامه مثلاً في معرفة معلومات عن المستخدم بدون علم منه ، أو تخزين كميات كبيرة من البيانات فيه والتي من الأجدر أن يتم حفظها في ملف على السيرفر .

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

عندما يكون فقط لأشياء بسيطة لاضرر منها عند عدم السماح بالكوكيز بجهاز العميل .





بدايتك مع الكيوكيز

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

الكوكيز عبارة عن قطعة صغيرة من البيانات التي تستخدم لتخزين اسم متغير وقيمته مع معلومات حول الموقع التي أتت منه وتاريخ انتهاءها .



الكوكيز عباره عن تقنية للتخزين من جهة العميل (client-side storage) تتخزن في ملفات في جهاز العميل



يتم العبور إلى هذه الكوكيز ومسحها من المكان التي ارسلت منه .



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



عندما يتم طلب الصفحة في مرة آخري يقوم المستعرض بارسال البيانات التي تم إنشاؤها سابقاً عند طلب الصفحه .

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



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



يقوم السيرفر بإرسال الكوكيز عبر الـHTTP Headers الذي يتم إرساله قبل أي مخرج من مخرجات الـhtml

والمستعرض أيضا يقوم بإرسال الكوكيز عبر الـHTTP Header بالإضافه إلى أن المستعرض يتعرف على من سيقوم بإرسال الكوكيز فلو كانت الكوكيز مثلاً مرسلة من قبل الموقع [فقط الأعضاء المسجلين والمفعلين يمكنهم رؤية الوصلات] ([فقط الأعضاء المسجلين والمفعلين يمكنهم رؤية الوصلات]) فإنه لن يقوم بإرسالها إلى موقع [فقط الأعضاء المسجلين والمفعلين يمكنهم رؤية الوصلات] ([فقط الأعضاء المسجلين والمفعلين يمكنهم رؤية الوصلات]) .



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

قبل أن نقوم بوضع كود بسيط سنقوم الآن بتعريف كيفية تخزين الكوكيز وكيفية قراءتها :

كون الـPHP لغة حديثه لعمل سكربتات ويب فإنها تأتي بدعم كامل للكوكيز بواسطة الدالة setcookie() باستثناء أنك عند استعمالها يجب استعمالها قبل طباعة أي مخرجات html .



تاخذ الدالة setcookie() ثلاث معاملات ، الثلاثة الأولى هي الأهم والأمثل استخداماً وهي بالترتيب :



v قيمة حرفية يتم تخزينها كاسم للمتغير

v قيمة حرفية يتم تخزينها كقيمة لذلك المتغير

v Unix timestamp الذي يقوم بالإشارة إلى تاريخ إنتهاء الكوكيز

Unix timestamp عبارة عن رقم صحيح لا يحتوي على فواصل عشرية يقوم بحساب الثواني من منتصف ليلة 01/01/1970 . وإذا كنا نريد مثلاً أن نقوم بمسح الكوكيز بعد ساعة من تخزينه فإننا نقوم باستعمال الدالة time() التي تقوم بحساب الـtimestamp ثم نضيف عليه الوقت الذي نريده وفي حالتنا الساعه تساوي 3600 ثانية وعلى ذلك سنقوم بإضافة ناتج الدالة time على 3600 لكي يتم مسح الكوكيز بعد ساعة واحدة !



الثلاث العوامل الأخري التي يتم ستخدامها أيضا في الكوكيز ولكنها نادرة الاستخدام ولن نناقشها في موضوعنا هذا هي :

ü المسار الذي يتم إرسال الكوكيز إليه فلو تم فتح نفس الصفحة من نفس الموقع ولكن من مسار اخر ( مثلاً المسار كان pag\url\one وتم تغييره إلى page\url\two فان المستعرض لن يقوم بارسال البيانات إلي الصفحة لأنه تم تحديد المسار الذي سيتم ارسال الكوكيز اليه )

ü الدومين الذي سيتم إرسال البيانات إليه وهو مفيد في حالة ما إذا كان هناك أكثر من دومين تريد ارسال الكوكيز اليه

ü متغير من نوع integer يتم الإشارة إليه بـ secure يتم في حالة استخدام عمليات تشفير بالـ SSL



العبور الى الكوكيز بسيط جداً فالمتغير الذي يتم ارساله يتم تخزينه ضمن المتغيرات العامة (global) وعندئذ فإنه لو كان لدينا كوكيز اسمه ahmed فإن قيمته توضع مباشرة في متغير اسمه $ahmed !!



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



إما أن نقوم بإخبار السيرفر بوقت قديم :

<?

Set cookie (“ahmed” , “0”, time()-999);

?>



وإما القيام بمسح الكوكيز بكتابة اسمه فقط :

<?

Setcookie (“ahmed”);

?>



مثال لتخزين وقراءة كوكيز

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

<?

If ($thename) setcookie ("rname", $thename, time()+3600);

Echo '<form method="post">

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

<input type="submit" value="تسجيل">

</form>';

echo "قيمه المتغير الذي لديك". " ". $thename ."<br><br>";

echo "قيمة الكوكيز =" . $rname ;

?>



الشرح

عند تشغيل الصفحه لاول مره

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

ويتم طباعة قيمة المتغير إذا كان هناك أي متغير تم ارساله باسم $thename ويتم فحص قيمة الكوكيز $rname وطباعتها وبالطبع لا يوجد حتي الآن أي كوكيز .

المرحلة الثانية

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

المرحلة الثالثة

في هذه المرة سيكون الكوكيز موجوداً فسيتم ارساله على هيئة متغير ويتم ارساله ومن ثم طباعة النموذج وقيمه المتغير $thename وقيمة الكوكيز الذي يوجد بجهازك !
-------

moulay
08-05-2008, 18:37
الدرس العاشر
============================================

بدايتك الى الـsession

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

قبل أن أتكلم عن كيفية استخدام الـSession وإعطاء بعض الأمثلة البسيطة ، سأقوم بالتكلم عن كيفية إعداد الـsession مع الـPHP .



اعدادات الـsession في الـPHP

لكي تستطيع التعامل مع الـsession بشكل جيد يجب عليك أن تتعرف على بعض الإعدادات التي في ملف الـphp.ini

عندما تفتح الملف ستجد قسماً خاصاً فيه بالـsession هناك حوالى 19 إعداد ولكن لن نتطرق إليها كلها بل سنتكلم عن الأساسية والمهمة منها فقط كبداية لنا للتعرف على الـsession وكيفية عمله .



اعداد طريقة التخزين

session.save_handler (files | mm | user)



ستجد هذه العبارة مكتوبة في الملف كالتالى بشكل افتراضي :

session.save_handler = files

وهذا الإعداد يقوم بتحديد طريقة التخزين للـsession وهناك ثلاث حالات للتخزين :



1 - التخزين في ملفات عادية على السيرفر :

session.save_handler = files

2 - التخزين على ذاكرة السيرفر :

session.save_handler = mm

3 - التخزين بطريقة أخري معرفة ومعينة من قبل المستخدم مثل التخزين في قواعد البيانات وهذا ما سوف نقوم بالتفصيل عنه بعد الكلام عن قواعد البيانات :

session.save_handler = user

يجب أن تأخذ في اعتبارك عدد الملفات التي سيقوم الـsession بتخزينها عند استخدامك للأعداد الأول والإفتراضي خاصة عندما يكون عدد الزوار بالمئات أو الآلاف .



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



الطريقة الثالثة قد تكون أكثر الطرق مرونة ، ولكنها معقدة وصعبة جداً ، وهي تعطيك مرونة لتخزين البيانات في أي وسائط مدعومة من قبل الـPHP مثل قواعد بيانات mysql و oracle .



الذي افترضه الآن أنك قمت بوضع قيمة هذه الخاصية إلى files



إعداد مكان التخزين

session.save_path (path/to/directory)

هذه الخاصية مفيدة إذا كنت قد ضبط الإعداد السابق إلى files

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



الإنشاء التلقائي للـsession

session.auto_start (0 | 1)

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

وعلى إفتراض أنك لا تحتاج إلى أن تجعل الـPHP يقوم بعمل session لكل صفحة تلقائياً ومن غير طلب فستقوم بوضع قيمة هذا الإعداد الى (0)





الـSID
عندما يقوم الزائر بزيارة صفحتك فإن الـsession يستطيع تتبع هذا الزائر وعدد المرات التي قام فيه الزائر بالدخول لليوم الواحد ، يقوم الـPHP بعمل SID (session identefier) أو رقم معرف تلقائي بشكل افتراضي عندما تقوم بطلب إنشاء session بالزائر ، وكل رقم معرف يختلف عن الآخر تماماً ، إن رقم المعرف الذي ينشئه الـPHP شبيه للشكل التالى :



fc94ad8b1ee49ef79c713ee98ac1fcc4

هناك طريقتين يستطيع بها الـPHP متابعة الـSID للمستخدم :

1 - عن طريق المتابعة والتخزين بتسلسل في الكوكيز .

2 - عن طريق اتباع رقم المعرف بعنوان الصفحة في الانترنت .



سنأخذ أمثلة عن كلا الطريقتين :


1 - استخدام الكوكيز

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

خذ في اعتبارك أن بعض المتصفحات لا تسمح بأن يزيد حجم الكوكيز عن 5 كيلوبايت .



هناك بعض الإعدادات البسيطة في ملف php.ini التي يجب معرفة معلومات عنها قبل البدء باستخدام الـsession مع الكوكيز :

session.use_cookies (0 | 1)

هذه الخاصية تحدد ماذا كان يمكنك استخدام الكوكيز مع الـsession أو لا وعند وضع القيمة (0) فهذا يمنعك من استخدام الكوكيز مع الـ(session) وأما اذا كانت قيمته (1) فهذا يسمح باستخدام الكوكيز مع الـsession



session.name (Default: PHPSESSID)

هذا الإعداد يقوم بتحديد اسم الكوكيز الذي سيحتفظ برقم المعرف (SID) والإعداد الافتراضي هو PHPSESSID ولن اقوم بتغيير هذا الإعداد لكي تستطيع فهم المثال الذي سأطرحه بعد قليل



session.cookie_lifetime (Default: 0)

يقوم هذا الإعداد بتحديد المدة التي سيبقي فيها الكوكيز الذي يحتفظ بقيمة الـ(SID) والإعداد الافتراضي هو صفر ، أي أنه سيتم مسح الكوكيز تلقائياً بعد اغلاق المستخدم لنافذة المتصفح مباشرة



session.cookie_path (Default: /)

يقوم هذا الإعداد بتحديد مسار دومين يتم تخزين الكوكيز له .. لا تقم بتغيير قيمته ودعه كما هو



session.cookie_domain (Default: null)

يقوم هذا الإعداد بتعريف اسم دومين يتم تخزين الكوكيز لصالحه .. والقيمة الافتراضية هي null ، لا تقم بتغييرها



ضع في اعتبارك انه اذا كانت قيمه الاعداد (session.use_cookies) تساوي واحد فان لا داعي لاستدعاء الدالة set_cookie() لإعداد الكوكيز بل سيتم اعدادها تلقائياً بواسطة الـPHP



2 - الإضافة أوالكتابة إلى عنوان الصفحة
إن إضافة عنوان الـSID إلى عنوان الصفحة يعتبر من الأشياء البشعة جداً رغم أن طريقته سهلة ومفيدة في حالة ما إذا كان الكوكيز غير مدعوم في المتصفح بشكل جيد

مثال :

<a href="configure.php?<?=SID?>">Go to the configuration page</a>

بهذه الطريقة نقوم بإضافة المتغير المرجعي SID الذي سيقوم بإعطاء رقم معرف للمستخدم .



متابعة الـsession

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

سكربت يقوم بانشاء وتسجيل متغير session


<?

session_start();

session_register("zx");

session_register("co");

$zx=10;

$co++;

echo 'مرحبا بك في موقعنا أيها الزائر الكريم '."<br>";



echo "عدد زياراتك لهذه الصفحة=". $co ;

echo "<br>";

echo '<a href="php2.php">الصفحة الثانية</a>';

?>

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

متغير الجلسة هو الـ(session-variable) أو متغير الـsession أو سمه ما شئت .



الشرح
يقوم هذا السكربت في البداية بإنشاء متغير اسمه (zx) ومتغير اسمه (co) وقمنا بإعطاء القيمة (10) للمتغير (zx) وقمنا بزيادة القيمة الموجودة (وهي الصفر) في (co) بواحد وكتبنا مرحبا بك ايها الزائر الكريم في موقعنا ، ثم قلنا له إن عدد زياراتك لهذه الصفحة هي قيمة المتغير( co ) ثم اعطيناه رابط للصفحة الثانية .

في الواقع إن هذه المتغيرات وقيمها يتم الاحتفاظ بها في كوكيز له اسم خاص قمنا بتحديده سابقاً من ملف PHP.ini ، وهذا الكوكيز يحتفظ بقيمة الـSID للـsession .



نحن لا نقوم بإخبار الـPHP أين سيحتفظ بقيمة المتغيرات لأننا بدأنا بكلمة الـ:

session_start();

وعلى هذا فإن الـPHP سيفهم أنه سيقوم بتخزين القيمة في الكوكيز الخاص بالـsession .

قمنا بجعل المتغير co كعداد بسيط لعدد المرات التي سوف نقوم بها يزيارة الصفحة فعند عمل تحديث للصفحة سيتم زيادة العداد بمقدار واحد

$c++;

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

كتابة رقم الـSID

اكتب الآن الكود التالي واحفظه باسم php2.php

<?

session_start();

echo $PHPSESSID ."<br>";

echo $zx;

?>

في هذه الصفحة نقوم بطباعة قيمة الـSID وذلك بطباعة قيمه المتغير $PHPSESSID (الذي هو اسم الكوكيز الخاصة بالـsession ) .

بعد ذلك قمنا في النهاية بطباعة قيمة المتغير $zx لكي ألفت نظرك بأن الكوكيز ما زال يحتفظ بها ولم يفقدها لأننا قد حددنا الإعداد في ملف php.ini الخاص بوقت الكوكيز الـ 3600 أي لمده ساعة ثم بعد تلك الساعة سيتم مسح الكوكيز ولن يمكنك استرجاع قيمة أي متغير :

session.cookie_lifetime = 3600

واضف إلى معلوماتك أنه لا يمكنك قراءة القيم للكوكيز الخاصة بالـsession إلا عن طريق إضافه الأمر

session_start();

يجب أن تبدأ بهذا الأمر دائماً إذا أردت قراءة قيم المتغيرات التي يحتفظ بها الكوكيز الخاص بالـsession .



مسح متغير من الـsession

كل ما عليك فعله هو استخدام هذه الدالة :

session_unregister(variable name);

تقوم بوضع اسم المتغير في مكان الـ(variable name)

مثال :

session_unregister(“brn”);



سيقوم هذا الأمر بمسح المتغير (brn) من الـكوكيز الخاصة بالـ(session)



قراءة قيم المتغيرات في الـكوكيز الخاصة بالـsession

كل ما عليك فعله هو استخدام الدالة :

session_encode();



مثال :

<?

session_start();

session_register("bgcolor");

session_register("name");

session_register("email");

$bgcolor = "#8080ff";

$name = "alfareees almolthem";

$email = "php@php.com";

$e = session_encode();

print "The encoded string is: $e";

?>



بهذا السكربت نكون قد أنهينا درسنا عن مقدمة بسيطة للـsession . هذه مجرد مقدمة ولكي نستطيع أن نتعمق بالـsession فيجب علينا أن نتعلم شيئاً عن قواعد البيانات .
-------

moulay
08-05-2008, 18:37
الدرس الحادي عشر


سيتم التطرق في هذا الدرس بمشيئة الله الى ما يلي :


- عبـاراة الـ if .

- عبـاراة الـ else .

- عبـاراة الـ elseif .

- عبـاراة الـ switch .

- حلقة التكرار while .

- حلقة التكرار for .

- حلقة التكرار do while .



- عبـاراة الـ if :

استخدام الـ if في كتابة السكربات شي أساسي ، وكما في لغات البرمجة الأخرى فإن الـ PHP تتبع نفس الاسلوب في كتابة الـ if ، فيمكن تحديد شرط معين مقترن بالـ if وبالتالي اذا كان الشرط صحيحاً ( true ) فسيتم تنفيذ الاسطر المحددة ، وبتفصيل أكثر يجب وضع الشرط بين قوسين ( ) ، ووضع الاسطر المطلوب تنفيذها بين العلامـات { } ، مع ملاحظة أنه يمكن التخلي عن العلامات { } في حال وجود سطر واحد فقط .



فلنفترض وجود نموذج بريدي ( Mail Fourm ) ، يحتوي على الإسم والبريد والرسالة ، ونرغب في معرفة ما اذا كان المرسل قد ملأ جميع الحقول وبالتالي إرسـال الرسـالة ، او انه لم بفعل ذلك وبالتالي عرض رسـالة ( فضلاً قم بتعبئة البيـانات كاملة ) ، لعمل ذلك نحتاج معرفة أسمـاء المتغيرات في النموذج ، ولذلك فلنفترض أن المتغيرات كالتالي :

( الإسم name$ ) ، ( البريد email$ ) ، ( الرسـالة later$ ) ، ولعمل الشرط الأول ( اذا كان الإسم لم يُدخل فلن يتم ارسـال الرسـالة ) :

<?
if ( $name == "" )
echo "فضلاً قم بتعبئة البيـانات كاملة ";
?>

والمعنى أنه إذا كان المتغير name$ لا يحتوي على أي قيمة ( أي فراغ ) فسيتم تنفيذ السطر التالي وطبـاعة الجملة ، مع ملاحظة أن المطلوب تنفيذه هم سطر واحد فقط ولذلك لم نستخدم { } ، بل في حالة وجود أكثر من سطر يجب استخدامها كالتالي :

<?
if ( $name == "" ) {
echo "فضلاً قم بتعبئة البيـانات كاملة<br> ";
echo "لم تقم بإدخـال الإسم ";
}
?>



- عبـاراة الـ else :

هذه العبـارة تتيح امكانية وجود اجراء ثاني لعدم تحقق الشرط ، ففي مثالنا السابق كان الاجراء طباعة الجملة اذا تحقق الشرط ، ولكن في حالة عدم تحقق الشرط فلن يكون هناك اجراء لتنفيذه ، بل ان الاجراء سيتم تنفيذه اذا تحقق الشرط ومن ثم سيتم اكمال بقية الاسطر ، وفي حالة مثل هذه الحالة يتم استخدام الـ else لوضع اجراء آخر في حالة عدم تحقق الشرط ، وبالمثال يتضح المقال :

<?
if ( $name == "" ) {
echo "فضلاً قم بتعبئة البيـانات كاملة";
}
else
{
echo "تم ارسـال الرسـالة ، شكرا لك";
}
?>

في هذا المثال سيتم طباعة الجملة (فضلاً قم بتعبئة البيـانات كاملة ) اذا تحقق الشرط أن المتغير name$ لا يحتوي على أي قيمة ، وسيتم طباعة الجملة (تم ارسـال الرسـالة ، شكرا لك ) في حالة عدم تحقق الشرط ، أي في حالة وجود قيمة في المتغير name$ ، مع ملاحظة أن هذا المثال يحتوي على شرطين وليس شرط واحد ، فالظاهر هو شرط واحد ( "" == name$ ) ولكن العبـارة else تعتبر شرطاً بحد ذاتها ولو لم يكن هذا الشرط مكتوباً ، وكما هو واضح فمعنى هذا الشرط هو ( إذا كان غير ذلك ) فقم بطباعة الجملة .



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



- عبـاراة الـ elseif :

في العبارة السابقة ذكرنا أنه يوجد شرطين واجرائين ، أحد هذين الشرطين غير مكتوب بل هو مفهوم من ادراج العبـارة else ، وفي حالات كثيرة لا يكفينا مجرد شرطين واجرائين لاتمام بعض السكربات المعقدة ، فلذلك يمكن نستخدم العبـارة elseif مع الـ if لعمل مثل هذه السكربات ، فلو افترضنا أن لدينا عداد لزوار الموقع ونريد اظاهر العداد بحيث يتم قراءته بشكل جيد ، اي بمعني اخر اذا كان عدد الزوار ( 1 ) فسيتم طباعة الجملة ( عدد الزوار : زائر واحد فقط ) واذا كان ( 2 ) فسيتم طباعة الجملة ( عدد الزوار : زائرين ) ... وقس على ذلك ، فعندما يكون عدد الزوار ( 1 ) فسيتم عرض الجملة الأولى فقط وعندما يكون عدد الزوار ( 2 ) فسيتم عرض الجملة الثانية فقط ، وهكذا لبقية الشروط .



بافتراض أن المتغير ( counter$ ) هو عداد الزوار ، فالمثال التالي يبين ما تم شرحه سابقاً :

<?
if ( $counter == 1 ) {
echo " عدد الزوار : زائر واحد فقط ";
}
elseif ( $counter == 2 ) {
echo " عدد الزوار : زائرين ";
}
elseif ( $counter >= 3 && $counter <= 10 ) {
echo "عدد الزوار : $counter زوار";
}
else {
echo "عدد الزوار : $counter زائر";
}
?>

كما هو واضح في المثـال السابق سيتم ما يلي :



الشرط : العداد يساوي 1

الإجراء : طبـاعة ( عدد الزوار : زائر واحد فقط )

الشرط : العداد يساوي 2

الإجراء : طبـاعة ( عدد الزوار : زائرين )

الشرط : العداد أكبر أو يساوي 3 و اصغر أو يسـاوي 10

الإجراء : طبـاعة ( عدد الزوار : ( العداد ) زوار )

الشرط : العداد لا يحقق أي من الشروط

الإجراء : طبـاعة ( عدد الزوار : ( العداد ) زائر )



ملاحظة بسيطة فقط ، وهي على العلامة && التي تعني ( و ) ، وهي من علامات الجمع بين جملتين ، فيجب أن تكون الجملتين صحيحتين لتحقق الشرط .



- عبـاراة الـ switch :

هذه العبـارة قريبة جداً من العبـارة if ، ولكن يمكن استخدام اكثر من شرطرين باسلوب أخر ، غير انه يجب اسناد قيمة معينة للـ case وهي هنا بمثابة الشرط ، لكي يتم تنفيذ الاجراء المحدد لذلك الشرط أو الـ case ، وفي النهاية الأمر يعود الى المصمم وايهما يفضل ، وكما في المثال السابق يمكن كتابة مثال بالـ switch بنفس الطريقة ، والمشكلة الوحيدة هي كما قلنا أنه يجب اسناد قيمة معينة لكل case وبالتالي فإن الشرط الثالث من المثال السابق يجب تفريقه لكل قيمة من ( 3 الى 10 ) ، وهذه العميلة مجهدة لانه يجب كتابة سطر لكل قيمة كما يلي :



القيمة : 3

الـ case : 3

الاجراء : طبـاعة ( عدد الزوار : ( العداد ) زوار )

القيمة : 4

الـ case : 4

الاجراء : طبـاعة ( عدد الزوار : ( العداد ) زوار )

القيمة : 5

الـ case : 5

الاجراء : طبـاعة ( عدد الزوار : ( العداد ) زوار )

......... الخ ...



وفي المثال التالي ساتغاضى عن الشرط الثالث بكامله ، واذكر بقية الشروط والحالات لمجرد فهم طريقة عمل هذه العبـارة :

<?
switch ($counter)
{
case "1";
echo " عدد الزوار : زائر واحد فقط ";
break;
case "2";
echo " عدد الزوار : زائرين ";
break;
default;
echo "عدد الزوار : $counter زائر";
break;
}
?>

استخدمنا في هذه المثال بعض الجمل وتعني ما يلي :

Switch وتكتب في البداية مع ادراج اسم المتغير الذي سيتم عمل الشروط عليه .

Case أي في حالة ( .... ) ويكتب بجانبها الشرط .

Break وتعني ايقاف العملية والخروج من الشرط بعد تنفيذ أحد الإجراءات .

Defaukt وهي تقابل العبـارة else أي بمعنى أنها لأي حالة لم يتم ذكرها في الشروط .



- حلقة التكرار while :

وهي ابسط حلقات التكرار على الأطلاق ، بحيث تاخذ شرط واحد فقط وتبني على تنفيذ ما بين علامات الشروط { } ، والفرق الوحيد بينها وبين الـ if هو انها ستقوم بتنفيذ الاجراءات طالما كان الشرط صحيحاً ، وهذا يعني احتمال تنفيذ الإجراء أكثر من مرة ، وهذ الدالة مفيدة في ادراج الحقول من الجدوال وغيرها من الاستخدامات ، بحيث لو افترضنا وجود جدول معين في قاعد بيانات ونريد ادراجه في صفحة PHP ، فسيكون من اهم خيارات الاستخدام هذه الدالة ، وباذن الله سيتم التطرق لقواعد البيانات في الدروس القادمة ، وفي الوقت الحالي ساذكر مثال بسيط على هذه الدالة لفهم طريقة استخدامها :

<?
$total = 10;
while ( $total <= 50 )
{
echo "العدد أقل من 50<br>";
$total +=10;
}
?>

كير بسيط يمكن معرفة أن الجملة ( العدد أقل من 50 ) سيتم طباعتها 5 مرات ، لان حلقة التكرار while قامت بتنفيذ الاجراء طالما أن الشرط صحيح ، وفي المرة الأولى كان المتغير ( total$ ) يساوي ( 10 ) والشرط صحيح لان الـ ( total$ ) فعلاً اصغر أو يساوي الـ ( 50 ) ، فتم تنفيذ ما بين علامات الشرط ، ومن ذلك زيادة متغير المجموع ( total$ ) بقيمة ( 10 ) ومن ثم الرجوع والمقارنة من جديد ، وفي هذه الحالة صار المتغير ( total$ ) يساوي ( 20 ) وأيضـاً الشرط صحيح وبالتالي الدخول مرة أخرى وتنفيذ الأجراء .... وهكذا حتى يتم الوصول الى أن قيمة الـ ( total$ ) يساوي ( 50 ) وبالتالي الشرط صحيح ، ومن ثم تصبح قيمة الـ ( total$ ) تساوي ( 60 ) وفي هذه الحالة يتم ايقاف تنفيذ الاجراءات لأن الشرط غير صحيح .



- حلقة التكرار for :

يوجد طريقة أسهل للتعامل مع المثال السابق ، فاستخدام حلقة التكرار while كانت القيمة الابتدائية للمتغير ( total$ ) في سطر ، والشرط في سطر والزيـادة على المتغير في سطر أخر ، وبالتالي زيارة في عدد الأسطر عن ما يمكن استخدامه مع حلقة التكرار for ، فالمثـال التالي يبين طريقة أخرى لاستخدام مثـال الـ while بطريقة أسهل :

<?
for ( $total = 10; $total <=50; $total +=10 )
{
echo "العدد أقل من 50<br>";
}
?>

وللتوضيح فان تركيب الـ for هو على الشكل التالي :

for ( القيمة الأفتراضية; الشـرط; مقدار الزيـادة; )

{

الإجراء المطلوب تنفيذه

}



- حلقة التكرار do while :

وهي نسخة أخرى من الـ while والفرق الوحيد بينهما أن التأكد من الشرط وصحته من عدمها يتم بعد تنفيذ الاجراء وليس قبله كما في الـ while وكمثال عليها :

<?
$total = 10;
do
{
echo "العدد أقل من 50<br>";
$total +=10;
}
while ( $total <= 50 );
?>
-------

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


الدوال ( Function ) :

يوجد في PHP العديد من الدوال التي تقوم بوظيفة معينة ( محددة ) كذلك توجد إمكانية إنشاء دوال تؤدي وظيفة خاصة وحديثنا هنا عن هذا النوع من الدوال ( كيفية إنشاء دوال )
الدالة تقوم بتنفيذ شئ معين حيث تأخذ ( متغيرات – معطيات ) ثم تقوم بمعالجة هذه المتغيرات وتخرج قيمة أخرى .

- الشكل العام – التركيب :

Function( المعطيات – المتغيرات – البارامتر ) اسم الدالة

{

هنا يتم كتابة الكود

Return ( المعطيات – المتغيرات – البارامتر ) ;

}



- تعريف الدالة :
لكي نقوم بتعريف دالة نكتب كلمة function بعدها اسم الدالة وبعد الاسم نكتب المعطيات – المتغيرات بين قوسين .

مثال :

<?
Function aa($s)
?>

حيث aa هو اسم الدالة ، وبالتأكيد يمكن أن يكون أي اسم .
(s$) هو ( المتغر – المعطى – البارامتر ) ، أي اسم من هذه كما تحب أن تسميه .
مع ملاحظة عدم وضع فاصلة منقوطة بعد هذا السطر .

بعد ذلك نقوم بكتابة كود الدالة ( عمل الدالة ) بين العلامتين { } ، كما يجب أن ننهي الدالة بكلمة return لإعلام الدالة بأن وظيفتها قد انتهت بالاضافة الى ذكر اسم المتغير المذكور في تعريف الدالة سابقا ..

مثال :

<?
Return($s) ;
?>



- استخدامات الدالة :
يمكن وضع الدالة في أي مكان في شفرة php في أولها أو آخرها بمعنى انه يمكن استدعاء دالة تم تعريفها في أخر الشفرة أو العكس .

- إظهار نتيجة الدالة ( طباعة الدالة ) :
نستخدم الأمر الخاصة بالطباعة echo أو print وبعده طبعا اسم الدالة ..

مثال :

<?
echo aa(5);
print aa(5);
?>

مثال كامل :

<?
// تعريف الدالة
function aa($a)
{
$a=$a*$a*$a*$a;
return($a);
}
// طبـاعة ناتج الدالة عند ادخال الرقم 5 فيها
echo aa(5);
?>

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



نقطة أخرى هي أننا قمنا بتمرير قيمة ثابتة الى الدالة ، ولذلك يمكننا أن نمرر للدالة متغير كما في المثال التالي :

<?
function as($a)
{
$a=$a*$a*$a*3 ;
return($a) ;
}
$z=10 ;
echo as ($z) ;
?>

في هذا المثال تقوم الدالة بضرب العدد في نفسه ثلاث مرات ثم في الرقم 3 ، ونلاحظ أننا مررنا المتغير z$ الى الدالة as وكتبناها جميعها في سطر طباعة نتيجة الدالة بالأمر echo . ولذلك تقوم الدالة في هذا المثال بضرب الرقم 10 في نفسه ثلاث مرات ثم في 3 يكون الناتج 3000 ومن ثم يتم طباعة الناتج ، وبطبيعة الحال كلما غيرنا قيمة المتغير أختلفت نتيجة الدالة .

-------

moulay
08-05-2008, 18:38
الثالث عشر
===========================================

- العمليات الرياضية :

هي نفسها العمليات التي درستها في المرحلة الابتدائية من ( جمع + ، طرح - ، ضرب * ، قسمة / ) والزائد عليهم التي لم تدرسه تقريبا هو باقي القسمة ( % ) ..

مثال شامل على كل العمليات في الـ PHP :

<?
$a = 6;
$b=2;
$c= $a +$b;
// سوف نحصل على ناتج الجمع 8

$c= $a -$b;
// سوف نحصل على ناتج الطرح 4

$c= $a * $b;
// سوف نحصل على ناتج الضرب 12

$c= $a /$b;
// سوف نحصل على ناتج القسمة 3

$a = 7;
$b=2;
$c= $a % $b;
// سوف نحصل على باقي القسمة 1
?>



- عمليات Assignment :

=
احفظ القيمة في المتغير ، بمعنى خزن القيمة 3 في المتغير a$ :

<?
$a = 3;
print $a;
// يطبع 3
?>



=+
إضافة قيمة إلى قيمة في نفس المتغير :

<?
$a = 3;
$a += 3;
print $a;
// يطبع 6
?>

=-
اطرح المقدار واحد من المقدار ثلاثة في المتغير $a

<?
$a = 3;
$a -= 1;
print $a;
// يطبع 2
?>

=*
يضرب القيمة 3 بالقيمة 2 ويكون الناتج مخزن في نفس المتغير :

<?
$a = 3;
$a *= 2;
print $a;
// يطبع الناتج 6
?>

=/
يقسم قيمة على قيمه أخرى :

<?
$a = 6;
$a /= 2;
print $a;
// يطبع ناتج القسمة 3
?>

=.
دمج سلسلة حرفية :

<?
$a = "This is ";
$a .= "a test.";
print $a;
// : يطبع الجملة التالية
// This is a test.
?>



- عوامل الإضافة و الطرح :
لو افترضنا أننا لدينا المتغير $a=3 و أردنا إضافة واحد إليه بحيث يصبح 4 أو طرح واحد منه بحيث يصبح 2 ، لدينا العوامل التالية :

$a++ ارجع قيمة a ثم اضف واحد إليها
++$a اضف واحد إليها ثم ارجع القيمة
$a-- ارجع القيمة ثم اطرح واحد منها
--$a اطرح واحد ثم ارجع القيمة

++value
يتم إضافة واحد إلى الرقم خمسة :

<?
$a = 5;
print ++$a;
// يطبع القيمة 6
?>

value++
يرجع القيمة نفسها وفي استخدام ثاني تزيد القيمة واحد :

<?
$a = 5;
print $a++;
// طباعة الرقم 6
print "<br>";
print $a;
// طباعة الرقم 5
?>

--value
يطرح من القيمة واحد :

<?
$a = 5;
print --$a;
// يطبع الرقم 4
?>

value--
يرجع القيمة نفسها وفي استخدام ثاني يطرح منها واحد :

<?
$a = 5;
print $a--;
// يطبع الرقم 4
print "<br>";
print $a;
// يطبع الرقم 5
?>



- عمليات المقارنة Comparasion Operators :

$a == $b المتغيران متساويان ..
$a ===$b المتغيران متساويان و من نفس النوع ..
$a !=$b المتغير الاول لا يساوي الثاني ..
$a !==$b المتغير الاول لا يساوي الثاني وليس من نفس النوع ..
$a > $b أكبر من ..
$a < $b أصغر من ..
$a >=$b أكبر من او يساوي ..
$a <=$b أصغر من او يساوي ..

== (تساوي)
تساوي القيمة المخزنة في المتغير الأول بالقيمة المخزنة في المتغير الثاني :

<?
$x = 7;
$y = "7";
if ($x == $y) print $x . " تساوي " . $y;
// يطبع 7 تساوي 7
?>

=== ( تساوي ومن نفس النوع )
تساوي القيمة المخزنة في المتغير الأول بالقيمة المخزنة في المتغير الثاني وتكون القيم من نفس النوع ( حرفية – عددية ) :

<?
$x = 7;
$y = 7;
if ($x === $y) print $x . " is identical to " . $y;
// يطبع 7 is identical to 7
?>

!= ( لا تساوي )
إذا كانت القيم المخزنة في المتغيرين غير متساويين :

<?
$x = 8;
$y = 4;
if ($x != $y) print $x . " لا تساوي " . $y;
// يطبع 8 لا تساوي 4
?>

!== ( لا تساوي ولا من نفس النوع )
إذا كانت القيم المخزنة في المتغيرين غير متساويين وليست من نفس النوع :

<?
$x = 8;
$y = 9;
if ($x !== $y) print $x . " iليست من نفس نوع " . $y;
// يطبع 8 ليست من نفس نوع 9
?>

< ( أقل من )
مقارنة بين قيمتين واحدة أقل من الاخرى :

<?
$x = 5;
$y = 9;
if ($x < $y) print $x . " أقل من " . $y;
// يطبع 5 أقل من 9
?>

> ( أكبر من )
مقارنة بين قيمتين واحدة أكبر من الاخرى :

<?
$x = 9 ;
$y = 5;
if ($x > $y) print $x . " اكبر من " . $y;
// يطبع 9 أكبر من 5
?>

<= ( أقل من ويساوي )
مقارنة بين قيمتين واحدة أقل من الاخرى أو مساوية لها :

<?
$x = 5;
$y = 5;
if ($x <= $y) print $x;
// يطبع القيمة 5
?>

>= ( أكبر من ويساوي )
مقارنة بين قيمتين واحدة أكبر من الاخرى و مساوية لها :

<?
$x = 7;
$y = 5;
if ($x >= $y) print $x;
// يطبع القيمة 7
?>



العمليات المنطقية Logical Operations :
لكي تكون قيمة الشرط صحيحة فيجب أن تنطبق القواعد التالية الخاصة بكل عامل منطقي على حدة ، والعوامل هي :
( and ) يجب تحقق الاثنين $a and $b
( or ) يجب تحقق كلاهما او احدهما $a or $b
( Xor ) يجب تحقق احدهما و ليس كلاهما $a xor $b
( ! ) نفي تحقق الشرط نفي لقيمة a !$a

ملاحظة : يمكن كتابة الـ ( and ) بالشكل التالي ( & ) والـ ( or ) بالشكل التالي ( | ) والـ ( Xor ) بالشكل التالي ( ^ ) ..

And ( و )
إذا تحقق الشرطان ، بمعنى المتغير الأول يساوي 7 والمتغير الثاني يساوي 5 نفذ أمر الطباعة واطبع صحيح :

<?
$x = 7;
$y = 5;
if (($x == 7) and ($y == 5)) print "صحيح";
// يتم طباعة صحيح
?>

Or ( أو )
إذا كان أحد الشرطين صحيح أو الاثنين صحيحين نفذ أمر الطباعة :

<?
$x = 7;
$y = 5;
if (($x == 7) or ($y == 8)) print "True";
// True يطبع
?>

Xor
إذا تحقق أحد الشرطين وليس الاثنين معا ينفذ أمر الطباعة :

<?
$x = 7;
$y = 5;
if (($x == 7) xor ($y == 8)) print "True";
// True تحقق شرط واحد فقط فيتم طباعة كلمة
?>

! ( النفي )
إذا كانت جملة الشرط غير صحيحة نفذ أمر الطباعة :

<?
$y = 5;
if (! ($y == 10)) print "True";
يطبع True لأن المتغير القيمة المخزنة فيه غير صحيحة
?>

&&
المعامل && له نفس وظيفة ( and ) لكن الاختلاف في ترتيب تنفيذ أولويات العمليات :

<?
$x = 7;
$y = 5;
if (($x == 7) && ($y == 5)) print "True";
// True يطبع
?>

||
المعامل || له نفس وظيفة ( or ) لكن الاختلاف في ترتيب تنفيذ أولويات العمليات :

<?
$x = 7;
$y = 5;
if (($x == 7) || ($y == 5)) print "True";
// True يطبع
?>
-------

باديس
05-08-2008, 18:57
مشكوووووور والله يعطيك الف عافيه
على المعلومات الهامة
ننتضر المزيد