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

مشاهدة النسخة كاملة : دروس في لغة ال Php (الجزء الثاني 15 درس)



Ghost Rider
, Fri, 16 Mar 2007 16:37:57 +0100
الدرس السادس عشر: متفرقات وتطبيق على المصفوفات

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

متطلبات قبل البدأ :

مراجعة جميع ما سبق تعلمه في لغة PHP
اهداف الدرس:

طرق استخدام المتغيرات من النماذج
النوع المخفي ( HIDDEN ) من انوع النماذج
الداله isset
الداله unset
تطبيق عمليطرق استخدام المتغيرات من النماذج :
تعلمنا في السابق كيف نتحكم في المتغيرات التي تأتي من النماذج, في الحقيقه هي 3 انواع, وتطرقنا الى نوع واحد , وهو البسيط. حيث انك تكتب في الصفحه التي يذهب اليها المتغير اسم المتغير فقط, لكن اليوم سوف نتعلم طريقتان اخرى , غير الاولى, وهي عباره عن مصفوفات حرفيه, نستخدمها للتحكم في المتغيرات, في الحقيقه لا يوجد لهذه الطرق اسماء ولكن شاهدت كتابا يقوم بإعطاء اسماء لها مبسطه ومميزه, ( الاسلوب القصير ) , ( الاسلوب المتوسط ) , ( الاسلوب الطويل ), لنقم بمشاهدتها مع بعضنا البعض:
نموذج ارسال بيانات:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php16/16_1.gif
الان في الصفحه التي نعرف بها البيانات , لدينا 3 طريق لاخذ هذا المتغير , لاحظ التالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php16/16_2.gif
ماهو الفرق بين هذه الطرق الثلاث, واي واحد تقوم بإستخدامه ؟؟ عن نفسي انا شخصيا احبذ استخدام الاسلوب الطويل ويحبذ ان تقوم بالاقرار على استخدام اسلوب واحد من الثلاثه فقط, الفروقات بين الثلاث طرق هو التالي:
الاسلوب القصير : اسهل اسلوب ولكن يقتضي ان يكون خيار register_global على الوضع on في اعدادات اللغه وكل هذا يعتمد على النسخه المستخدمه لديك, وهذا الاسلوب يجعلك تقوم بإخطاء تقوم بجعل موقع سهل الاختراق او غير امن
الاسلوب المتوسط : هذا الخيار جيد ولكن لن يقوم بالعمل الا اذا كانت لغة PHP التي قمت بتنصيبها اعلى من 4.1.0
الاسلوب الطويل : هذا هو افضل اسلوب تقوم بإستخدامه وهو الخيار الوحيد المضمون ان يعمل على اي خادم ( server ) مهما كانت اعدادات اللغه, وهو اكثرها حمايه وامانا, ولكن يحتمل ان يقوم صاحبو لغة PHP بإلغائه على المدى الطويل
ملاحظه: اذا كانت طريقة ارسال النموذج POST فسوف تستخدم الامثله الموجوده بالاعلى , ولكن لو كانت الطريقه GET فقط قم بإستبدال العباره POST بالعباره GET
الداله isset :
تقوم هذه الداله , بالتحقق من ان متغير تم انشاءه ام لا , لاحظ المثال التالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php16/16_3.gif
الداله unset :
تقوم هذه الداله بألغاء متغير موجود, لاحظ المثال التالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php16/16_4.gif
النوع HIDDEN من انوع النماذج :
في بعض الاحيان نريد ان نقوم بإرسال بيانات مخفيه من صفحه الى اخرى, ولا يعلم بوجودها الزائر , مثلا عدد الدرجات التي حصل عليها الى الان, او عنوان ال IP وغيرها , فسوف نستخدم الطريقه التالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php16/16_5.gif
1 - اسم المتغير
2 - القيمه الموضوع بالمتغير
تطبيق عملي :
ماهو التطبيق العملي المناسب, احترت كثيرا في اختياره , ولهذا تأخر صدور الدرس يوما كاملا, ولاننا في دروس مبتدئه ولم نقم بالمرور على قواعد البيانات او حفظ الملفات, فسوف نقوم بعمل تطبيق عملي بسيط, وهو نموذج الاختبار الذي قمنا بعمله سابقا, ولكن سوف نقوم بوضع الاسئله واجاباتها في مصفوفه وانشاء السؤال بطريقه عشوائيه , افتح محرر الاكواد وقم بكتابة التالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php16/16_6.gif
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php16/16_7.gif
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php16/16_8.gif
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php16/16_9.gif
سأشرح لك التطبيق بطريقه سريعه, ولو تعمقت في طريقة الكتابه وقرأت التعليقات, سوف تتمكن من معرفة طريقة عمل البرنامج الصحيحه, لنبدأ.
1 - انشأنا عباره شرطيه, اذا كان المتغير انشأ من قبل فذلك يعني ان المستخدم قد نقر على زر الارسال في النموذج ( جاوب على السؤال ) وارسل المتغير, غير ذلك نقوم بعرض السؤال
2 - نضع 3 اسئله في مصفوفه حرفيه , ثم نقوم بترتيبها عشوائيا واختيار السؤال الاول واجابته في المصفوفه, ونضعه في مصفوفه اخرى رقميه بحيث ان الخانه 0 السؤال والخانة 1 الاجابه , واستخدمنا العباره break لاننا نريد اخذ السؤال الاول واجابته فقط, غير ذلك يخرج من دالة التكرار FOR
3 - انشأنا مدخلين من النوع المخفي ( hidden ) نضع بها السؤال المطروح والاجابه الصحيحه له
4 - اذا قام المستخدم بالاجابه نقوم بعبارت شرطيه التحقق ان المستخدم ادخل الاجابه وانها ارقام وغير ذلك
سؤال على الدرس :
1 - توجد الف طريقه لعمل هذا التطبيق, حاول ان تقوم بعمله بطريقه اخرى بإستخدام المصفوفات ولكن بطريقه اسهل من هنا , ملاحظه ( قمت بإعطائك الطريقه الصعبه لكي تفهم المطلوب جيدا )

Ghost Rider
, Fri, 16 Mar 2007 16:38:56 +0100
برمجة الكائنات نعني بها , الوصول بالبرمجه الى محاكاة الواقعيه, كثير من البرامج التي لا تدعم الكائنات يصعب فهم كودها, ولكن مع هذه الطريقه, يوجد لدينا طريق نحاكي به الواقع, لو فكرت قليلا وسألت نفسك, كيف يمكنني ان اقوم بمحاكاة سيارة , طائره , انسان وغيرها, صدقني سيصعب عليك ذلك من غير هذا المبدأ ولكن اذا استخدمت برمجة الكائنات فيسهل عليك فعل كل شي محاكي للواقع تريده, فمثلا لو قلنا ان لدينا ....

متطلبات قبل البدأ :

لا يوجد
اهداف الدرس:

مقدمه عن برمجة الكائنات ( Object Oriented )
مبدأ التعدديه ( Polymorphism )
مبدأ الوراثه ( Inheritance )
انشاء التصنيفات ( Class ) , الخواص ( Attribute ) , العمليات ( Operations )
مؤسس التصنيف ( Constructer )
استخدام التصنيفاتمقدمه عن برمجة الكائنات ( Object Oriented ) :
برمجة الكائنات نعني بها , الوصول بالبرمجه الى محاكاة الواقعيه, كثير من البرامج التي لا تدعم الكائنات يصعب فهم كودها, ولكن مع هذه الطريقه, يوجد لدينا طريق نحاكي به الواقع, لو فكرت قليلا وسألت نفسك, كيف يمكنني ان اقوم بمحاكاة سيارة , طائره , انسان وغيرها, صدقني سيصعب عليك ذلك من غير هذا المبدأ ولكن اذا استخدمت برمجة الكائنات فيسهل عليك فعل كل شي محاكي للواقع تريده, فمثلا لو قلنا ان لدينا تصنيف ( Class ) اسمه بشر , اكيد ان هذا البشر لديه خواص ( attributes ) فهو ينتمي الى نوع وهو ذكر او انثى, لديه اسم , لديه عمر , لديه لون بشره , لديه طول , لديه وزن وهكذا, ولديه عمليات ( operations ) يقوم بها كالنوم والاستيقاظ, والافطار, تخيل انك تقوم بفعل هذا كله بالبرمجه ؟؟؟ ماهو الاسهل بالنسبه لك الطريقه المعتاده من كتابة الاكواد , او الطريقه الجديده التي سنتعلمها بعد قليل :). وايضا نستطيه استخدام هذا المبدأ للاشياء المبدئيه, كالملفات مثلا , فيوجد لدينا ملف , ولديه اسم ولديه حجم , ولديه نوع وغير ذلك.
كثير من لغات البرمجه الحديثه تدعم مبدأ ( Object Oriented ), وتعتبر التي لا تدعمها ضعيفه, فأصبح كل شي في هذه الايام يعتمد على هذا المبدأ, فهو اسرع , اسهل , اكثر حمايه من الكود العادي, وبعض اللغات يطلب منها ويلزم عليها ان تكون مبنيه على هذا المبدأ. ومن وجهة نظري انا, اعتقد ان البرنامج الذي لا يستخدم هذا المبدأ لن يكون جيدا , ( ليس في كل الحالات ).
من اعظم فوائد مبدأ ( Object Oriented ) دعم والتشجيع على مبدأ ( Encapsulation ) ونعني به ( اخفاء المعلومات ), حيث اننا لا نستطيع التحكم في الخواص او المعاملات الا عن طريق الكائن, ومانسميه بواجهة الكائن. حى لو اردنا تغير نوع او اصلاح او اضافة اي شيئ, فسوف نرجع الى التصنيف الاساسي , ولن تطرق الى تعديل جميع اكوادنا. ويمكننا انشاء اكثر من ( Object ) من هذا التصنيف, حيث كل واحد منهم منفصل عن الاخر, فتخيل لدينا التصنيف الاول ( البشر ) فنستطيع انشاء عدة كائنات منه , واحد اسمه محمد ولديه خواص معينه , والاخر اسمه نوال ولديه خواص ومعاملات اخرى, ولا يعني انهم واحد, فكل واحد منهم منفصل على الاخر, ولديه تحكمات وخواص خاصه به.
مبدأ التعدديه ( Polymorphism ) :
بحثت في كثير من المعجمات والتراجم عن معنى هذه الكلمه بالعربيه ولم اجد, ولكن قرأت كتابا يقول عنها ( Different Classes have different behaviors for the same operations ) ومعنى ذلك باللغه العربيه, ان تصنيفات مختلفه يكون لديها سلوكات مختلفه لنفس العمليات, معادله رياضيه اليس كذلك ؟ لن تستطيع فهمها بسرعه, يجب ان تأخذ عليها امثله كثيره ليصل المبدأ الى العقل وتقوم بإستيعابه, واترك ذلك علي فسأحاول قدر الامكان ان اقوم بتسهيله لك. لنأخذ مثالا على ذلك, لو عندنا تصنيف سياره وتصنيف دراجه هوائيه, فكل منهما لديه خاصية التحرك ولكن في السياره يجب ان تقوم بالتشغيل, ولكن في الدراجه بطريقه اخرى ولا يوجد لدينا تشغيل, ولكن في لغات البرمجه لا يوجد لدينا هذا الواقع ولا تقوم بمحاكاة الواقع 100%100 فلذلك تحتاج اللغه ( polymorphism ) لكي تعرف اي عمليه تقوم بعملها لاي تصنيف. لنقولها بطريقه واقعيه باستخدام اللغه العربيه, الدراجه تحتاج الى تقوم بصيانتها , صبغها , تنظيفها , تلميعها , ونفس الشيئ السياره , ولكن اذا قلت اريد ان انظف, فيوجد بعقلك ماهو الشيئ الذي تريد ان تقوم بتنظيفه هل هو سياره او دراجه, هل وصلت الفكره ؟؟
مبدأ الوراثه ( Inheritance ) :
عملية الوراثه سهله, فأنت على سبيل المثال, ورثت صفة الحواجب العريضه من الاب, و الانف المعتدل من الام وغير ذلك, ولكن لديك اشياء وخواص خاصه بك لا توجد في الاب و الام اليس ذلك صحيحا ؟ نفس الشيئ هنا, لنضرب مثالا على ذلك , لدينا شركة سيارات, تقوم ببيع سيارات على عدة انواع ( رياضيه , عائليه , جيب ) , كل منهم لديهم خواص متماثله , كل سياره لها لون, كل سياره لها 4 عجلات, وغيرها, ولكن كل نوع لديه بعض الخصائص لا توجد في الاخرى, الرياضيه مقعدان فقط, الجيب 7 مقاعد , العائليه 5 مقاعد. في مبدا الكائنات نقوم بعملها كالتالي, ننشيئ تصنيف اسمه سياره, وثلاث تصنيفات اخرى ونجعلها تورث الصفات من التصنيف سياره, هل وضحت الصوره ؟ انظر المثال التالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php17/17_1.gif
انشاء التصنيفات ( Class ) , الخواص ( Attribute ) , العمليات ( Operations ) :
تكلمنا كثيرا في درس اليوم, لنأتي الان الى تطبيقاتنا , ونأخذ امثله حيه لكيفة انشاء التصنيفات والخواص والمعاملات. يمكننا انشاء تصنيفات بإستخدام العباره class لاحظ المثال التالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php17/17_2.gif
تصنيفنا هذا يحتاج الى خواص , لنقم الان بإنشاء خاصيتين , وهي اسم السياره ولونها , ونقوم بإنشاء الخواص بإستخدام العباره var , لاحظ التالي :
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php17/17_3.gif
مؤسس التصنيف ( Constructer ) :
في كل تصنيف نقوم بإنشائه يجب علينا ان نقوم بإنشاء مؤسس لهذا التصنيف ويسمى ( Constructer )وهو نوع خاص من العمليات, وينادى هذا المؤسس في حالة انشاء الكائن وفي العاده يقوم ببدأ خواص الكائن, كجعل الخواص تبدأ من البدايه وغيرها, ويجب ان يكون اسمه بنفس اسم التصنيف, والطريقه هي كالتالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php17/17_4.gif
وايضا نحتاج الى ان ننشئ بعض المعاملات على هذا التصنيف , ونقوم بذلك بإستخدام الدوال التي تعلمناها سابقا, راجع الدرس الحادي عشر: ادراج الملفات والدوال بأنواعها , لاحظ التالي :
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php17/17_5.gif
استخدام التصنيفات :
الان قمنا بإنشاء تصنيف خاص بنا, نريد ان نقوم بإستخدامه, او البدأ بالعمل عليه, كيف نقوم بذلك ؟؟ لاحظ المثال التالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php17/17_6.gif
لاحظ اننا نقوم بإنشاء كائن في كل مره نقوم بإنشاء كائن من التصنيف, ولذلك سوف يكون ناتجنا هو التالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php17/17_7.gif
اعتقد ان درس اليوم طويل جدا , واخذت كميه كبيره من المعلومات, لذلك سوف اقف هنا الان, واكمل المتبقي في الدرس القادم ان شاء الله ولا تنسى انه في حالة صعوبة اي شيئ عليك , راسلني بريديا وسوف يسعدني ان اقوم بالاجابه :)
سؤال على الدرس :
1 - لا يوجد

Ghost Rider
, Fri, 16 Mar 2007 16:39:34 +0100
تعلمنا في السابق , كيفية انشاء تصنيف وتشغيله وانشاء خصائصه وعوامله, الان سنتعلم كيفية استخدام كل جزء من التصنيف لنعطي تحكم اكبر بالتصنيف والتعامل معه بطريقه تساعدنا على الوصول الى ما نريد اليه, عندما انشأنا التصنيف سياره, قامت PHP بنفسها انشاء متغير لنا اسمه $this ومعناه ( هذا ), فلو لاحظنا في تصنيفنا السابق ان لدينا خاصيتان واحده منهما هي $carName اليس ذلك صحيحا ؟

متطلبات قبل البدأ :

مراجعة الدرس السابع عشر: برمجة الكائنات
اهداف الدرس:

استخدام خصائص التصنيفات
استخدام معاملات التصنيفات
الوراثه ( Inheritance )
الوراثه المتعددهاستخدام خصائص التصنيفات :
تعلمنا في السابق , كيفية انشاء تصنيف وتشغيله وانشاء خصائصه وعوامله, الان سنتعلم كيفية استخدام كل جزء من التصنيف لنعطي تحكم اكبر بالتصنيف والتعامل معه بطريقه تساعدنا على الوصول الى ما نريد اليه, عندما انشأنا التصنيف سياره, قامت PHP بنفسها انشاء متغير لنا اسمه $this ومعناه ( هذا ), فلو لاحظنا في تصنيفنا السابق ان لدينا خاصيتان واحده منهما هي $carName اليس ذلك صحيحا ؟ , فلو اردنا استخدام هذا المتغير او اردنا الاشاره عليه فسوف نقوم بالتالي $this->carName , سواءً اردنا استخدامه او اردنا تعيين قيمه اليه , داخل معامل او خارجه. لاحظ معي الكود التالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php18/18_1.gif
في لغة PHP جميع الخصائص التي نقوم بعملها تكون عامه ( public ) , ( تم تغيير ذلك في النسخه رقم 5 من اللغه وسنتطرق اليها لاحقا ) , حيث ان يمكننا استخدامها خارج التصنيف في كل الحالات , فمثلا لاحظ التالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php18/18_2.gif
لاحظ اننا هنا لم نقوم بإستخدام ميزة التصنيفات الرئيسية وهي ( اخفاء المعلومات ) , ويجب ان نقوم بإستخدامها لكي نضمن الحمايه الكامله لبرنامجنا , ولكن هناك طريقة اخرى يمكننا الوصول بها الى اخفاء الملعومات وهي , استخدام المعاملات , فنضع معامل يقوم بتغير قيمة خاصيه , ومعامل يقوم بوضع قيمه في خاصيه وغيرها , لاحظ المثال التالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php18/18_3.gif
1 - معامل يقوم بإرجاع قيمة خاصيه
2 - معامل يقوم بإسناد قيمه الى خاصيه
الان سوف نستخدمه بالطريقه التاليه:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php18/18_4.gif
ويمكننا الان , وضع شروط بحيث ان اللون لا يمكن ان يكون احمر على سبيل المثال, شاهد التالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php18/18_5.gif
استخدام معاملات التصنيفات :
الان , لنرى المعاملات , نفس الطريقه التي تعلمناها قبل قليل , ويجب عليك ان تعرف ان كان المعامل يطبع قيمه سوف تقوم بالتالي:
$x->newColor()
اما اذا كان يرجع قيمه ( اي تستخدم في الاخير العباره return ) فتقوم بالتالي
echo $x->newColor()
او
$y = $x->newColor()
بكل سهوله :) , اليس ذلك صحيحها ؟

الوراثه ( Inheritance ) :
اذا كنت تريد ان تقوم بعمل الوراثه الي تكلمنا عنها في الدرس السابق , سوف تقوم بإستخدام الكلمه المفتاحيه extends وطريقة عملها كالتالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php18/18_6.gif
الان لو اردنا انشاء , كائن من هذا التصنيف , سوف يكون كالتالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php18/18_7.gif
طبعا يمكننا استخدام كل عاومل وخصائص التصنيف الذي نرث منه , ولكن العكس ليس صحيح , فلو قلنا ان ( ب ) يرث التصنيف ( أ ) , فسوف تكون خصائص وعوامل ( أ ) كلها موجوده في ( ب ) , ولكن خصائص ( ب ) غير موجوده في ( أ )

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

Ghost Rider
, Fri, 16 Mar 2007 16:40:28 +0100
ترى كثيرا ان معظم المواقع تجعلك تضع معلومات وتقوم بإرسالها اليهم , سواء اسمك او بريدك او رسالتك , ولكن هل تعتقد انها تمر اليهم من غير فلتره ؟؟؟ متأكد ان جوابك سيكون لا, فالموقع لا يضمن ما يقوم بإدخاله المستخدم , هل هو المطلوب , او مجرد كلام ليس له معنى , اليس كذلك صحيحا ؟ فهنا تأتي فائدة تحرير واالتحكم بالنصوص , وسوف نستعرض اليوم دوال كثيره تجعلك تتحكم بالنصوص لكي تقوي برامجك وتجعلها محميه وقويه.

متطلبات قبل البدأ :

لا يوجد
اهداف الدرس:

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

الدوال chop و ltrim و trim :

تستخدم هذه الدوال لكي نضمن ان المستخدم لي يضع اي فراغات في المدخل , يمكن ان تقول هذا الشيئ غير ضروري , ولكنه ضروري اذا كنت ستحفظ هذه المعلومه في قواعد البيانات او تريد مقارنة النص , فالمسافه محسوبه في النصوص , الداله trim تقوم بألغاء اي مسافات من بداية ونهاية النص, لاحظ المثال التالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php19/19_1.gif
عرفت الطريقه الان ؟ بالنسبه للداله ltrim فهي تقوم بنفس عمل trim ولكن تلغي المسافات من الجزء الايسر , اي من بداية النص , اما الداله chop فتقوم بألغاء المسافه من الجزء الايمين , اي اخر النص

الدالتين printf و sprintf :

تقوم هذه الدالتين بنفس عمل الداله print والفرق بينهما وبين العباره print انها تقوم بطباعة النص بطريقه معينه, لم تفهم ما اعنيه ؟ لنأخذ مثالا , تخيل ان لديك عدد ( 2.258982 ) على سبيل المثال , وتريد ان تطبع هذا العدد ولكن بالطريقه التاليه ( 2.25 ) فسوف تستخدم هذه الدالتين, الاختلاف بين printf و sprintf ان الاولى تقوم بالطباعه ام الثانيه فتقوم بإرجاع النص المعدل. الان لاحظ المثال التالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php19/19_2.gif
والناتج هو نفسه تماما , ولاحظ في الداله printf , ندخل اليها مدخلان , النص و القيمه المستبدله , فتقوم بإستبدال %s ب قيمة $total , ارأيت السهوله ؟ ملاحظه معنى %s هو ( استبدل بالنص او القيمه الثانيه المدخله ). الان لو اردنا ان نطبع العدد هكذا 2.25 سوف نقوم بالتالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php19/19_3.gif
وناتجنا هو التالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php19/19_4.gif
يمكنك ان تدرج اكثر من خاصية تحويل ( % ) في النص , لاحظ المثال التالي
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php19/19_5.gif (http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php19/19_5.gif)
ملاحظه ( كل خواص التحويل تبدأ بي علامة % , ولو احتجت يوما ما الى طباعة هذا الرمز الى المتصفح استخدم الطريقه %% ) , لكي تعرف الخواص الاخرى في التحويل لاحظ المثال الجدول التالي
النوعالمعنىbيترجم على شكل عدد صحيح ويطبع على شكل ثنائي cيترجم على شكل عدد صحيح ويطبع على شكل على حروفdيترجم على شكل عدد صحيح ويطبع على شكل عشريfيترجم على شكل عدد عشري ( double ) ويطبع على شكل عشري ( float )sيترجم على شكل نص ويطبع على شكل نص
الدوال strtoupper و strtolower و ucfirst و ucwords :

الداله strtoupper تقوم بجعل كل الحرووف كبيره ( باللغه الانجليزية ) , اي تقوم بتحويل a الى A وهكذا
الداله strtolower تقوم بجعل كل الحروف صغيره ( باللغه الانجليزية ) اي تقوم بتحويل A الى a وهكذا
الداله ucfirst تقوم بجعل اول حرف من الجمله بالحاله الكبيره
الداله ucwords تقوم بجعل اول حرف من كل كلمه في النص الى الحاله الكبيره
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php19/19_6.gif
والناتج هو
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php19/19_7.gif
جمع وتفصيل النصوص :
في كثير من الاحيان نريد ان نفصل نص عن النص الكلي , لكي نقارن او نتحكم او اي شي اخر , وبعض الاحيان نريد ان نقوم بجمع النصوص مع بضها البعض وسوف نتعلم الان الطرق لعمل ذلك ,

الداله explode و implode و join :

تستخدم الداله explode لفصل النص عن بعضه البعض وتقوم بإرجاع الناتج على شكل مصفوفه , فلو ان المستخدم ادخل بريده الالكتروني , ونريد ان نعرف ماهي الشركه الي يستخدمها سوف نقوم بالتالي :
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php19/19_8.gif
الدالتين implode و join متطابقه تماما , فلو اردنا جمع نص مع بعضه البعض سوف نقوم بعمل التالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php19/19_9.gif

الداله substr:

تستخدم هذه الداله لتعطيك تحكما في نص جزء من نص اكبر بتحديد البدايه والنهايه وتقوم بإرجاع النص المطلوب, فمثلا لو لديك النص ( Hello World ) وتريد ان تأخذ كلمة hello فقط , فسوف تقوم بالتالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php19/19_10.gif
الان لو تلاحظ كيفية عمل الداله فهي كالتالي ( قارن الارقام مع الصوره بالاسفل ) :
1 - النص المراد ان تأخذ جزأ منه
2 - مكان البدايه
3 - مكان النهايه
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php19/19_11.gif
نبدأ النصوص دائما من 0 , وفي مثالنا من 0 الى 5 , نعني به 0 و 1 و 2 و 3 و 4 , لاحظ التالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php19/19_12.gif
لو اردنا الجمله من مكان معين الى النهايه فسوف نضع قيمة البدايه فقط , لاحظ التالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php19/19_13.gif
وسوف ينتج لنا llo world

مقارنة النصوص :
في السابق قلنا اننا لو اردنا ان نقارن سوف نستخدم == او === اليس ذلك صحيحا ؟ هناك طرق اخرى للمقارنه سوف نراها الان ,

الدوال strcmp و strcasecmp :

هذه الدوال تستخدم لمقارنة النصوص , فالداله strcmp تقوم بإعطائنها نصين وتقوم بمقارنتهما , اذا كانو متساوييان سوف ترجع لك القيمه 0 , اما اذا كان الاول اكبر من الثاني سوف ترجع رقم اكبر من الصفر واذا كان اصغر سوف ترجع قيمه اقل من الصفر ( اي بالسالب ) , وهذه الداله حساسه لحالة الاحرف , لاحظ التالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php19/19_14.gif
الداله strcasecmp مطابقه للداله strcmp والفرق ان strcasecmp حساسه لحالة الاحرف

الداله strlen :

تستخدم هذه الداله لمعرفة طول نص معين , وطريقتها كالتالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php19/19_15.gif
مطابقة وبحث وتغيير النصوص :

دوال البحث عن النصوص strstr و strchr و strrchr و stristr :

الدالتين strstr و strchr متطابتقين تماما و حساسه لحالة الاحرف , مع ان الثانيه تستخدم للبحث عن الاحرف ولكن الاولى تؤدي نفس العمل , وهي الافضل والمناسبه دائما , طريقة هذه الداله كالتالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php19/19_16.gif
1 - النص الكلي
2 - الكلمه المراد البحث عنها
اذا وجدت الداله كلمه مطابقه فسوف تقوم بإرجاع الكلمه ثم باقي الجمله , وتهمل ما قبل الكلمه التي عثر عليها , لاحظ ناتج مثالنا بالاعلى
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php19/19_17.gif
بالنسبه للداله stristr فهي مطابقه ل strtsr والفرق هو انها غير حساسة لحالة الاحرف, اما الداله strrchr فهمي ايضا مطابقه والفرق الوحيد هو انه اذا كانت الكلمه مكرره مرتين في الجمله , فسوف تقوم بإرجاع النص من اخر مكان تكررت فيه الجمله, على عكس strstr فهمي تقوم بإرجاع النص من اول مكان تكررت فيه الجمله

دوال تحديد اماكن النص strpos و strrpos :

هذه الدوال مشابه تقريبا الى strstr والفرق ان هذه الدوال تقوم بإرجاع المكان الرقمي للنص , لاحظ المثال التالي,
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php19/19_18.gif
وسوف تقوم هذه الداله بإرجاع الرقم 6 , لان الكلمه world بدأت من الخانه 6 , قم بالعد وقارن :)
الداله strrpos سوف تقوم بأرجاع اخر مكان ظهر به النص على عكس strpos , كما تعلمنا في دوال البحث في الاعلى

دالة تغيير النصوص str_replace :

تقوم هذه الداله str_replace بإيجاد نص وتغييره , وهي مفيده جدا لتتغير السريع , وطريقتها كالتالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php19/19_19.gif
1 - الكلمات التي نريد استبدالها
2 - الكلمات الجديده
3 - الجمله
لاحظ انه بالامكان ان نجعل الكلمات الجديده , والكلمات القديمه , في مصفوفه كل واحده على حده , لكي نقوم بإستبدال اكثر من كلمه , ويمكن ايضا من غير مصفوفه , حيث ان جميع الحالات مسموحه , واصبحت هكذا من نسخة PHP رقم 4.0.5
سؤال على الدرس :
1 - قم بإنشاء نموذج مراسله بريدية , فيه اسم المرسل , البريد , الرساله , وقم بوضع بعض تحكمات النصوص ( على سبيل المثال البريد لا يكون اقل من 3 احرف , الرساله لا تحتوي على كلمات غير لائقه )

Ghost Rider
, Fri, 16 Mar 2007 16:41:03 +0100
تدعم لغة PHP نوعان من التعابير القياسيه , وهي POSIX و PERL , الاول يكون مدمج مع اللغه تلقائيا ولكن الاخر يحتاج الى ان تقوم بتنصيبه ,, لا تقلق فعند استخدامك التنصيب العادي للغة سوف يتم وضع الاثنان معا , يعتبر النوع الاول اسهل في التعلم والطبيق من النواع الثاني , ويتم ترجمته وتشغيله اسرع ,, ولكنه ليس امن كالثاني :)

متطلبات قبل البدأ :

مراجعة الدرس السابع عشر: برمجة الكائنات
اهداف الدرس:

مقدمه عن التعابير القياسيه ( Regular Expressions )
العثور على النصوص بإستخدام التعابير القياسيه
استبدال النصوص بإستخدام التعابير القياسيه
فصل النصوص بإستخدام التعابير القياسيهمقدمه عن التعابير القياسيه ( Regular Expressions ) :
تدعم لغة PHP نوعان من التعابير القياسيه , وهي POSIX و PERL , الاول يكون مدمج مع اللغه تلقائيا ولكن الاخر يحتاج الى ان تقوم بتنصيبه ,, لا تقلق فعند استخدامك التنصيب العادي للغة سوف يتم وضع الاثنان معا , يعتبر النوع الاول اسهل في التعلم والطبيق من النواع الثاني , ويتم ترجمته وتشغيله اسرع ,, ولكنه ليس امن كالثاني :). جميع ما تعلمناه في الدرس السابق كان عباره عن مقانرة نصوص متطابقه او اجزاء من النصوص ولكن ماذا لو احتجنا الى ان نقوم بشيئ اكثر من ذلك ,, فالتعابير القياسيه هي مبتغانا ,, وسوف نقم بالتعلم عليها والتطبيق عليها.

الاساسيات:

التعابير القياسيه هي طريقة لوضع او شرح نمط معين مكرر في نص , فالعباره ( email ) تساوي في التعابير القياسيه ( mail ) و ( ma ) و ( i ). لكن مع استخدام التعابير القياسيه يمكننا المقارنه بالطرق التاليه ,, يقع الحرف في اول النص , الاخر , الوسط , وغير ذلك من الطرق التي سنتطرق لها

الاحرف والتصانيف:

لنأخذ امثله لكي نفهم الاحرف والتصانيف , لو استخدمنا الحرف ( . ) فهذا يقوم بمطابقة اي حرف اخر غير علامة السطر الجديد ( http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php20/20_1.gif ) , فلو قلنا نريد ان نقوم بمطابقة .at فسوف يكون النتاج كالتالي , cat و mat و sat . لكن هذه الطريقه سوف تقوم ايضا بفرض ان #at نريده مع المقارنه , لكن هناك حل بأن نقوم بجعل المطلوب فقط احرف بالطريقه التاليه [a-z] ارأيت السهوله ؟ مثلا لو اردنا احرف ( vowel ) في مجموعه , سوف نقوم بالتالي [aeiou] , ويمكن استخدام مدى كما فعلنا قبل قليل [a-z] او اكثر من مدى [a-zA-Z] وهذا معناه اي حرف من a الى z سواء كان في حالته الصغرى او الكبرى ( في اللغه الانجليزيه ) , ويمكن ايضا ان نخرج مدى من المقارنه كالتالي [^a-z] فهذا يقوم بمقارنة اي حرف غير a الى z فالعلامه ^ اذا وضعت بين الاقواس [] معناها ( not ) اي ( ليس ) , وضحت الفكره الان ؟ بجانب المدى الذي نقوم بتحديده , او نريد مدى معين في بالنا , هناك مدى معرف سابقا في لغة PHP , لاحظ الجدول التالي:
المدىالمعنى[[:alnum:]]كل الارقام[[:alpha:]]كل الاحرف[[:lower:]]كل الاحرف في النمط الصغير[[:upper:]]كل الاحرف في النمط الكبير[[:blank:]]فراغات و علامة TAP[[:space:]]علامات الفراغات[[:print:]]كل الاحرف القابله للطباعه[[:graph:]]كل الاحرف القابله للطباعه ما عدا المسافات

التكرار :

في بعض المرات , تريد ان تقول ان هناك بعض النصوص تكرر اكثر من مره, يمكنك التعبير هنا بطريقتين في التعابير القياسيه ,, الاولى بإستخدام الحرف * و معناه ان النمط يمكن تكرار ( صفر او اكثر ) من مره. والطريقه الاخرى هي الحرف + وهذا معناه ان النمط يمكن ان يتكرر ( مره او اكثر )

اجزاء التعابير:

مثال على هذه الطريقه لتوضيحها , (very )*large سوف تقوم بمطابقة التالي: 'large' و 'very large' و 'very very large' وهكذا

عد اجزاء التعابير:

يمكنك تحديد عدد تكرار بعض الاشياء بإستخدام الارقام بين الاقواس {} , يمكنك تحديد مطابقة تماما بالطريقه التاليه {4} ومعناه 4 مرات تكرار , او مدى تكرار {2 , 4} ومعناه من مرتان الى اربع مرات او مدى غير منتهي {2, } ومعناه على الاقل مرتان تكرار , فلو عملنا التالي (very ){1,3} فسوف يطابق التالي 'very ' و 'very very ' و 'very very very '.

بداية ونهاية التعابير القياسيه :

الطريقه التي سأعرضها الان سوف تقوم بتعليمك ان تطابق النص اذا كان في البدايه او النهايه وغيرها , ويمكن ذلك بإستخدام الحرف ^ , ( انتبه , لا تقم بالتعارض مع الطريقه التي بالاعلى ) , هذا الحرف ^ يقوم بالمقارنه في بداية النص والحرف $ يقوم بالمقارنه في نهاية النص. فلو قلنا ^bob فهذا يطابق bob في بداية النص , ولو قلنا com$ فهذا يقارن com في نهاية النص, لو تلاحظ المثال التالي ^[a-z]$ فهذا معناه ان يطابق اي حرف في النص كل على حده

التفريعات :

لو اردنا ان نطابق العبارات com او edu او net فسوف نستخدم الطريقه التاليه (com) | (edu) | (net)
( ملاحظه: لو ادرت ان تطابق احدى علامات التعابير مثل $ او * فيجب ان تضع امامها العلامه http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php20/20_2.gif , فلو اردت ان تطابق العلامه http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php20/20_3.gif فسوف تقوم بالتالي http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php20/20_4.gif )

العثور على النصوص بإستخدام التعابير القياسيه :
هناك نوعان لمطايقة التعابير القياسيه , وهما ereg و eregi وطريقة عمل الاول كالتالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php20/20_5.gif
هذه الداله تبحث في العباره ( search ) عن ما يطابقه بالنمط ( pattern ) , لو قلنا ان لدينا نموذج يضع فيه المستخدم بريد الكتروني ونريد ان نتحقق من صحة البريد الالكتروني , فسوف يكون التعبير القياسي كالتالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php20/20_6.gif
لنقم بشرح كل عباره على حده :
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php20/20_7.gif
هذه العباره تعني ان يبدأ النص على الاقل بحرف واحد او رقم واحد او علامة _ او - او مجموع منهم ثم العلامه @
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php20/20_8.gif
هذا التعبير يطابق الجزء الاول من العنوان مثلا ( yahoo ) ثم العلامه . واستخدمنا كما قلنا بالاعلى
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php20/20_9.gif
يطابق نهاية البريد الالكتروني مثلا (com)
الان طريقة الاستخدام كالتالي
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php20/20_10.gif
الدالة eregi تقوم بنفس العمل , ولكنها غير حساسه لحالة الاحرف.

استبدال النصوص بإستخدام التعابير القياسيه:
يمكن استخدام دالة استبدال النصوص ereg_replace او eregi_replace بنفس طريقة استخدام الدالة str_replace التي تعلمناها في الدرس السابق, وكما تعلم الداله eregi_replace هي نفسها الداله ereg_replace ولكن غير حساسة لحالة الاحرف
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php20/20_11.gif
فصل النصوص بإستخدام التعابير القياسيه:
داله اخرى مفيده في التعابير القياسيه وهي split ,, وطريقتها كالتالي
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php20/20_12.gif
الان لاحظ المثال التالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php20/20_13.gif
وناتج المثال هو كالتالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php20/20_14.gif
سؤال على الدرس :
1 - قم بالتعديل على تطبيق الدرس السابق , لكي يضمن التحقق من صحة البريد الالكتروني وان يكون الشركه غير مجانيه على سبيل المثال , واذا كانت الرساله تحوي على كلمة قطع غيار فيتم ارسالها الى قسم معين وهكذا

Ghost Rider
, Fri, 16 Mar 2007 16:41:54 +0100
الوقت والتاريخ من الاشياء المهمه جدا لبناء ويب متكامل , فالمستخدم يريد معرفة تاريخ اليوم , تاريخ نشر المقال , او الخبر وغيرها ,, ويمكن انه يريد ان يعرف وقت كتابة المقال , ليس هذا فقط , فصاحب الويب يريد معرفة تاريخ تسجيل مستخدم معين او تاريخ دخوله وتاريخ ارساله رساله الى الموقع, كل هذه الاشياء تجعل التاريخ مهم جدا لنا في بناء الويب. والتاريخ والوقت في لغة PHP سهل جدا , مجرد دوال نقوم بإستخدامها بطريقه صحيحه ونحصل على الناتج المراد. لنتابع الطريقه معا :)

متطلبات قبل البدأ :

مراجعة الدرس السابع عشر: برمجة الكائنات
اهداف الدرس:

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

ايجاد وطباعة التاريخ والوقت :
لكي نقوم بطباعة التاريخ والوقت وايجاده وتنسيقه نستخدم الداله date() وهذه الداله عملها سهل جدا , تأخذ قيمتين واحد اساسي وواحد افتراضي ,, لاحظ التالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php21/21_1.gif
فلو اردنا طباعة تاريخ اليوم , سوف نقوم بالتالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php21/21_2.gif
وسوف يكون الناتج هو التالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php21/21_3.gif
الان تابع مع الجدول التالي لنرى ماهي الرموز المستخدمه لانشاء التاريخ والوقت بأشياء مختلفه:
الرمزالمعنىمثالaالوقت صباحا او مسائاam , pmAالوقت صباحا او مسائاAM , PMdاليوم في الشهر على شكل ارقام من خانتين , الخانه الاولى صفرمن 01 الى 31Dاليوم في الشهر , ثلاث خانات مختصر , على شكل حروفمن mon الى sunFالشهر في السنه , مكتوب كاملاSeptembergالساعه في اليوم على مدى 12 ساعهمن 1 الى 12Gالساعه في اليوم على مدي 24 ساعهمن 0 الى 23hالساعه في اليوم على مدى 12 ساعهمن 01 الى 12Hالساعه في اليوم على مدى 24 ساعهمن 00 الى 23iالدقائق في الساعه من 00 الى 59Iنهار او مساء نهار 1 , مساء 0jاليوم في الشهر على شكل ارقام من غير صفرمن 1 الى 31lاليوم في الشهر , مكتوب كاملا على شكل حروفMondayLالسنه الكبيسه كبيسه 1 , غير كبيسه 0mالشهر في السنه , على شكل خانتان بدأ من الصفرمن 01 الى 12Mالشهر في السنه على شكل ثلاث خانات , حروفJannالشهر في السنه , على شكل خانتان , لا يبدأ بالصفرمن 1 الى 12sالثواني في الدقيقه على شكل خانتان بدأ من الصفرمن 00 الى 59Sالاختصارات للاحرف TH , ST , NDtمجموع الايام في الشهرمن 28 الى 31Uمجموع عدد الثواني من تاريخ 1970 المسمى بي UNIX TIME STAMP wاليوم في الاسبوع على شكل ارقامSunday => 0 , Saturday => 6yالسنه على شكل رقم من خانتان99 , 98 , 05Yالسنه على شكل رقم من اربع خانات2000 , 2005zاليوم في السنه على شكل ارقاممن 0 الى 365

التعامل مع Unix time stamp :

المدخل الثاني للداله date() هو ثواني UNIX TIME STAMP ومعنى هذا : عدد الثواني من تاريخ اول يوم في سنة 1970 وتعتبر هذه الطريقه القياسيه للتاريخ والوقت في لغات البرمجه وغيرها. اذا اردت تحويل التاريخ من الوضع العادي الى وضع UNIX TIME STAMP سوف تقوم بإستخدام الداله mktime() وطريقتها كالتالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php21/21_4.gif
ويجب عليك ملاحظة الترتيب هنا , لان اي غلط في الترتيب سوف يؤدي الى تاريخ و وقت خاطئ , لو تركت الداله من غير اي مدخل فسوف يرجع لك الوقت الحالي على شكل UNIX TIME STAMP. لاحظ التالي :
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php21/21_5.gif

الدالة getdate() و كيفية استخدامها :

تستخدم هذه الداله على عكس سابقتها , فتقوم بإعطائها التاريخ على شكل UNIX TIME STAMP وتقوم بإرجاعه على شكل عادي , هذه الداله تقوم بإرجاع التاريخ على شكل مصفوفه حرفيه, لاحظ التالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php21/21_6.gif
المفتاح ( key ) لهذه المصفوفه في الجدول التالي:
keyvaluesecondsالثواني , ارقامminutesالدقائق , ارقامhoursالساعات , ارقامmdayاليوم في الشهر , ارقامwdayاليوم في الاسبوع , ارقامmonالشهر , ارقامyearالسنه , ارقامydayاليوم في السنه , ارقامweekdayاليوم في الاسبوع , على شكل نص كاملmonthالشهر , على شكل نص كامل

سؤال على الدرس :
1 - قم بأنشاء برنامج مصغر يقوم بحساب التاريخ , ويظهر الايام باللغه العربية , مثل ( سبت , احد , اثنين ) وغيرها .. مساعده : ( استخدم العباره الشرطيه IF )

Ghost Rider
, Fri, 16 Mar 2007 16:42:47 +0100
قواعد البيانات بحر كبير , كل ما تراه من الانظمه الحاليه والمتطوره, اساس نجاحها قواعد البيانات ولكن تتسائل ماهي قواعد البيانات ؟ قواعد البيانات عباره عن قاعدة بها جداول توجد بها المعلومات الي تقوم بتخزينها , غير واضح صحيح ؟ انظر حولك في البيت, هل يوجد لديك مكتب, اعتبره قاعدة البيانات, في هذا المكتب يوجد ادراج تضع بها اورقاك واشياء الشخصيه, درج للاقلام , درج للكتب , و درج للاوراق وهذه هي اماكن التخزين في قاعدة البيانات وماتسمى بي الجداول.

متطلبات قبل البدأ :

لا يوجد
اهداف الدرس:

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

قواعد البيانات مقابل نظام الملفات :
لو تسآلت لماذا نستخدم قواعد البيانات ؟ لماذا لا نستخدم ملف ونضع فيه معلوماتنا, الاجابه بسيطه. طرق التخزين , المساحه , سهولة الاستعلام

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

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

سهولة الاستعلام :
لو نرجع الى مثالنا , الملف الذي يحوي على اسماء المسجلين بالموقع , تخيل انهم 1000 مستخدم , كل مستخدم في سطر بالملف, لو اردت ان تقارن الاسم في الملف بالاسم الذي ادخله المستخدم فسوف تحتاج الى تقوم بقراء الملف كاملا اي 1000 سطر, لكي تقوم بإيجاد المعلومه المطلوبه , سوف تقول ماذا لو كان المستخدم في اول الملف , اذن ماذا لو كان في اخر الملف وكان رقم 1000 ؟ اعتقد ان الصوره وضحت. لكن مع قواعد البيانات فالاستعلام سهل جدا عن طريق اللغه المسماه SQL , فهي لغة منطقيه جدا وطريقتها سهله جدا فمجرد ان تقول اختر من الجدول ( مستخدمين ) القيمه التي تساوي ( اسم المستخدم المدخل ) فقط , وسوف يقوم الاستعلام بأخبارك هل يوجد اسم المستخدم ام لا .

لماذا قواعد البيانات :
اعتقد ان الكلام الذي قرأته بالاعلى اقنعك ان نظام قواعد البيانات افضل بكثير واخبرك لماذا نحتاج الى قواعد البيانات, ولكن ذلك لا يعني اننا لو اردنا عمل شي بسيط جدا ان نستعمل نظام قواعد البيانات, بل سيكون كافيا نظام الملفات ولكن في حالات نادره , ولا اظن ان هناك احد يستخدم نظام الملفات الى الان. من خصائص قواعد البيانات التالي:
<LI dir=rtl>السرعه
<LI dir=rtl>السهوله
<LI dir=rtl>التنظيم
<LI dir=rtl>تقليل التكرار
تقليل المعلومات الغير مفيده
وغيرها الكثير التي لا حصر لها , ويمكن ان تذهب الى Google وان تكتب في محرك البحث why to use database , وسوف تحصل على المعلومات الكافيه التي تحتاجها.

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

معرفات قواعد البيانات:
لدينا 3 معرفات في قواعد البيانات وهي : قاعدة البيانات , الجدول , العمود

قاعدة البيانات :

وهي المحتوى ( الحقيبه ) التي يكون بها جميع معلوماتنا , ويمكنك انشاء اكثر من قاعدة بيانات

الجدول :

كل حقيبه لديها حافظات ( جيب ) واحد للاقلام , وواحد للاوراق وواحد للكتب ,, وهذه ما اعنيه بالجداول

العمود :

العمود هنا تخيله كأنه التفرعات لحافظات , فحافظات الاقلام ( جيب الاقلام ) يحتوي على اربع خانات لحفظ الاقلام واكثر , قلم احمر وقلم اخضر وقلم ازرق وقلم اسود

انواع الاعمده في قواعد البيانات :
الانواع الرقميه :
<LI dir=rtl>
TINYINT
<LI dir=rtl>
SMALLINT
<LI dir=rtl>
MEDUIMINT
<LI dir=rtl>
INT
<LI dir=rtl>
INTEGER

BIGINT

الانواع العشريه :
<LI dir=rtl>
FLOAT
<LI dir=rtl>
DOUBLE
<LI dir=rtl>
REAL
<LI dir=rtl>
DECIMAL

NUMERIC

الوقت والتاريخ :
<LI dir=rtl>
DATE
<LI dir=rtl>
TIME
<LI dir=rtl>
DATETIME
<LI dir=rtl>
TIMESTAMP

YEAR

النصوص العاديه :
<LI dir=rtl>
CHAR

VARCHAR

الكتابات و ( BLOB ) :
<LI dir=rtl>
TINYBLOB
<LI dir=rtl>
TINYTEXT
<LI dir=rtl>
BLOB
<LI dir=rtl>
TEXT
<LI dir=rtl>
MEDUIMBLOB
<LI dir=rtl>
MEDUIMTEXT
<LI dir=rtl>
LONGBLOB

LONGTEXT

الخيارات والتعدديه:
<LI dir=rtl>
ENUM

SET


امثله على قواعد البيانات:
جدول يقوم بتخزين معلومات المستخدمين:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php22/22_1.gif
جدول يقوم بتخزين معلومات الكتب الي تباع:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php22/22_2.gif
العلاقات في قواعد البيانات :
من اهم الاشياء التي يجب ان نراعيها في قواعد البيانات هي عدم التكرار , اي نجعل كل شي فريد من نوعه, لن استطيع شرح هذا كله الان , ولكن سوف اتكلم عن العلاقات في قواعد البيانات بشكل مختصر , لدينا ثلاث انواع من العلاقات :
العلاقه المسماه بي 1:1 او واحد لواحد ( One : One )
لنأخذ مثال على هذه العلاقه , تخيل ان لدينا متجر , وفي هذا المتجر يوجد عامل واحد فقط, فالعلاقه تكون ان الموظف ينتمي الى متجر واحد و المتجر يحوي على موظف واحد فقط لاحظ الصوره التاليه:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php22/22_3.gif
العلاقه المسماه بي M:1 او واحد لكثير ( Many : One )
تخيل ان لدينا رسام , هذا الرسام يقوم برسم عدة لوحات , ولكن كل لوحة من عمل رسام واحد فقط لاحظ الصوره التاليه :
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php22/22_4.gif
العلاقه المسماه بي N:M او كثير لكثير ( Many : Many )
لو لدينا طلاب ولدينا مواد , فكل طالب يمكنه ان يأخذ ماده او اكثر , وكل ماده يمكن ان يأخذها اكثر من طالب اليس ذلك صحيحا ؟ ولكن هذه العلاقه ليست جيده لانها لن تحل مشكلة التكرار , ولكن نقوم بحلها عن طريق شي يسمى ( Bridge Entity ) او ( الجسر ) لاحظ الصورتين التاليه:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php22/22_5.gif
ولكي نقوم بحل هذه العلاقه او ايجاد طريقه اخرى لها نستخدم الجسر مثل الصوره التاليه:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php22/22_6.gif
طرق ربط العلاقات في قواعد البيانات :

كل جدول نقوم بإنشاءه يجب ان نجعل له ما يسمى المفاتح الرئيسي ( PRIMARY KEY ) وهذا المفتاح لا يتم تكراره في الجدول , حيث ان كل مستخدم لديه رقم رئيسي نعرفه به , ونحدد به اسمه ومعلوماته الاخرى ولكي نقوم بربطه في علاقة , في الجدول المربوط به نجعل هذه القيمه على شكل مفتاح اجنبي ( FOREIGN KEY ) لاحظ معي الصوره التاليه :
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php22/22_7.gif
لاحظ ان العمود CustomerID في جدول CUSTOMERS هو مفتاح رئيسي ولا يمكن تكراره , ولكنه في جدول ORDERS على شكل ( FOREIGN KEY ) ويمكن تكراره , لان عدة طلبات يمكن عملها عن طريق مستخدم واحد , ولكن كل طلب مربوط بمستخدم واحد فقط.

تصميم قاعدة بيانات:
في تصميم قاعدة البيانات يجب علينا ان نقوم بأشياء كثيره , اولها ان نقوم بتحليل ومعرفة ماذا نريد من هذه القاعده , كيفية عملها , كيفية ترتيب المعلومات المفيده لنا بالقاعده , ويجب ان نقوم برسم القاعده على الورق اولا لكي نستنتج هل منطقنا صحيح في تصميم هذه القاعده ام لا. ويجب ان نحل مشكلة التكرار , فتخيل لو لدينا جدول يحتوي على معلومات العميل ومعلومات الموظف الذي قام بخدمته , في كل مره ندرج مستخدم يجب ان ندرج العميل مره اخرى ولو قام العميل بتغيير اسمه او رقمه , فسنحتاج الى تغيير كل الصفوف التي يوجد بها هذا العميل , ولكن لو جعلنا العميل في جدول والموظف في جدول , فسيكون لكل عميل صف واحد في جدول العملاء ولكل موظف صف واحد في جدول الموظفين ثم نربطهما ببعض. فلو غير عميل رقم هاتفه سوف نقوم بالتعديل مره واحده فقط.
سؤال على الدرس :
1 - قم قراءة مواضيع عن قواعد البيانات بشكل اكبر تفصيلا , لكي تفهم هذا الدرس جيدا لانه مختصر جدا جدا

Ghost Rider
, Fri, 16 Mar 2007 16:43:39 +0100
سنتعرف في درس اليوم على دوال التحكم في قواعد البيانات MySQL , كيفية انشاء قواعد البيانات , كيفية الاتصال والاستعلام بها , بدأ من فتح قناة اتصال بين PHP و MySQL نهاية بغلق هذا الاتصال. وسنعرف ايضا كيف نقوم بعرض البيانات من قواعد البيانات عن طريق الدالة .....

متطلبات قبل البدأ :

لا يوجد
اهداف الدرس:

كيفية التحكم في قاعدة البيانات
انشاء قاعدة بيانات
انشاء جداول في قاعدة البيانات
انشاء الاعمده في قواعد البيانات
اوامر الاستعلام في قواعد البيانات
دوال PHP للتحكم في قواعد البياناتكيفية التحكم في قاعدة البيانات :
لو قمت بدراسه الدرس الاول او الثاني من دروسي, واتعبت طريقة تنصيب لغة PHP الموجوده هنا, فسوف يسهل عليك الدرس, قم بتشغيل السيرفر الشخصي الان واذهب الى المتصفح واكتب التالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php23/23_1.gif
بعد ان تفتح الصفحه التي تخبرك ان السيرفر الشخصي يعمل بشكل صحيح, قم الان بالضغط على الرابط التالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php23/23_2.gif
سترى الان صفحه, شبيه بالصوره التاليه, وهي برنامج PHP MY ADMIN وهو برنامج يتحكم في قاعدة البيانات ويسهل لك عملية الانشاء والحذف وغيرها :
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php23/23_3.gif
لنبدأ الان خطوه بخطوه الى هدف درسنا لهذا اليوم.

انشاء قاعدة بيانات :
لنقم بإنشاء قاعدة بيانات اسمها info , الان اتبع التالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php23/23_4.gif
انشاء جداول في قاعدة البيانات :
ثم اضغط على الزر create وسوف تنقل الى الصفحه التاليه:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php23/23_5.gif
انشاء الاعمده في قواعد البيانات :
تحت العباره Create new table on database info تقوم بإنشاء جدول في قاعدة البيانات, لنقم بتسميته users ونحتاج ان يكون به 3 حقول ( رقم المستخدم , اسم المستخدم , البريد الالكتروني للمستخدم ), اضغط الان على الزر Go بعد ان تقوك بتعبئة البيانات كما في الصوره وسوف ترى التالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php23/23_6.gif (http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php23/23_6.gif)
لاحظ ان اول حقل نجعل له الخصائص التاليه unsigned اي لا يمكن ان يحتوي على عدد اقل من الصفر او سالب ,, auto increment اي يزيد لكل عضو يضاف جديد تلقائيا ويولد له رقم مستخدم فريد من نوعه , واخيرا الخاصيه Primary اي يكون مفاتح رئيسي PRIMARY KEY
الحقلين الاخيرين , نجعل لهما طول الاول 20 , لنقل ان اسم المستخدم لن يزيد عن 20 حرف وبريده الالكتروني عن 50 حرف واخيرا نقوم بعمل التالي والنقر على save لاحظ الصوره:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php23/23_7.gif
واذا تم العمل بنجاح , سوف ترى الصفحه التاليه :
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php23/23_8.gif
لاحظ ان الحقل user_id تحته خط وذلك يعني انه من النوع PRIMARY KEY

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

الامر INSERT :
ونعني به الاضافه وهو كالتالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php23/23_9.gif
المربع الاول نعني به اسم الجدول , والمربع الثاني اسماء الاعمده الي نريد الادراج بها , ولو كان العمود حقل يتم ازادته تلقائيا ( auto increment ) فلا نحتاج ان نضع له قميه فقط نقوم بوضع علامة التنصيص ''

الامر SELECT :
هذا الامر يعني الاختيار ( اي نستعلم عن معلومات معينه في قواعد البيانات ) وهو كالتالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php23/23_10.gif
نعني بالعباره * اي كل شي , ولو اردنا اختيار صف يحوي قيمه معينه نريد مطابقتها سوف نقوم بالتالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php23/23_11.gif

الامر DELETE :
نعني بهذا الامر المسح , اذا اردنا ان نقوم بمسح صف ( ليس عمود وانما صف ) فسوف نستخدم هذه العباره كالتالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php23/23_12.gif
يوجد هناك اوامر اخرى كثيره ولمعرفة المزيد عنها الرجاء زيارة العنوان التالي http://www.mysql.com (http://www.mysql.com/)

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

الاتصال بقاعدة البيانات ( الداله mysql_connect و mysql_pconnect ) :

تقوم هذه الدوال بالاتصال الى قاعدة البيانات ومدخلاتها ثلاث اشياء , اسم الخادم , اسم المستخدم لقاعدة البيانات , كلمة المرور لقاعدة البيانات بالترتيب , لاحظ التالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php23/23_13.gif
بالنسبه للداله mysql_pconnect فهي تقوم بنفس العمل ولكن الاتصال بها لا ينقطع بإنتهاء الاستعلام , وانما يبقى السكربت متصلا بقاعدة البيانات

اختيار قاعدة البيانات ( الداله mysql_select_db ) :

تقوم هذه الداله بإختيار قاعدة البيانات التي تريد العمل عليها, المدخل الاول اسم قاعدة البيانات والمدخل الثاني هو حلقة الاتصال بقاعدة البيانات , وهي تعمل بالشكل التالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php23/23_14.gif
لاحظ انك لو استخدمت الداله mysql_pconnect فلن تحتاج الى ادخل حلقة الاتصال, لان الداله ستبقى متصله

ارسال الاستعلام ( الداله mysql_query ) :

هذه الداله الجميله تساعدك على ارسال استعلام الى قاعدة البيانات , مدخلها الاول الاستعلام المطلوب والمدخل الثاني حلقة الاتصال , لاحظ التالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php23/23_15.gif

استقبال الاستعلام وطباعته ( الداله mysql_fetch_array و الداله mysql_num_rows ) :

الداله mysql_num_rows تقوم بأخبارك كم صف تم ارجاعه من الداله mysql_query , لاحظ المثال التالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php23/23_16.gif
الان لو اردنا ان نقوم بعرض النتائج فسوف نقوم بإستخدام الداله mysql_fetch_array وهذه الداله تعطيها ناتج الاستعلام من الداله mysql_query وهي تقوم بطباعته عن طريق اي دالة تكرار , وتقوم الداله بإرجاع الناتج على شكل مصفوفه حرفيه , مفتاحها ( key ) هو اسم العمود في قاعدة البيانات و القيمه ( value ) هو ما يقابل هذا العمود , لاحظ المثال التالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php23/23_17.gif

قطع الاتصال من قاعدة البيانات ( الداله mysql_close ) :

اذا كنت تستخدم الداله mysql_connect فلا يتحتم عليك اقفال الاتصال وليس هو ضروري فسيتم اغلاقه عند الانتهاء من تنفيذ البرنامج , ولكن الداله mysql_pconnect فيحتاج ان تقوم بإلغاء الاتصال لانه الافضل :)
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php23/23_18.gif

معرفة الخطا من قاعدة البيانات ( الداله mysql_error ) :

تقوم هذه الداله بإعطائك رقم الخطأ اذا لم يتم عمل دوال MySQL بشكل صحيح وهي مفيده دائما , لذا انصح بإستعمالها , لاحظ التالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php23/23_19.gif
سؤال على الدرس :
1 - قم بإنشاء عدد من قواعد البيانات وحاول ان تستكشف في MySQL وحاول ان تتعود على طريقة استخدام SQL

Ghost Rider
, Fri, 16 Mar 2007 16:44:34 +0100
سوف يكون درسنا اليوم تطبيق متكامل من ( أ - ي ) واتمنى ان لا اطيل او لا تصعب اي نقطه على اي متعلم مع ارسن :). فكرة برنامجنا هو ان المستخدم يقوم بالتسجيل وبعد ذلك يمكنه اضافة الدروس , وكل درس ينتمى الى قسم معين , واذا كان المستخدم هو صاحب الموقع فيمكنه اضافة قسم لكي تنتمي الدروس اليها.

متطلبات قبل البدأ :

مراجعة جميع الدروس السابقه
اهداف الدرس:

فكرة عمل البرنامج
تصميم قاعدة البيانات
العلاقات
انواع الاعمده في الجداول
كيفية عمل الموقع
الداله addslashes و stripslashes
الداله md5
الشكل النهائي لقاعدة البياناتفكرة عمل البرنامج :
سوف يكون درسنا اليوم تطبيق متكامل من ( أ - ي ) واتمنى ان لا اطيل او لا تصعب اي نقطه على اي متعلم مع ارسن :). فكرة برنامجنا هو ان المستخدم يقوم بالتسجيل وبعد ذلك يمكنه اضافة الدروس , وكل درس ينتمى الى قسم معين , واذا كان المستخدم هو صاحب الموقع فيمكنه اضافة قسم لكي تنتمي الدروس اليها.
تصميم قاعدة البيانات :
لو فكرنا بالبرنامج قليلا فسوف نستنتج اننا نحتاج الى ( درس - موضوع - مستخدم ) اليس ذلك صحيحا ؟ اذا هذه هي قاعدة البيانات الي نحتاجها انظر الى الصوره التالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php24/24_1.gif
العــــلاقــــات :
العلاقات في برنامجنا سهله , وجميعها من النوع ( 1 - كثير ) اي ( 1 : M ) , لنقم بشرحها الان , كل مستخدم يضيف درس او اكثر اليس هذا منطقيا ؟ فمن المستحيل ان يقوم اكثر من عضو بإضافة الدرس نفسه. كل درس ينتمي الى موضوع معين ويقوم بكتابته عضو واحد. وكل موضوع يحتوي على اكثر من درس ولا يوجد درس يضاف الى اكثر من قسم واحد. لاحظ الصوره التاليه:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php24/24_2.gif
انواع الاعمده في الجداول :
الجدول USER :


USERS
الحقلالنوعالخاصيهuser_idinteger - auto incrementprimary keyuser_namevarchar(10)uniqueuser_passvarchar(100) user_emailvarchar(50)uniqueuser_adminenum(0,1)requ ired


الجدول LESSON :

LESSON
الحقلالنوعالخاصيهles_idinteger - auto incrementprimary keytopic_idintegerforeign keyuser_idintegerforeign keyles_titlevarchar(30)-les_texttext-
الجدول TOPICS :

TOPIC
الحقلالنوعالخاصيهtop_idinteger - auto incrementprimary keytop_titlevarchar(30)-top_destext-top_imgvarchar(100)-

كيفية عمل الموقع :
نحتاج هنا الى معرفة كيفية تنقل المستخدم بين الصفحات وماهي الصفحات التي نحتاجها انظر الى الصوره التاليه :
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php24/24_3.gif
الداله addslashes و stripslashes :
بعض النصوص نحتاج ان نقوم بإدخالها الى قاعدة البيانات, اليس ذلك صحيحا ؟ بعض محتويات هذه النصوص عاديه ولكنا قد تكون اوامر في قاعدة البيانات فتقوم بتعطيل قاعدة البيانات او تخريبها , ولذلك نستخدم هذه الدالتين , الداله addslashes قبل ادخل المعلومه الى قاعدة البيانات , وهي تعمل كالتالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php24/24_4.gif
نصيحه : ( قم دائما بإستخدام هذه الداله اذا اردت ادخال معلومات الى قواعد البيانات ,, خاصه وان كانت من طرف المستخدم , فلا يمكنك ابدا معرفة ماذا يريد السمتخدم كتابته ) :)
الداله md5 :
نستخدم هذه الداله لتشفير كلمة مرور المستخدم ثم نضعها في قاعدة البيانات, فلا يصلح ان تقوم بوضع كلمة المرور كما هي , شفرها اولا ثم ادرجها , لاحظ التالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php24/24_5.gif
وناتج هذا التشفير ( 123456 ) فهو التالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php24/24_6.gif
الشكل النهائي لقاعدة البيانات :
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php24/24_7.gif
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php24/24_8.gif
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php24/24_9.gif
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php24/24_10.gif
سؤال على الدرس :
1 - لا يوجد

Ghost Rider
, Fri, 16 Mar 2007 16:45:36 +0100
لكي نقوم بعمل هذا البرنامج , هناك طرق كثير جدا , ولكن دائما نختار الطريقه الانسب لنا والتي نعتقد انها جيده, لا اعلم اذا كانت طريقتي جيده ولكن متأكد انها سلميه ومناسبه وتعمل بشكل صحيح , مع ان هناك بعض العيوب وهي اننا لا نستطيع تتبع المستخدم من صفحه الى اخرى, ولكن عملته بطريقه اخرى وليست مناسبه. في الدروس المتقدمه سوف نرى كيفية تتبع المستخدم ونقوم بتحسين البرنامج الى الافضل...

متطلبات قبل البدأ :

مراجعة جميع الدروس السابقه
اهداف الدرس:

الداله mail
الداله header
الملفات التي نحتاجها
البدأ في تطبيق البرنامج
الداله mail :
اذا اردنا ان نقوم بإرسال بريد الكتروني الى مستخدم , او الى انفسنا فسوف نستخدم هذه الداله , وهي تعمل بشكل جيد , ولكن ليس دائما , ولكن اذا استخدمها مع السيرفر الشخصي وهي غير مفعله فلن تعمل , ولكي ترى عملها بشكل صحيح فيجب ان يكون لديك مساحه في موقع يدعم لغة PHP وسوف ترى عملها بشكل جيد هناك , لاحظ كيفية عمل الداله:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php25/25_1.gif
الداله header :
هذه الداله لها استخدامات كثيره جدا , وهي تقوم بإرسال معلومات HTTP ( رؤوس HTTP ) ولن نتطرق لشرحها الان , ولكن سوف نستخدمها في مثالنا للتحويل المستخدم من صفحه الى اخرى اليا , لكي نقوم بالاستغناء عن JavaScript ونتجنب استخدامها , ولكي نجعلها تعمل سوف نقوم بالتالي :
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php25/25_2.gif
الملفات التي نحتاجها :
لكي نقوم بعمل هذا البرنامج , هناك طرق كثير جدا , ولكن دائما نختار الطريقه الانسب لنا والتي نعتقد انها جيده, لا اعلم اذا كانت طريقتي جيده ولكن متأكد انها سلميه ومناسبه وتعمل بشكل صحيح , مع ان هناك بعض العيوب وهي اننا لا نستطيع تتبع المستخدم من صفحه الى اخرى, ولكن عملته بطريقه اخرى وليست مناسبه. في الدروس المتقدمه سوف نرى كيفية تتبع المستخدم ونقوم بتحسين البرنامج الى الافضل. نحتاج في برنامجنا الى ملفات كثيره وقد وضعتها هنا في جدول لكي ترى اسم الملف وكيفة عمل كل ملف , لاحظ التالي:
الملفعمل الملفindex.phpهنا يقوم الملف بإدخال اسم المستخدم وكلمة المرور , واذا كان جديدا يذهب الى التسجيلcheck.phpالتأكد من اسم المستخدم وكلمة المرور وتحويل المستخدم في حال صحتهاreg.phpصفحة التسجيلdo_reg.phpالتحقق من معلومات المستخدم وادراج المعلومات في قاعدة البياناتmember.phpصفحة المستخدم وفيها كل ما يحتاجview.phpعرض جميع الدروسlesson.phpاضافة درس جديدdo_les.phpالتأكد من الحقول وادراج الدرس في قاعدة البياناتtopic.phpاضافة موضوع جديدdo_top.phpالتأكد من الحقول وادراج الموضوع في قاعدة البياناتlesbyyou.phpعرض الدروس التي اضيفت من المستخدمconfig.inc.phpملف نضع به معلومات الاتصال في قواعد البيانات وندرج به الملفات التي نحتاجهاoutput.inc.phpدوال التصميم للصفحات , عرض القوائم والنماذج وغيرهاfunc.inc.phpدوال عامه نحتاجها لادراج المعلومات وتسجيل المستخدم وغيرهاauth.inc.phpدوال التحقق من معلومات المستخدم وصلاحياتهimagesفي هذا المجلد نضع صور الاقسام التي نضيفهاincludeفي هذا المجلد نضع الملفات التي يوجد بها الدوالhttp://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php25/25_3.gif
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php25/25_4.gif
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php25/25_5.gif
البدأ في تطبيق البرنامج :

الملف output.inc.php اضغط لمشاهدة الملف (http://prog.arccn.net/images/php/olsfile/output.inc.php)
لنبدأ في الملف output.inc.php وهذا الملف يحوي جميع دوال النماذج ( نقوم بإنشاءها نحن ) وغيرها , سوف اذكر الدوال هنا وسوف اشرحها بشكل مبسط :
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php25/25_6.gif
هذه الداله تقوم بإنشاء رأس الصفحه , ونقوم بإدراجها في كل صفحه لدينا , ومدخلها عنوان الصفحه وجعلنا فراغ ( $title = '' ) في مدخل الداله لانه توجد احتماليه ان لا يكون هناك عنوان للصفحه
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php25/25_7.gif
هذه الداله تقوم بإقفال وسوم رأس الصفحه , وندرجها في النهايه كلما ادرجنا رأس الصفحه
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php25/25_8.gif
هذه الداله تقوم بإدراج نموذج الدخول ( اضغط على الصوره للتكبير ) , حيث تعرض اسم المستخدم وكلمة المرور وفي حالة ان المستخدم لم يسجل بعد توفر له رابط صفحة التسجيل
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php25/25_9.gif
هذه الداله توفر لنا الروابط بشكل تلقائي , حيث لا نضر لكتابة وسوم الروابط في كل مره ولكن مره وحده , وندخل لهذه الداله عنوان الرابط و الاسم الذي يظهر للمستخدم.
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php25/25_10.gif (http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php25/25_10.gif)
هذه الداله الطويله المخيفه بسيطه جدا ( اضغط على الصوره للتكبير ) , وعملها اظهار قائمة للمستخدم يختار منها اما اضافة درس او مشاهدة المواضيع , واذا كان مستخدم مراقب فسوف تفتح له رابط اضافة موضوع , ندخل لهذه الداله اسمه المستخدم لكي نقوم بعرضه ونخرج منها رقم المستخدم في قاعدة البيانات لنرسله من صفحه لصفحه ونتتبعه في الصفحات ( لاحظا استفادتنا من الحقل user_admin ) بيحث لو كان يحوي y فهو مراقب واذا كان n فهو مستخدم عادي.
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php25/25_11.gif
تظهر لنا هذه الداله نموذج التسجيل للمستخدم ( اضغط على الصوره للتكبير ), لكي يستطيع التسجيل وان يقوم بإضافة مواضيع
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php25/25_12.gif
تقوم هذه الداله ( اضغط على الصوره للتكبير ) بإظهار نموذج اضافة الموضوع ( للمراقب ) لكي يستطيع اضافة مواضيع جديده.

الملف func.inc.php اضغط لمشاهدة الملف (http://prog.arccn.net/images/php/olsfile/func.inc.php)

هذا الملف سهل جدا , وظيفته ان نضع دوال تقوم باضافة ( مستخدم , درس , موضوع ) جديد فقط. وداله اخيره لجلب رقم المستخدم عن طريق اسمه.

الملف auth.inc.php اضغط لمشاهدة الملف (http://prog.arccn.net/images/php/olsfile/auth.inc.php)
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php25/25_13.gif (http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php25/25_13.gif)

هذه الداله تقوم بالتحقق من اسم المستخدم وكلمة المرور ( لاحظ اننا نقارن بكلمة المرور المشفره ) واذا تطابق لدينا نرجع القيمه ( true ) واذا لم يطابق نرجع القيمه ( false )
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php25/25_14.gif
وظيفة الداله ان تقوم بمقارنة كلمة المرور الاولى مع كلمة المرور الثانيه ( في التسجيل ) اذا تطابقت يرجع القيمه ( true ) واذا لم تتطابق يرجع القيمه ( false )
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php25/25_15.gif
تتحقق هذه الداله من ان اسم المستخدم جديد , اي لا يوجد مستخدم اخر قد قام بالتسجيل بنفس الاسم
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php25/25_16.gif
هذه الداله تقوم بالتحقق من البريدالاكتروني الذي يدخله المستخدم , ( كل مستخدم لديه بريد الكتروني واحد و مستحيل ان يكون مستخدمان لهما نفس البريد )
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php25/25_17.gif
دالتنا هذه تتحقق من صحة البريد الاكتروني كما تعلمنا في درس ( التعابير القياسيه ).

الملف config.inc.php اضغط لمشاهدة الملف (http://prog.arccn.net/images/php/olsfile/config.php)

في هذا الملف ندرج جميع الملفات السابقه , لكي ندرج هذا الملف فقط وهو يقوم بالعمل الباقي , ونقوم بوضع الاتصال في قاعدة البيانات في هذا الملف
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php25/25_18.gif
سؤال على الدرس :
1 - حاول بأن تقوم بإستخدام الملفات بنفسك , وحوال ان تقوم بعمل البرنامج لوحدك الى ان اقوم

Ghost Rider
, Fri, 16 Mar 2007 16:46:40 +0100
في هذه الصفحه , نظهر للمستخدم نموذج الدخول , واذا لم يكن مسجلا فنضع له رابط صفحة التسجيل , لو نلاحظ الان لا نحتاج الى ان نقوم بكتابة النموذج ,, لاننا وضعنا داله تقوم بالنموذج واسميناها do_login_form اليس ذلك صحيحا ؟ اذن ما نحتاجه اولا , هو ان نقوم بإدراج الملف config.php وهو موجود داخل المجلد include لكي يقوم ادراج لنا كل الملفات الاخرى

متطلبات قبل البدأ :

مراجعة جميع الدروس السابقه
اهداف الدرس:

الصفحه index.php
الصفحه reg.php
الصفحه do_reg.php
الصفحه check.php
الصفحه member.php
الصفحه lesson.php
الصفحه do_les.php
الصفحه view.php
الصفحه lesbyyou.php
الصفحه topic.php
الصفحه do_top.php
تحميل التطبيق كاملاالصفحه index.php :
في هذه الصفحه , نظهر للمستخدم نموذج الدخول , واذا لم يكن مسجلا فنضع له رابط صفحة التسجيل , لو نلاحظ الان لا نحتاج الى ان نقوم بكتابة النموذج ,, لاننا وضعنا داله تقوم بالنموذج واسميناها do_login_form اليس ذلك صحيحا ؟ اذن ما نحتاجه اولا , هو ان نقوم بإدراج الملف config.php وهو موجود داخل المجلد include لكي يقوم ادراج لنا كل الملفات الاخرى , لاحظ الكود التالي :
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php26/26_1.gif
لاحظا اننا حددنا مكان الملف config.php , واننا كتبنا عنوان الصفحه , ولو كتبنا الداله من غير عنوان فسوف تعمل , راجع الدرس السابق لتتذكر لماذا , ثم وضعنا دالة اظهار نموذج الدخول واذا لم يكن العضو مسجلا يظهر له رابط الى صفحة التسجيل, لاحظ التالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php26/26_2.gif
الصفحه reg.php :
لو ان المستخدم ليس بعضو معنا , وذهب الى صفحة التسجيل فنظهر له نموذج التسجيل حيث يطلب منه اسم المستخدم ,, وكلمة المرور مرتان , والبريد الالكتروني. لاحظ الكود التالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php26/26_3.gif
وناتجنا هو التالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php26/26_4.gif
الصفحه do_reg.php :
هنا نقوم بمعالجة النموذج وادخاله في قواعد البيانات اذا كان كل شيئ صحيحا , او نقوم بعرض الخطأ الذي فعله المستخدم ,, لنقم بالعمل هذا خطوة خطوة , حسنا لنبدا , في البدايه نقوم بإدراج ملفاتنا التي نحتاجها
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php26/26_5.gif
ثم نقوم بأخذ المتغيرات التي ارسلت لنا من النموذج بالطريقه التاليه :
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php26/26_6.gif
أخذنا المتغيرات , الان يجب ان نتأكد هل قام المستخدم بلمئ جميع الخانات ام لا , والطريقه هي كالتالي :
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php26/26_7.gif
المستخدم كتب جميع المتغيرات , اذن نحتاج الان الى ان نتحقق من اسم المستخدم هل هو موجود لدينا ام لا ,
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php26/26_8.gif
لا تنسى ان معظم الدوال التي تراها هنا هي من الملفات التي نقوم بإدراجها , الان نتحقق من كلمتي المرور هل هي متطابقه ام لا ,
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php26/26_9.gif
الان نقوم بالتحقق من البريد الالكتروني هل هو موجود ام لا , و هل هو صحيح ام لا ,
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php26/26_10.gif
الان تأكدنا ان جميع المعلومات صحيحه , فنقوم بإدراج معلومات المستخدم كلها في قاعدة البيانات , بالطريقه التاليه:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php26/26_11.gif
الباقي علينا الان , ان نقوم بإقفال كل دالة شرطيه قمنا بوضعها , بحيث لو لم يملئ جميع البيانات فنكتب له الرجاء كتابة جميع البيانات الخ...
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php26/26_12.gif
الصفحه check.php :
هذه الصفحه تقوم بالتحقق من اسم المستخدم والبريد الالكتروني في قاعدة البيانات ثم مقارنتها بما ادخله المستخدم عند تسجيل الدخول , واذا كانت صحيحه فسوف تقوم بتحويله الى صفحة الاعضاء المسجلين بإستخدام الداله ( header ) , لاحظ التالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php26/26_13.gif
لاحظ اننا في تحويل المستخدم نقوم بإرسال اسم المستخدم مع الصفحه ( الطريقه GET ) وذلك لاننا نريد ان تكون مدخلا الى الداله display_menu حيث انها تعرض اسم المستخدم وتضع في كل رابط رقم المستخدم في قاعدة البيانات لكي نستخدمه لاحقا اذا اردنا ان نعرف الدروس الذي اضيفت من قبل المستخدم

الصفحه member.php :
في هذه الصفحه لا يوجد الكثير , فقط نقوم بعرض صفحة الزائر والروابط التي يمكن العمل عليها , واظهار اسمه ( لا تنسى اننا نقوم بإرسال اسمه من صفحة check.php و ندخلها للداله وهي تقوم بإستخراج الباقي ) , لاحظ التالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php26/26_14.gif
وسوف يكون ناتج الصفحه هو التالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php26/26_15.gif
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php26/26_16.gif
لاحظ لانني مراقب فظهر رابط اضافة موضوع ولكن لو انني غير مراقب , فسوف يكون كالتالي :
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php26/26_17.gif
ولو اردت معرفة ما اعنيه من اخذ رقم عضوية المستخدم لارسالها من صفحه الى اخر , فلو قمت بوضع الفأره على رابط اضافة درس جديد فسوف ترى الشكل التالي :
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php26/26_18.gif
قد تسأل لماذا احتاج الى رقم المستخدم , الاجابه هي بكل بساطه , اننا لو اردنا المستخدم ان يضيف درس فنحتاج ان نقوم بمعرفة من هو المستخدم الذي اضاف الدرس , ويجب ان ندرج في الجدول رقم المستخدم لنربطه بالدرس , هل نسيت تصميم جدول الدورس في قاعدة البيانات , يوجد هناك لدينا حقل اسمه user_id لربط كل مستخدم بالدرس الذي قام بكتابته , :)

الصفحه lesson.php :
هذه الصفحه تجعل المستخدم يقوم بإضافة درس جديد , حيث توفر له نموذج الاضافه الذي يحوي اسم الدرس و نص الدرس واي موضوع يتبع لكي نقوم بإدراج رقم الموضوع وطبعا رقم المستخدم الذي ارسلناه من صفحة member.php لاحظ التالي :
نأخذ رقم المستخدم في البدايه :
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php26/26_19.gif
نستعلم عن المواضيع الموجوده في قاعدة البيانات , واذا لم يكن هناك مواضيع او لم يتم الاستعلام فلا يمكن للمستخدم ان يضيف درس ( هل يعقل ان اضيف درس لا ينتمي الى اي موضوع ؟ )
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php26/26_20.gif
اذا نجح الاستعلام , سوف اقوم بالتحقق من عدد الاصفف التي ارجعها لي الاستعلام , اذا كان عددها صفر , اي لا يوجد اي مواضيع مفعله حاليا ولا يمكن اضافة درس , واذا كان اكثر من صفر فمعناها ان هناك مواضيع ويمكن ان ندرج تحتها بعضا من الدروس , لاحظ التالي :
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php26/26_21.gif
ثم نقوم بعرض نموذج اضافة الدروس كاملا وندرج قائمه بها المواضيع الموجوده لدينا , بحيث يختار المستخدم اي موضوع ينتمي اليه الدرس
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php26/26_22.gif (http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php26/26_22.gif)
لو تلاحظ في الصوره ( اضغط عليها للتكبير ) اننا استخدمنا دالة تكرار لعرض المواضيع على شكل قائمه , ولاحظ اننا نرسل رقم المستخدم بالطريقه التي تعلمناها سابقا ( hidden ) هل وضحت الفكره الان ؟ اذن ناتجنا هو الشكل التالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php26/26_23.gif
الصفحه do_les.php :
هنا كالعاده نتحقق من ان جميع المعلومات موجوده , ثم نضيفها في قاعدة البيانات , ونظهر الخطأ اذا كانت هناك اي اخطاء
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php26/26_24.gif
الصفحه view.php :
هذه الصفحه فقط نستخدم فيها دالة اظهار جميع الدروس , التي كتبناها في الملف output.inc.php
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php26/26_25.gif
وناتج هذه الصفحه هو التالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php26/26_26.gif
الصفحه lesbyyou.php :
هنا نظهر للمستخدم جميع الدروس التي قام بإضافتها بحيث نرسل للصفحه رقم المستخدم كما فعلنا سابقا ونستعلم في قاعدة البيانات عن الدروس التي اضيفت عن طريق هذا الرقم :
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php26/26_27.gif
الصفحه topic.php :
نفس طريقة اضافة الدرس , ولكن نقوم بإستخدام دالة المواضيع بدلا عن دالة الدروس لاحظ التالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php26/26_28.gif
وناتجها هو التالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php26/26_29.gif
الصفحه do_top.php :
نتحقق من المعلومات مره اخرى , ونقوم بإضافة الدرس في قاعدة البيانات :
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php26/26_30.gif
تحميل التطبيق كاملا :
نظرا لطلب كثير من المتعلمين للغة PHP بأن اقوم بوضع الملفات كامله لهذا التطبيق , سأتجيب لذلك , ولكن نصيحة لك اخي المتعلم , قم بعمل كل شي بنفسك ثم بعد ذلك قارن عملك مع هذا العمل , لكي تزيد نسبة الفهم ويسهل عليك العمل , فجيب عليك ان تعرف ان النسخ واللصق لن يفيدك بشيئ في تعلم البرمجه , ولكن يجب عليك المحاوله مره تلو الاخرى الى ان تصل الى هدفك المطلوب :) اضغط هنا لتحميل برنامج الدروس كاملا (http://prog.arccn.net/modules.php?name=Downloads&d_op=getit&lid=10)
سؤال على الدرس :
1 - حاول بأن تقوم بأستكشاف بعض من عيوب هذا البرنامج , وماذا يحتاج لكي يعمل بشكل صحيح , ومالذي ينقصه
2 - قم بعمل الصفحه لفقدان كلمة المرور
3 - حاول ان تفكر بطريقة عمل تفعيل اشتراك
4 - قم بعمل صفحة تجعل المستخدم يقوم بتغيير بياناته وتحديثها
5 - حاول ان تقوم بصفحه لعرض الدروس وتنسيقها

Ghost Rider
, Fri, 16 Mar 2007 16:48:01 +0100
هناك كلمات كثيره محجوزه في لغة PHP , ولها معانيها الخاصه , وهي تعتبر معرفات مسبقه في اللغه وقد اخذنا وتعلمنا الكثير منها , مثلا if و while و include وفي درس اليوم سوف نمر على بعض منها لان لها استخدامات جيده , وماعليك فعله هو معرفتها ثم التفكير في كيفية استخدامها فقط , هل انت مستعد ؟ اذن افتح محرر الاكواد ولنبدأ:

متطلبات قبل البدأ :

مراجعة جميع الدروس السابقه
اهداف الدرس:

الكلمات المحجوزه
متغيرات في اللغه
الداله strip_tags
الداله highlight_file
الداله highlight_string
الداله intval
الداله getenvالكلمات المحجوزه :
هناك كلمات كثيره محجوزه في لغة PHP , ولها معانيها الخاصه , وهي تعتبر معرفات مسبقه في اللغه وقد اخذنا وتعلمنا الكثير منها , مثلا if و while و include وفي درس اليوم سوف نمر على بعض منها لان لها استخدامات جيده , وماعليك فعله هو معرفتها ثم التفكير في كيفية استخدامها فقط , هل انت مستعد ؟ اذن افتح محرر الاكواد ولنبدأ:

الكلمه __FILE__ :
هذه الكلمه تقوم بإعطائك مسار الملف الحالي كاملا , ولنشاهد عمل هذه الداله فاتح محرر الاكواد واكتب التالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php27/27_1.gif
وسوف يكون ناتج هذه العباره هو التالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php27/27_2.gif
لاحظ ان هذه العباره ارجعت لك المسار بالكامل واسم الملف الذي توجد به

الكلمه __LINE__ :
تقوم هذه الكلمه بإعطائك السطر الحالي للملف , لاحظ التالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php27/27_3.gif
وسوف يكون ناتجها هو السطر رقم ( 3 )

الكلمه isset() :
تقوم هذه الكلمه بالتحقق هل المتغير موجود ام لا , فمثلا لو نريد ان تحقق هل المتغير a موجود ام لا سوف نستخدمها كالتالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php27/27_4.gif
لاحظ اننا في البدايه لم ننشئ متغير اسمه a لذلك طبع لنا غير موجود ,, ولكن عندما انشأناه ( حتى ولو كانت قيمته خاليه , اهم شي المتغير موجود ) فقط طبع العباره موجود

الكلمه unset() :
تقوم هذه الكلمه بتدمير المتغير ,, فلو لدينا متغير a واردنا ان نلغيه سوف نقوم بإستخدام هذه الداله ,, لاحظ التالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php27/27_5.gif
ملاحظه : هذه العباره لا تقوم بإرجاع اي قيمه , فقط تقوم بعملها وهو الغاء المتغير

الكلمه empty() :
تتحقق لنا هذه الكلمه من المتغير , هل توجد به قيمة ام لا ,, عملها بسيط لاحظ التالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php27/27_6.gif
متغيرات في اللغه :
تعلمنا سابقا ان لدينا مصفوفه اسمها $_POST و مصفوفه اسمها $_GET اليس ذلك صحيحا ؟ هنا سوف نتعلم مصفوفه جديده اسمها $_SERVER وهي مصفوفه تحوي معلومات عن السيرفر , يمكننا استخدام المتغيرات التي سوف اتحدث عنها الان من غير هذه المصفوفه ولكن الافضل ولا تنسى كلمتي هذه الافضل هو ان نقوم بإستخدامها بواسطه هذه المصفوفه لانها أامن لنا, لنبدأ بمشاهدة هذه المتغيرات وسوف تذهل من نواتجها , ضع يديك على لوحة المفاتيح ولنبدأ :

'PHP_SELF'

هذا المتغير يقوم بإعطائك اسم الملف الحالي الذي تعمل عليه ( الملف الذي يشتغل في اللحظه ) وكما قلت في الاعلى عندما شددت على كلمة الافضل حاول ان تستخدمه بالطريقه الامنه وهي $_SERVER['PHP_SELF'] وطبعا يمكنك ان تستخدم هذا المتغير بالطريقه $PHP_SELF ولكن انا نصحتك بالطريقه الامنه والافضل والخيار يعود اليك, افتح محرر الاكواد لنشاهد عمل هذا المتغير , قم بكتابة التالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php27/27_7.gif

'HTTP_REFERER'

سوف تستخدم هذه الداله اذا اردت معرفة الصفحه التي قدم منها الزائر ( اذا وجدت ) ولكني عندما قرأت دليل استخدام لغة PHP فقد وجدت عبارة تقول انه لا يمكن الوثوق في هذه الداله , لان الاستضافه يمكن ان تقوم بتعطيلها اذا ارادت وطريقة استخدامها هو كالتالي عزيزي الزائر:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php27/27_8.gif

'REMOTE_ADDR'

اذا اردنا معرفة رقم ( الاي بي ) = ( IP ) للزائر فسوف نستخدم هذا المتغير , وهو في الحقيقه لا يعمل بشكل صحيح , لذا نحتاج الى بعض الاوامر الاخرى لتحديد رقم الاي بي الخاص بالزائر , ولكن قد تجد منه منفعه في بعض الاوقات ,, خاصه اذا كنت على سيرفر شخصي خاص بك , لاحظ التالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php27/27_9.gif
هناك المزيد من هذه المتغيرات وهي كثيره جدا , ولا يمكن عدها من كثرتها , وقد شرحت لك ما تحتاجه هنا واذا اردت الزياده فاذهب الى موقع PHP وسوف تجد جميع المتغيرات الاخرى اضغط هنا لزيارة موقع PHP (http://www.php.net/manual/en/reserved.variables.php)

الداله strip_tags :
هذه الداله نستخدمها لفلترة النص ,, بحيث لو كانت به اسطر PHP او HTML نقوم بإستبعادها من النص وطباعته من غيرها ,, وتستخدم هذه الداله من ناحيه امنيه في معظم الاحيان , المدخل الاول هو النص المراد فلترته والمدخل الثاني هو اختياري وتضع به الوسوم التي لا ترغب في فلترتها لاحظ الكود التالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php27/27_10.gif
وناتج عملنا هو التالي :
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php27/27_11.gif
الداله highlight_file :
هذه الداله تقوم بتلوين كود PHP الذي قمت بكتابته , على سبيل المثال لديك ملف اسمه code.php وبه الكود التالي :
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php27/27_12.gif
ونريد عرض هذا الكود بشكل مرتب وملون , فسوف ننشئ ملف اسمه show.php ( على سبيل المثال ) ونكتب التالي :
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php27/27_13.gif
لا تنسى ان الملف في نفس المجلد , فسوف يكون ناتج تشغيل الملف show.php هو الشكل التالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php27/27_14.gif
الداله highlight_string :
تقوم هذه الداله بنفس عمل التي بالاعلى ولكن الفرق ان الاولى لملف وهذه لنص , لاحظ التالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php27/27_15.gif
والناتج هو :
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php27/27_16.gif
الداله intval :
اذا اردت معرفة ( العدد الصحيح ) لقيمة اي متغير فسوف تقوم بإستخدام هذه الداله :
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php27/27_17.gif
الداله getenv :
تقوم هذه الداله الجميله بإعطائك قيمة المتغير لل ( environment ) = ( البيئيه ) واقصد بهذه المتغيرات التي تعلمناها في الاعلى مثل ( REMOTE_ADDR ) وغيرها , هل تذكر عندما قلنا ان العباره ( REMOTE_ADDR ) لا تقم بإعطائك رقم ( الاي بي ) الصحيح ؟ بمساعدة هذه الداله سوف تحصل على الاي بي الصحيح للمستخدم , طريقة عملها كالتالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php27/27_18.gif
ولمعرفة المتغيرات البيئيه الاخرى يمكنك رؤيتها على الصفحه التاليه اضغط للذهاب الى صفحة المتغيرات البيئيه (http://hoohoo.ncsa.uiuc.edu/cgi/env.html)
سؤال على الدرس :
1 - قم بإنشاء نموذج يذهب الى نفس الصفحه وليس الى صفحه اخرى , وقم بمعاجلة المدخلات ( مساعده : استخدم isset و PHP_SELF ) مع طباعة المعلومات الخاصه بالزائر

Ghost Rider
, Fri, 16 Mar 2007 16:49:27 +0100
هناك مشكلة كبيره في لغة HTML وذلك لانها لا تستطيع تحديد حالة المستخدم, ونعني بذلك انها لا تستطيع تتبع المستخدم من صفحه الى اخرى, هل تحتاج الى مثال ؟ فمثلا لو قام المستخدم بتنفيذ طلب اظهار صفحه ما, ثم طلب اظهار صفحه اخرى, فلا يمكن للغة HTML معرفة اذا كان الطلب تم من نفس المستخدم.....

متطلبات قبل البدأ :

مراجعة جميع الدروس السابقه
اهداف الدرس:

تعريف الجلسات
الكوكيز ( Cookies )
انشاء الجلسات بشكل مبسط
مثال مبسط على الجلساتتعريف الجلسات :
هناك مشكلة كبيره في لغة HTML وذلك لانها لا تستطيع تحديد حالة المستخدم, ونعني بذلك انها لا تستطيع تتبع المستخدم من صفحه الى اخرى, هل تحتاج الى مثال ؟ فمثلا لو قام المستخدم بتنفيذ طلب اظهار صفحه ما, ثم طلب اظهار صفحه اخرى, فلا يمكن للغة HTML معرفة اذا كان الطلب تم من نفس المستخدم. وجدت الجلسات ليتم تتبع حالة المستخدم اثناء تصفحه لموقع معين. فإذا استطعنا ذلك, يمكننا عمل تسجيل دخول المستخدم واظهار بعض محتويات الصفحه على حسب درجته ومستوى تحكمه في الموقع. في لغة PHP الجلسه الواحده عباره عن رقم ( مشفر ) يتم انشاءه بطريقة عشوائيه, ويحفظ هذا الرقم عند المستخدم ( وليس السيرفر ) على طريقتين, اما في الجهاز على شكل كوكيز او على شكل رقم ينتقل من صفحه الى اخرى. هذا الرقم يقوم بالسماح لنا بتسجيل متغيرات اسمها متغيرات الجلسات ومحتويات هذه المتغيرات يتم تخزينها في جهة السيرفر ( وليس على جهاز المستخدم ) والذي يظهر للمستخدم فقط ويمكن رؤيته من قبله هو هذا الرقم العشوائي المستحيل ان يتم فهمه. هل فهمت الجلسات الى الان ؟ انا متأكد انك قمت بملاحظة هذا الرقم عند تصفحك لاحدى المواقع ويكون شكل هذا الرقم كالتالي :
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php28/28_1.gif
الكوكيز ( Cookies ) :
الكوكيز او ما يسمى باللغه العربيه ( الكعكات ) وهو اسم لا احب اطلاقه على الكويكز, عباره عن قطعه معلومات تحفظ في جهاز المستخدم ويستطيع الوصول لها فقط من قام بإنشائها ( الموقع ). دعني اختصر لك الامر لا تستخدم الكوكيز ! وهذا الذي سوف تتعلمه عند قرائة اي كتاب او اي درس عن الامان في الانترنت. حيث ان اكثر المتصفحات الجديده ومستويات الامان الموجوده بها تمنع الموقع من وضع اي معلومات في جهاز المستخدم, او على سبيل المثال المستخدم قد قام بإلغاء الكوكيز في جهازه, وحينها لن يستطيع الحصول على المراد وصاحب الموقع لن يحصل على مراده. اذن لنجلعها بكل بساطه ( لا تقم بإستخدام الكويكز في برامجك ) !
انشاء الجلسات بشكل مبسط :
سوف يكون محور درسنا عن الجلسات هو ارسال رقم الجلسه من صفحه الى اخرى وتتبع المستخدم بهذه الطريقه. رأينا في المثال بالاعلى ان رقم الجلسه موجود في المتصفح, فكر للحظات هل هذه طريقه جيده لارسال المعلومات ؟ بحيث انها ظاهره للمستخدم و ايشخص اخرى, طبعا لا ! اذن نحتاج ان نقوم بإرسال هذه المعلومات بطريقه مخفيه بحيث ان برنامج هو الوحيد الذي يستطيع استعمالها. هذه الطريقه تبدأ من لحظة دخول المستخدم الى الموقع وانشاء رقم الجلسه الخاص به, وينتهي بمجرد اغلاق المستخدم للصفحه, حيث يتم تدمير هذه الجلسه. لنقم بجعلها مبسطه وعلى شكل خطوات:
<LI dir=rtl>بدأ الجلسه
<LI dir=rtl>تسجيل متغير الجلسه
<LI dir=rtl>استخدام متغير الجلسه
الغاء متغير الجلسه وتدمير الجلسه
ليس بالضروره ان تكون جميع هذه الخطوات في صفحه برمجيه واحده, ويمكن ان تكون على عدة صفحات, لا تنسى ذلك !

بدأ الجلسه

يجب علينا ان نقوم بتفعيل ( بدأ ) الجلسات قبل عمل اي شي في الصفحه ويمكن فعل ذلك عن بالطريقه التاليه :
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php28/28_2.gif
هذه الداله تقوم بالتحقق هل يوجد جلسه لهذا المستخدم ؟ اذا لا توجد جلسه تقوم بإنشاء جلسه خاصه بهذا المستخدم, فلو على سبيل المثال احمد قام بالدخول على الموقع فسوف يكون له جلسه خاصه به , ولو دخل خالد الموقع في نفس الوقت فسوف يكون له رقم اخر خاص به وهكذا. اما اذا كانت هناك جلسه خاصه بالمستخدم فسوف تقوم هذه الداله برفع المتغيرات التي تحويها هذه الجلسه لكي يتمكن لنا استعمالها في برنامجنا, ويجب عليك التذكر ان بدأ الجلسات في كل برامجك هو طريقه جيده بل ممتازه اذا كان برنامجك يعتمد على الجلسات.

تسجيل متغير الجلسه

هل تذكر المصفوفه $_GET والمصفوفه $_POST والمصفوفه $_SERVER سوف نتعلم الان مصفوفه جديده واسمها $_SESSION وهذه المصفوفه تقوم بتخزين كل المتغيرات بها. فلو اردنا ان نقوم بإنشاء متغير جلسه اسمه ( الاسم ) ونضع به القيمه 5 سوف نقوم بالتالي :
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php28/28_3.gif

استخدام متغير الجلسه

لكي يمكنك استخدام متغير جلسه يجب علينا في البدايه بدأ الجلسه ثم استخدام المتغير عن طريق المصفوفه بالطريقه التاليه :
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php28/28_4.gif
نفس الطرق التي تعلمناها في السابق, لا تخف من الجلسات فهي اسهل من السهوله. و اذا اردت التحقق من وجود متغير الجلسه ام لا , فسوف تعرف ذلك؟ ولتذكيرك تستخدم الطريقه isset او صديقتها empty كما تعلمنا مسبقا كالتالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php28/28_5.gif

الغاء متغير الجلسه و تدمير الجلسه

عند الانتهاء من استعمال متغير جلسه ما, يمكنك الغاء تسجيله بالطريقه التاليه :
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php28/28_6.gif
والان بعد ان قمنا بإلغاء هذا المتغير نريد ان نقوم بتدمير الجلسه كامله لكي نقوم بالتنظيف, ويمكن عملها كالتالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php28/28_7.gif
مثال مبسط على الجلسات :
اعتقد انك تشعر بغرابه الان, هل هذه هي فقط الجلسات !! نعم عزيزي, هذه هي الجلسات ويمكن ان كلامي المبسط عنها لم يوضح الفكره, لنقم الان بعمل مثال يشرح لنا طريقة عمل الجلسات لكي توضح لك الصوره. سوف نقوم بإنشاء 3 صفحات وتتبع الجلسات بها. في الصفحه الاولى ( ses1.php ) سوف نقوم ببدأ الجلسه , وتسجيل متغير اسمه example لاحظ التالي :
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php28/28_8.gif
و سوف يكون نتيجة الصفحه الاولى هو التالي :
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php28/28_9.gif
لاحظ اننا بدأنا الجلسه ثم انشأنا المتغير , وعند انتهاء اسطرنا في البرنامج سوف تكون الجلسه في حالة تجميد الى ان نقوم ببدأ الجلسه في الصفحه التاليه. الان ننشئ صفحه جديده اسمها ( ses2.php ) وسوف يكون محتواها هو التالي :
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php28/28_10.gif
لو تلاحظ اننا بدأنا الجلسه في بداية الصفحه لكي نقوم بتحميل جميع المتغيرات ثم طبعنا محتوى متغير الجلسه واخيرا قمنا بإلغاء متغير الجلسه. دقق في الصفحه وسوف ترى اننا لم ننشئ متغير جديد ولكن نفس المتغير الذي انشأناه في الصفحه الاولى انتقل الى الصفحه الثانيه. وسوف يكون ناتج هذه الصفحه هو التالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php28/28_11.gif
في الصفحه الاخير نقوم بنفس العمل ولكن عند طباعة المتغير لن نجد اي قيمه لأننا قمنا بإلغاء المتغير في الصفحه رقم ( 2 ) اليس كذلك ؟ اذن الصفحه ( ses3.php ) سوف تحوي الكود التالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php28/28_12.gif
عند عمل هذا الكود لن يقوم بطباعة محتوى المتغير لاننا الغيناه من قبل وسوف نقوم في الاخير بتدمير الجلسه كاملا, ولو حاولت ان تقوم بالدخول على الصفحه ( ses2.php ) من غير الدخول على الصفحه ( ses1.php ) فلن يوجد اي شيئ بالمتغير وهذا يؤكد لنا اننا نتابع المستخدم من صفحه الى اخرى.
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php28/28_13.gif
ملاحظه ( ضروري, ضروري, ضروري ان تقوم ببدأ الجلسه قبل ان تقوم بطباعة اي شيئ الى المتصفح والا لن يقوم برنامج بالعمل بشكل صحيح, دائما ابدأ الجلسه ثم اكتب الكود المتبقي )
سؤال على الدرس :
1 - حاول ان تقوم بعمل نظام تسجيل يعتمد على الجلسات, فقط قم بمحاولات لكي تستعد للدرس القادم

Ghost Rider
, Fri, 16 Mar 2007 16:50:39 +0100
نريد ان نقوم بفعل شيئ مفيد بإستخدام الجلسات, وسوف نستخدمها اليوم في عمل برنامج تسجيل مبسط , لكي نقوم بوضع النكهات على برامجنا , فكرة عمل هذا البرنامج بسيطه , نموذج دخول ثم التحقق من اسم المستخدم وكلمة المرور , وبعد ذلك....

متطلبات قبل البدأ :

مراجعة الدرس السابق ( الجلسات )
اهداف الدرس:

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

مختصرات :
لا اريد ان اقوم بشرح ما تعلمناه سابقا من جديد , لذلك سأذكر متطلبات عمل البرنامج في هذه النقطه ويجب عليك عزيزي الزائر ان تقوم بعملها بنفسك ولكي تقوم بإستراجع المعلومات يمكنك الرجوع الى الدرس رقم ( 24 و 25 و 26 ). ما نحتاجه هو
<LI dir=rtl>قاعدة بيانات تحتوي على جدول اسمه ( member ) توجد به الحقول ( username ) و ( password )
<LI dir=rtl>صفحة تسجيل دخول
<LI dir=rtl>صفحة تسجيل خروج
<LI dir=rtl>صفحة خاصه بالاعضاء
صفحه اخرى للتحقق من الجلسات ( مجرد توضيح كيف عمل بقية الصفحات بنظام الجلسات )
الدخول الى صفحة الاعضاء :
الان بعد عملنا على متطلبات الموجوده في ( مختصرات ) نأتي الى محور درسنا اليوم, كما تعلمنا سابقا يجب ان نبدأ كل صفحه بالجلسات ( قبل طباعة اي شي الى المتصفح ) اليس ذلك صحيحا ؟ صفحة الاعضاء تعمل كالتالي, اذا كان متغير الجلسه ( user ) غير موجود نقوم بأخذ مدخلات اسم المستخدم وكلمة المرور والتحقق عنها من قاعدة البيانات , ثم نقوم بوضع اسم المستخدم داخل متغير الجلسه, غير ذلك نقوم بإظهار خطأ للمستخدم بأن اسم المستخدم وكلمة المرور غير صحيحه , او انه يجب عليه تسجيل الدخول لرؤية هذه الصفحه ,وفي الاخير اذا كان متغير الجلسه موجود وتوجد به قيمه نقوم بإظهار محتوى الصفحه للمستخدم. لاحظ الكود التالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php29/29_1.gif
بالنسبه للداله ( loginCheck ) فهي داله قمت انا بإنشائها للتحقق من اسم المستخدم وكلمة المرور من قاعدة البيانات.

الصفحات الاخرى :
الان , بنفس الطريقه في كل صفحه نقوم بوضع كود التحقق من الجلسات , بحيث ان لو لدينا صفحه اسمها ( view.php ) والمستخدم لم يقوم بتسجيل الدخول فلن يمكنه مشاهدة محتوى الصفحه واذا كان قد قام بتسجيل الدخول ولم يقوم بإغلاق المتصفح ( اغلاق المتصفح يؤدي الى تدمير الجلسه ) فيمكنه التنقل بين الصفحات من غير تسجيل الدخول مره اخرى لاحظ الكود التالي :
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php29/29_2.gif
تسجيل الخروج :
لو اراد المستخدم تسجيل الخروج , فهناك طريقتين ,, اما اغلاق المتصفح واما الذهاب الى صفحة تسجيل الخروج ( وهي الافضل ) وهي على خطوات
<LI dir=rtl>نقوم بوضع متغير الجلسه في متغير جديد
<LI dir=rtl>نقوم بإلغاء مصفوفة الجلسات
<LI dir=rtl>نقوم بتدمير الجلسه
التحقق من ان الالغاء والتدمير تم بشكل صحيح
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php29/29_3.gif
سؤال على الدرس :
1 - قم بإضافة ( شبيه ) لنظام التسجيل المبسط في برنامج الدروس والتأكد من انه يعمل بشكل صحيح

Ghost Rider
, Fri, 16 Mar 2007 16:51:46 +0100
تعلمنا كيف نقوم ببرمجة موقع بلغة php ورأينا كم هي سهله وجميله في التعامل, ولكن استخدام لغة php لا يقتصر على اصدار ملفات html او php بل يسمع لك ايضا بإنشاء الصور بأنواعها سواء كانت متحركه او ثابته. توجد هناك مكتبة خاصه لعمل هذه الصور وتسمى مكتبة GD والاسم الكامل لها هو ( GD Library ).

متطلبات قبل البدأ :

مراجعة الدرس السابق ( الجلسات )
اهداف الدرس:

نبذه عن انواع الصور
انشاء الصورنبذة عن انواع الصور :
تعلمنا كيف نقوم ببرمجة موقع بلغة php ورأينا كم هي سهله وجميله في التعامل, ولكن استخدام لغة php لا يقتصر على اصدار ملفات html او php بل يسمع لك ايضا بإنشاء الصور بأنواعها سواء كانت متحركه او ثابته. توجد هناك مكتبة خاصه لعمل هذه الصور وتسمى مكتبة GD والاسم الكامل لها هو ( GD Library (http://www.boutell.com/gd/) ). لهذه المكتبة اصدارات كثيره وسوف نتكلم عن الاصدار رقم 2.0.28 وهو متوافق مع الانواع JPEG و GIF و PNG. كلها تعمل بنفس الطريقه, هل وصلت الى مرحلة الحماسه للتعلم , اذن لنبدأ بتعريف هذه الصور واحده تلو الاخرى.

JPEG :

تنطق هذه العباره بالطريقه ( جاي-بيق ) وهي اختصار لـ ( Joint Photographic Experts Group ). انا متأ:د انك تعرف هذه النوعيه من الصور فنستخدمها كثيرا اذا اردنا حفظ الصور وهي مفيده اذا كانت في الصوره الوان كثيره وتدرجات كثيره. هذه النوعيه ليست جيده عند استخدام رسوم الخطوط و النصوص و الاجزاء التي تحتوي على لون جامد واحد. يمكنك معرفة امور اكثر عن هذه النوعيه عن طريق الموقع الخاص بهم موقع JPEG (http://www.jpeg.org/).

PNG :

تنطق هذه العباره بالطريقه ( بنق ) وهي اختصار لـ ( Portable Network Graphics ) وخصائص هذه النوعيه متماثله مع النوعية GIF وهي تعتبر بديلا للنوعيه GIF. وسبب هذا البديل هو ان PNG اكثر جوده من النوع GIF. ويمكنك معرفة معلومات اكثر عن هذا النوع عن طريق الموقع الخاص بهم موقع PNG (http://www.libpng.org/pub/png/)

GIF :

هذه النوعيه اختصار لـ ( Graphics Interchange Format ) وتستخدم كثيره في مواقع الانترنت لانها خفيفه وتستطيع عمل الصور المتحركهز تنصح بعض الكتب بإستخدام النوعيه PNG بدل من هذه النوعيه لانها اسهل.

انشاء الصور :
لانشاء الصور في لغة PHP نتبع 4 خطوات وهي مفيده جدا وتسهل علينا العمل
<LI dir=rtl>انشاء الخلفيه المراد العمل عليها
<LI dir=rtl>رسم المجسمات او الكتابات على هذه الخلفيه
<LI dir=rtl>تصدير هذه الصور او العمل
تنظيف العمل

لنقم بعمل مثال بسيط على هذه الطريقه لنفهم كيفية العمل
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php30/30_1.gif
بعد تنفيذ هذا العمل سوف يكون الناتج هو التالي :
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php30/30_2.gif
ملاحظه : في حالة عدم ظهور الصوره قم بكتابة الكود بالشكل التالي, اضغط هنا (http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php30/30_5.gif)
لنقم الان بشرح عملنا خطوه خطوه

اعداد الصوره:
اول عمل قمنا بفعله هو انشاء صوره لنقم بالرسم عليها لنقل انها كراسة الرسم الخاصه بنا , وهناك طريقتين لعمل هذه الطريقه الاولى بإستخدام الداله ImageCreate وهي تأخذ مدخلان العرض والطول بالترتيب وسوف تقوم بإرجاع الصوره التي قمنا بعملها
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php30/30_3.gif
الطريقه الثانيه هي انشاء خلفية العمل من صوره موجوده مسبقا لدينا بأي نوع كانت بإستخدام الداله ImageCreateFromPng او ImageCreateFromJpeg او ImageCreateFromGif وهي تأذخ مدخل واحد وهو اسم الصوره التي نريد العمل عليها ( اسم الملف ) والطريقه كالتالي :
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php30/30_4.gif

رسم الصوره:
قمنا بعد ذلك برسم الاشكال التي نريدها على الصوره, وفي الحقيقه هناك طريقتان لعمل ذلك , اولا يجب ان نقوم بإختيار الالوان التي نريدها , وكما نعرف انها مكونه من 3 الوان وهي الاحمر والاخضر والازرق , ويمكن استخدام هذه الالوان عن طريق الداله ImageColorAllocate وهي تأخذ 4 مدخلات وهي الصوره , اللون الاحمر واللون الاخضر والازرق وقد عملنا في مثالنا لونان وهما الابيض والاسود. وهذه الداله تقوم بإرجاع اللون الذي سنستخدمه لاحقا.
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php30/30_6.gif
الطريقه الثانيه هو رسم ما نريد ويكون على اربع نقاط نحتاج اليها , الصوره , الاحداثيات , اللون , معلومات النص ( اذا كان نص ) , ويمكننا مشاهدة عملنا في مثالنا هنا:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php30/30_7.gif
الداله ImageFIll تقوم بتعبة الصوره وتأخذ 4 مدخلات وهي الصوره , الاحداث السيني , الاحداث الصادي , واللون.
الداله ImageLine تقوم برسم خط وتأخذ 6 مدخلات وهي , الصوره , بداية الاحداث السيني , بداية الاحداث الصادي , نهاية الاحداث السيني , نهاية الاحداث الصادي , اللون.
الداله ImageString تقوم بكتابة نص على الصوره وتأخذ 6 مدخلات , الصوره , نوع الخط , الاحداث السيني , الاحداث الصادي , النص , اللون
** لاحظ ان ( 0 , 0 ) معناها الركن العلوي الايسر

اصدار الصوره:
يمكننا اصدار الصور بطريقتين , الطريقه الاولى الى المتصفح , الطريقه الثانيه حفظها على شكل ملف, وفي مثالنا استخدمنا الطريقه الاولى وهي تصدير الصوره الى المتصفح. ويكون العمل على خطوتين , الخطوه الاولى يجب ان نخبر المتصفح اننا نريد تصدير صور بدلا من مجرد نصوص او HTML ويمكننا عمل ذلك عن طريق الداله Header التي تعملناها سابقا.
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php30/30_8.gif
في العاده عندما نقوم بتصدير ملف HTML او PHP يكون الارسال تلقائيا بالشكل التالي *******-type: text/html وهو يخبر المتصفح كيف ان يقوم بترجمة المعلومات. الخطوه الثانيه نقوم بإخراج الصوره الى المتصفح بإستخدامنا للداله ImagePng او ImageJpeg او ImageGif وقمنا بعمل ذلك في ملفنا بالطريقه التاليه
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php30/30_9.gif
في حالة اردنا ان نقوم بتصدير الصوره الى ملف نقوم بكتابة اسم الملف كمدخل ثاني الى الداله , ويكون بالطريقه التاليه :
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php30/30_10.gif

تنظيف العمل:
بعد ان تقوم بطباعة الصوره والانتهاء من العمل يجب ان تقوم بإرجاع جميع ما استخدمه لانشاء الصوره للخادم وذلك يكون بتدمير الصوره التي قمت بإنشائها وذلك عن طريق الداله ImageDestroy وقمنا بعمل ذلك في مثالنا بالشكل التالي:
http://i10.photobucket.com/albums/a103/bramjnet/t3laeem/php30/30_11.gif
هذي هي مكتبة الصور ( GD ) في لغة PHP بشكل مبسط جدا , واذا اردت ان تخوذ بها زياده لكي تحترف التعامل بها يمكنك مراجعة ملف الاستخدام الخاص بلغة PHP عن طريق الموقع الخاص بهم, موقع PHP (http://www.php.net/)
سؤال على الدرس :
1 - لا يوجد