![]() |
||||
دروس و نقاش في لغة ال PHP - نسخة قابلة للطباعة +- نادي الفكر العربي (http://www.nadyelfikr.com) +-- المنتدى: عـــــــــلــــــــــوم (http://www.nadyelfikr.com/forumdisplay.php?fid=6) +--- المنتدى: حـاسوب و شبكـات (http://www.nadyelfikr.com/forumdisplay.php?fid=85) +--- الموضوع: دروس و نقاش في لغة ال PHP (/showthread.php?tid=33267) |
||||
دروس و نقاش في لغة ال PHP - ابن سوريا - 05-18-2004 أفتتح هذا الموضوع لمعرفة إذا كان يهمكم أن نقوم بدروس عملية للغة ال PHP. خطر لي هذا الموضوع بعد مراسلة بيني و بين صديق يسألني بعض الأسئلة حول هذه اللغة و لغة قواعد المعطيات ال MYSQL. فأحببت أن أعرض بعض هذه الدروس هنا ليستفيد منها العدد الأكبر من الأصدقاء . سأقوم بعرض الدرس الأول البسيط المبسط. على حلقات. و يمكنكم طرح أي أسئلة خلال هذه الدروس. سأبدأ في البداية بعرض عام و مختصر للغة ال PHP و قواعد المعطيات MYSQL. بالإضافة لعرض آخر للأدوات و البرامج التي يمكن استخدامها لتعلم اللغة, و متابعة الدروس. سأستخدم موقعي لعرض أمثلة الدروس. و يفضل إعادة تركيبها على أجهزتكم الخاصة و تجربتها. سأبدأ بهذه الدروس غداً, ثم أضيف درسا ًواحداً باليوم. مع فائق تحياتي. ابن سوريا. دروس و نقاش في لغة ال PHP - جادمون - 05-18-2004 السلام للجميع : فكرة رائعة ومفيدة .. شكرا ابن سوريا(f) دروس و نقاش في لغة ال PHP - ابن سوريا - 05-20-2004 (f) عزيزي جاد. أما بعد , و بعد الصلاة و السلام على أطيب الخلق و خالق المعرفة "الإنسان": مقدمة: 1- تعريف: لغة ال PHP و تعني أحرفها "Personnal Home Page", هي لغة برمجة تختص بإنشاء صفحات الويب (جهة سيرفر/مخدم الويب) و هي لغة وليدة و قريبة من اللغة المشهورة PERL(أنظر للمحة التاريخية) . و كما PERL فإنها لغة "مترجمة" (Interpreté) و ليست لغة معالجة (Compilé) (راجع تفسير المصطلحين في جزء شرح مبادئ اللغة). تتميز هذه اللغة بكونها لا تعتمد على نظام التشغيل للسيرفر و لذلك انتشرت بسهولة في عالم الأنترنت الذي يعتبر مكاناً لأنظمة خليطة و متنوعة. كما تتميز بسهولتها مقارنة مع اللغات الأخرى التي كانت شائعة قبلها (C, Perl ...). 2- لمحة تاريحية عن لغة ال PHP : في البدء كان ال PERL و كانت لغة منتشرة بكثرة في الأنترنت و خاصة بأنظمة عالم (يونيكس) [1]. لكن لغة ال PERL و التي تعتبر لغة أقدم من الأنترنت نفسه و تعتمد أساساً للبرمجة التقليدية ضمن أنظمة التشغيل , اعتبرت صعبة و قليلة المرونة في عالم الويب.و شرح هذه اللغة يحتاج لكتب ليست هذه اللمحة التاريخية مجالها. لذا ففي البداية قام أحد الطلاب "Rasmus Lerdorf" بإنشاء "مكتبة" أدوات في لغة ال PERL في عام 1995 لتسهيل كتابة ال CV الشخصية على الأنترنت و نشر مكتبته هذه على الويب و أسماها : "Personnal Home Page Tools" ثم قام بإعادة كتابتها بلغة ال C مضيفاً إليها شيئاً فشيئاً أدوات لمعالجة قواعد المعطيات .. الخ. بعد نشره لمكتبته الكبيرة على الأنترنت ليستفيد منها أكبر عدد ممكن من المستخدمين و المبرمجين و ليقوموا كذلك بالإضافة لها, تحولت المكتبة للغة حملت اسم: (PHP/FI)"Personal Home Page / Forms Interpreter" أخيراً نشأت لغة ال PHP 3.0 بإعادة كتابتها و بالتعاون بين ثلاثة أشخاص: Rasmus Lerdorf, Andi Gutmans,Zeev Suraski و ذلك عام 1998 3- شرح مختصر لمبادئ لغة ال PHP -الفرق بين ال PHP و ال HTML بل أن السؤال الحقيقي يجب أن يكون ما هو الرابط بينهما. ال HTML هي "لغة" عرض للصفحات, و هي حقائب يفهمها المتصفح و ليست لغة بالمعنى الحقيقي للكلمة. فال HTML هي لغة يفهمها المتصفح و يعرف من خلالها كيفية عرض المعطيات و النصوص , فهذا نص كبير و هذا لونه أخضر و ذاك أحمر أو مخطط, و كذلك ترتيب الأسطر و توزيع الجداول .. الخ. بينما لغة ال PHP فهي لغة معالجة تعالج المعطيات التي تحصل عليها من قاعدة المعطيات أو من المتصفح و يقوم بتنفيذها السيرفر نفسه. أما النتيجة النهائية لبرنامج PHP فهو محتوى HTML. ربما سيتضح الأمر أكثر بمثال عملي. لناخذ كمثال صفحات نادي الفكر العربي. فما الذي يحدث عندما نكتب بالمتصفح هذا العنوان: http://www.nadyelfikr.net/index.php المتصفح هو الزبون و عندما تكتب هذا العنوان فيه فسيفهم أنك تريد الوصول لصفحة index.php في موقع : nadyelfikr.net و أنت تريد الوصول إليها عن طريق البروتوكول http لذا فيقوم بإرسال طلب على الأنترنت للحصول على هذه الصفحة. بعد عبور للشبكة,و "المرمطة" بالمواصلات سيصل الطلب لسيرفر النادي. السيرفر سيحول الطلب - لأن البروتوكول هو HTTP - لسيرفر الويب (Apache عادة) عندما يعرف سيرفر الويب أن المطلوب هي صفحة PHP سيوزعه للمعالج PHP ليترجم الصفحة و تعليماتها و يرسل له النتيجة. هذا المعالج سيقوم بمعالجة الصفحة و ترجمة كل تعليمة فيها , مثلاً الإتصال بقاعدة المعطيات و طلب المعلومات التي بها أو جزء منها. أو حسابات معقدة ... الخ بالنهاية فإن البرنامج سيصمم محتوى HTML بناء على النتائج التي عنده و بناء على طريقة برمجة الصفحة و يرسلها لسيرفر الويب و الذي سيحولها بدوره للجهاز و المتصفح الذي طلب الصفحة. بينما لو كانت الصفحة هي صفحة HTML فإن السيرفر سيبعث محتوى الصفحة كما هو بدون أي معالجة. لنفهم هذا الفارق يمكن أن نقارن في مطعم ما الذي يحصل عندما نطلب وجبة أو نطلب شوكة. فعندما نطلب فاصولياء بالرز مثلاً من السيرفر (الخادم) فإنه سيذهب و يطلب من طباخيه أن يطبقوا وصفة الفاصولياء بالرز ثم يأتيك بالوجبة بعد معالجتها. أي أنه لن يأتيك بالرز الني و الفاصولياء النية. بينما عندما تطلب شوكة فسيعطيك الشوكة دون أي معالجة وسيطة. الزبون بحالتنا هو المتصفح و ليس المستخدم النهائي. نحن هنا سندخل للمطبخ و نحاول فهم طريقة عمل الوجبات. :) - لغة ويب عملية و سهلة , مستويات البرمجة: لغة ال PHP هي لغة Interpretation و ليست لغة Compilation أي أنها لغة تحتاج بكل طلب من السيرفر لمترجم يحول تعليماتها لتعليمات مفهومة من نظام التشغيل. بعكس لغة مثل ال C بحيث تكون نتيجتها النهائية برنامج مكتوب أو معالج للغة النظام نفسه. لغة ال Compilation ميزتها سرعتها, و مشكلتها أنها تعتمد على نواة النظام المستخدم من قبل السيرفر, لذلك تم الإستغناء عنها في أغلب برامج الأنترنت الذي يحتوي أنظمة هجينة و مختلفة. أي تعتبر لغة ال PHP ملائمة تماماً للأنترنت. كما أنها لغة متطورة بما أنها مجانية و كودها موجود لكل من يرغب بتطويرها, و بكثرة استخدمها تطورت هي بذاتها بشكل سريع جداً. هذه اللغة تستغل قواعد المعطيات كلها و لا سيما ال MYSQL بسهولة, و يمكن معها بسهولة أيضاً إحترام فصل المستويات الثلاث لأي برنامج. المستويات الثلاث هي : المعطيات , المعالجة, العرض. بحالة برنامج النادي فيمكن أن نعرف هذه المستويات الثلاثة ب : المعطيات : قاعدة MYSQL المعالجة : لغة ال PHP العرض : HTML البرامج الأفضل هي التي تفصل العرض (HTML) عن المعالجة, و رغم صعوبة هذا العمل في البداية فلقد أصبح أكثر سهولة في السنوات الأخيرة. في الأمثلة التي سنراها قريباً سنفهم أهمية الفصل بين ال HTML و ال PHP. - أهمية فصل المعطيات عن العرض : في برامج البوابات و المنتديات الأولى التي ظهرت على الأنترنت كانت الصفحات تحفظ بشكل HTML من خلال برامج PERL يختلط بها المعطيات بالعرض لها. هذا الأمر يجعل أي مهمة لتطوير البرنامج مهمة شبه مستحيلة. استخدام قواعد المعطيات ظهرت كرد على هذه المشكلة العويصة. فنقوم حالياً بحفظ المعطيات : كنصوص الردود بالمواضيع و المعلومات المتعلقة بها. و جميع المعلومات التي لا تتعلق بالمظهر للمنتدى. بينما يحفظ المظهر أو العرض بصفحات HTML أو حتى يمكن حفظ المحتوى HTML بقاعدة المعطيات على شكل : TEMPLATE و ال TEMPLATE هو نوع من النمذجة لطريقة معينة لظهور صفحة بغض النظر عن المعطيات التي تحتويها. يمكن أن نفهم ذلك من خلال بعض الأمثلة لاحقاً. سأحاول المتابعة مع الدرس الأول اليوم أو غداً. لكني سأبدأ قبل ذلك بعرض بسيط للأدوات الضرورية للبرمجة على نظام ويندوز و التجربة "محلياً". مع فائق تحياتي. ابن سوريا. [1] اليوم هذه اللغة تطورت كثيراً و صارت متوفرة في عالم الويندوز (Active PERL) دروس و نقاش في لغة ال PHP - ابن سوريا - 05-20-2004 في البداية لا بد من التذكير أن الدروس تحتاج معرفة أساسية بلغات البرمجة و قواعد المعطيات. و لو بسيطة. الأمثلة لن تكون معقدة و لكن بعض المعرفة بالبرمجة و بال HTML لا يضر. ستفصل الأمثلة بغالبيتها بين ال HTML و ال PHP. لذلك يمكن استخدام برنامجك المعهود و المفضل لتصميم مواقع ال HTML بشكل منفصل. لكتابة برامج ال PHP فأنا أستخدم برنامج EditPlus http://www.editplus.com/ و يفضل لكم استخدام هذا البرنامج العظيم الذي وضع وصلته زميلنا دراكيش يوماً من الأيام: PHP Expert Editor http://www.nadyelfikr.net/viewthread.php?tid=12973 هناك برنامج على الويندوز يسمح بوضع قاعدة معطيات MYSQL و لغة ال PHP و سيرفر محلي بجهازك (Apache): EasyPHP http://www.easyphp.org/telechargements.php3 راجع كيفية استخدامه قبل البدء بالأمثلة. كما يمكن تنفيذ البرامج على موقع ما تمتلكونه على الأنترنت و يدعم لغة ال PHP. تحياتي الخالصة. دروس و نقاش في لغة ال PHP - ابن سوريا - 05-20-2004 الأمثلة كلها موجودة على موقعي : http://alkadah.com/php الزميلات و الزملاء الأعزاء : سأقوم بشرح حول لغة PHP و MYSQL من خلال مثال عملي سأقوم بتعديله شيئاً فشيئاً و تطويره خلال الشرح. أولاً لنعتبر أننا نريد إنشاء برنامج صغير على موقع لإستقبال رسائل الأعضاء و حفظها ثم معاينتها فيما بعد من قبل مدير للموقع. أولاً علينا تعريف المعطيات في قاعدة المعطيات , من الواضح أننا بحاجة لtable لحفظ رسائل الزوار. لكننا أيضاً بحاجة ل TABLE تحمل معلومات الأعضاء التي تسمح لنا أن نعرف إذا كان العضو مديراً أو لا. لنعتبر أن قاعدة المعطيات تسمى : v_test و نعتبر سيرفر قاعدة المعطيات هو : localhost و مستخدم قاعدة المعطيات : root و كلمة السر : test سنقوم بإنشاء ملف php لحفظ هذه المعلومات حتى لا نقوم بإعادة تعريفها في بقية الصفحات كل مرة. لننشئ الملف تحت اسم : config.php و نضع فيه المتحولات التالية كما يلي : // START CONFIG.php \ $dbname = "test"; // Database name $dbuser = "root"; // Database username $dbpw = "test"; // Database password $dbhost = "localhost"; // Database server // END CONFIG.php \ ?> و لنعتبر أن لدينا TABLE اسمها v_message و هذا ال sql request للقيام بإنشائها : CREATE TABLE v_message ( id bigint(20) NOT NULL auto_increment, name varchar(40) NOT NULL default '', email varchar(40) NOT NULL default '', dateline bigint(30) NOT NULL default '0', subject varchar(75) NOT NULL default '', message longtext NOT NULL, PRIMARY KEY (id), ) TYPE=MyISAM; الآن سنقوم بإنشاء صفحة خاصة باستقبال الرسائل و حفظها في قاعدة المعطيات. المبدأ يقوم بإنشاء "فورمولير" FORM بال HTML يحتوي المعلومات التي يكتبها الزائر ثم إرسالها للسيرفر للقيام بمعالجتها. سأبدأ بالشرح نقطة نقطة , ثم أضع في النهائية النسخة الكاملة للملف: نبدأ بال HTML الذي يجب وصعه (يمكننا طبعاً وضع كود ال HTML في ملف خاص به و هي أفضل طريقة لفصل ال HTML عن ال PHP أي فصل ال PRESENTATION عن المعالجة أو ال PROGRAMMATION) و لكن هذه العملية صعبة بعد الشيء لمثال للشرح. ال FORM بسيط و يجب أن يحتوي خانات لوضع الإسم و عنوان البريد الإلكتروني و الرسالة: http://www.alkadah.com/php/guestbook.html سأقوم هنا بشرح هذا الفورميلير. يمكن ملاحظة أن هناك خانات من نوع INPUT و TEXTAREA و قد عرفت لها NAME قيمة هذا ال NAME مهمة جداً فيما بعد عند معالجة محتويات هذا الفورمولير. لننظر الآن لأول سطر الذي يحتوي تعريف ال FORM : الكود التالي : ACTION="ResultPage.php" هو الذي يحدد لأي صفحة سنحول الفورميلير عندما سنضغط على submit أو زر "Get Result". الأمر التالي هو أهمية خاصية name للحقلين المخصصين لرقم التسجيل و كلمة السر و اللذين سيتحولان لمتحولات في صفحة ال PHP. 3- تصميم صفحتي النتائج : أولاً سنصمم صفحة المعالجة المعلومات ResultPage.php هذه الصفحة ستقوم كما في الدرس الماضي بالاتصال بقاعدة المعطيات. الجديد هنا أننا وضعنا function (تابع) في صفحة منفصلة و أسميتها functions.php لإستخدام ال function الموجود في هذا الملف يجب إضافته للصفحة الحالية كما يلي : require "./functions.php"; العمل الآن سيكون على دفعتين : أولاً سنتحقق من معلومات الدخول , لهذا الغرض يجب أن نحصل على معلومات الدخول التي أرسلتها لنا صفحة الدخول أي : login.php كما يلي : $v_refid = $_POST['v_refid']; $v_password = $_POST['v_password']; الآن سنقوم بالطلب من قاعدة المعطيات إن كانت المعلومات التي لدينا صحيحة كما يلي : $query = mysql_query("SELECT * FROM v_users WHERE username='$v_refid' AND password='$v_password'") or die(mysql_error()); if($query && mysql_num_rows($query) == 1){ $member = mysql_fetch_array($query); $v_refid = $member[username]; } else{ echo " Login Incorrect - Please login again"; exit; } كما نرى فإننا نبدأ بالطلب من قاعدة المعطيات إذا كان لديها بيان موافق للمعلومات التي لدينا. ثم إذا وجدنا أن هناك نتيجة نقوم بالحصول على المعلومات الإضافية في البان الذي حصلنا عليه, و إذا لم نحصل على شيء فهذا معناه أن معلومات الدخول خاطئة و نعرض تنويهاً بسيطاً بذلك للمستخدم و نطلب منه بالعودة لصفحة الدخول و المحاولة من جديد : echo " Login Incorrect - Please login again"; أما التعليمة exit فتعني انتهاء المعالجة و الصفحة في هذه الحالة. ثم نتابع , و المتابعة بالصفحة تعني أننا في حالة معلومات دخول صحيحة. إذاً فسنبحث الآن على نتيجة الطالب و نعرضها له. نطلب من قاعدة المعطيات و من الجدول v-results إإإذا كان هناك بيان يحتوي على نتيجة للطالب: $query = mysql_query("SELECT * FROM v_results WHERE refid='$v_refid' ") or die(mysql_error()); إذا حصلنا على نتيجة سنعرضها باستخدام ال function الذي كتبناه في صفحة أخرى. و إلا فليس هناك نتيجة بعد للطالب و نكتب له رسالة بهذا المعنى: if($query && mysql_num_rows($query) == 1){ $result = mysql_fetch_array($query); $note = $result[note]; $html = template("ResultPage.html"); eval("echo stripslashes("$html");"); } else{ echo "There's no result for you "; } الآن سأشرح بشكل مفصل ماذا يحصل في الحالة التي وجدنا بها النتيجة في هذه السطور : $result = mysql_fetch_array($query); $note = $result[note]; $html = template("ResultPage.html"); eval("echo stripslashes("$html");"); أول سطرين سهلين فنحن نقوم بالحصول على النتيجة التي وصلتنا من قاعدة المعطيات ووضعها بمتحول ($note) ثم نستخدم ال function , template للحصول على محتويات ال HTML للصفحة ResultPage.html. بعد الحصول عليها نستخدم function eval لاستبدال المتحولات بقيمتها ثم عرضها على المستخدم. لنفهم النقطة الأخيرة : أي استبدال المتحولات بقيمتها سنلقي نظرة على ما تحتويه الصفحة ResultPage.html : Result Page
كما تلاحظ فإنها صفحة HTML عادية عدا أنها تحتوي على بعض المتحولات كصفحات ال PHP المتحولات هي : $v_refid $v_note و مكانها هو مكان المعلومات التي تتغير بحسب الطالب , كما نلاحظ أنها متطابقة مع بعض المتحولات التي حصلنا عليها في صفحة ResultPage.php. هذه المتحولات هي التي قمنا باستبدالها بقيمتها باستخدام ال function eval. أتمنى أن الشرح كان كافياً. و لا تتردوا بسؤالي عن أي شيء استعصى عليكم. طارق القدّاح. دروس و نقاش في لغة ال PHP - جارة الوادي - 05-31-2004 (f) كانت قراءة سريعة لضيق الوقت، الكثير لم أستطع هضمه من القراءة الأولى. لي عودة بعد التطبيق العملي للدروس، لكن ربما متأخرة، على كل الأحوال تابع، فنحن نتابع. (f) |