Docstoc

P2

Document Sample
P2 Powered By Docstoc
					   ‫السكريبت يتكون من ثالثة ملفات، األول ‪ view.php‬لعرض المدخالت في سجل الزوار، والثاني ‪add.php‬‬
         ‫إلضافة مدخل جديد إلى سجل الزوار، والثالث هو ‪ config.php‬ويحتوي على بيانات قاعدة البيانات.‬
  ‫في الملف ‪ ،view.php‬يتم جلب البيانات المدخلة من قاعدة البيانات وعرضها واحدة تلو األخرى في صورة‬
                       ‫جدول ‪ ،HTML‬وأسفل هذا الجدول يوجد نموذج إلضافة تعليق جديد في سجل الزوار.‬
 ‫الملف ‪ add.php‬يقوم بأخذ البيانات المرسلة من النموذج الموجود في الملف ‪ ،view.php‬ثم يقوم بمراجعة‬
      ‫هذه البيانات والتحقق منها، ثم إضافتها إلى قاعدة البيانات وإعادة المستخدم إلى الملف ‪.view.php‬‬
                                        ‫يجب أن نحدد اآلن البيانات التي نريد تخزينها في قاعدة البيانات:‬
                                                                                               ‫- االسم.‬
                                                                                     ‫- البريد اإللكتروني.‬
                                                                                  ‫- الصفحة الشخصية.‬
                                                                                ‫- التعليق على الموقع.‬

                                                                                ‫* قاعدة البيانات‬
    ‫من خالل المعلومات السابقة نالحظ بأننا سنحتاج إلى جدول واحد فقط في قاعدة البيانات، وليكن اسمه‬
                ‫‪ ،guestbook‬هذه هي الشفرة التي يجب تنفيذها للحصول على البنية األساسية للجدول:‬
‫( ‪CREATE TABLE guestbook‬‬
    ‫,‪id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY‬‬
    ‫,)001(‪name CHAR‬‬
    ‫,)821(‪email CHAR‬‬
    ‫,)002(‪homepage CHAR‬‬
    ‫,‪date DATETIME‬‬
    ‫,)51(‪ip CHAR‬‬
    ‫‪message TEXT‬‬
‫;)‬
                          ‫شفرة ‪ SQL‬السابقة تعرف جدوال اسمه ‪ guestbook‬يحتوي على الحقول التالية:‬
   ‫‪ - id‬هذا الحقل يخزن رقما تسلسليا يزداد بمقدار واحد مع كل حقل جديد يضاف إلى الجدول، ومواصفاته:‬
                                                                                   ‫رقم ‪INTEGER‬‬
                                                                ‫بال إشارة (موجب دائما) ‪UNSIGNED‬‬
                                                          ‫إجباري (ال يمكن أن يترك خاليا) ‪NOT NULL‬‬
                                   ‫يتم تحديثه تلقائيا إلى رقم أكبر من السابق بواحد ‪AUTO_INCREMENT‬‬
                                       ‫وهو المفتاح األساسي للوصول إلى بيانات الجدول ‪PRIMARY KEY‬‬

                     ‫‪ - name‬هذا الحقل يخزن اسم الشخص الموقع في سجل الزوار، ومواصفاته كالتالي:‬
                                                   ‫يخزن نصا بطول 110 حرف كحد أقصى ) 001 ( ‪CHAR‬‬

 ‫‪ - email‬لتخزين البريد اإللكترونيي، 120 حرفيا بحيط أقصيى (هيذا اليرقم قياسيي تقريبيا فيي ألليب البيرام‬
                                                  ‫القائمة على الويب لتخزين عناوين البريد اإللكترونية).‬

             ‫‪ - homepage‬لتخزين عنوان الصفحة الشخصية للموقع، 112 حرفا بحد أقصى -- قيمة معقولة.‬
                               ‫‪ - date‬لتخزين تاريخ المدخل في سجل الزوار، وهو يخزن قيما من النوع:‬
                                                                          ‫تاريخ ووقت ‪DATETIME‬‬

                                                  ‫‪ - message‬لتخزين نص الرسالة (تعليقك على الموقع)،‬
                                                  ‫وهو حقل يسع لتخزين عدد كبير جدا من الحروف ‪TEXT‬‬


                                                                                  ‫* الملف ‪config.php‬‬
‫يحتوي على الملف على شفرة برمجية تقوم بإعداد المتغيرات الالزمة للوصول إلى قاعدة البيانات، وسنقوم‬
  ‫ي‬       ‫ي‬        ‫ي ي‬               ‫ي‬
‫بيالمرة بإضيافة شيفرة االتصيال بقاعيدة البيانيات إليى هيذا المليف بيدال مين تكرارهيا فيي كيل مين الملفيين‬
                                                 ‫ي‬   ‫ي‬               ‫ي‬       ‫ي‬               ‫ي‬
                                                                                    ‫‪ view.php‬و ‪.add.php‬‬
                                                              ‫أوال سنقوم بإعداد مجموعة من المتغيرات:‬
‫/* ‪/* store the hostname of the MySQL server‬‬
‫;"‪$dbhost = "localhost‬‬
‫/* ‪/* store the username to login to MySQL‬‬
‫;"‪$dbuser = "root‬‬
‫/* ‪/* store the password to login to MySQL‬‬
‫;"" = ‪$dbpass‬‬
‫/* ‪/* store the name of the MySQL database‬‬
‫;"" = ‪$dbname‬‬
                                                     ‫كما تالحظ، قمنا بتعريف أربعة متغيرات مختلفة هي:‬
                                                    ‫$‪ -- dbhost‬وتقوم بتخزين عنوان مزيد قاعدة البيانات.‬
                   ‫$‪ -- dbuser‬وتقوم بتخزين اسم المستخدم الذي سيستخدم للدخول إلى قاعدة البيانات.‬
   ‫$‪ -- dbpass‬وتقوم بخزين كلمة المرور التي ستستخدم مع اسم المستخدم للدخول إلى قاعدة البيانات.‬
                                  ‫$‪ -- dbname‬تخزن اسم قاعدة البيانات التي ستحوي الجدول ‪.guestbook‬‬

‫يمكن للمستخدم اآلن تعديل معلومات هذه المتغيرة عن طريق فتح الملف في المفكرة ميثال وتعيديل القييم‬
                                                  ‫الموجودة بين عالمات االقتباس مقابل أسماء المتغيرات.‬
‫بعد تعريف المتغيرات السابقة، سنقوم كما اتفقنيا بوضيع الشيفرة الالزمية لالتصيال بقاعيدة البيانيات، وهيي‬
                                                                             ‫عبارة عن استدعاء لدالتين:‬
‫/* ‪/* connect to the MySQL server‬‬
‫;)‪mysql_connect($dbhost,$dbuser,$dbpass‬‬
‫/* ‪/* set $dbname as the database to be used‬‬
‫;)‪mysql_select_db($dbname‬‬

                                                                                                      ‫* شرح الدوال‬
‫)‪mysql_connect(hostname, username, password‬‬
‫تقوم الدالة السابقة باالتصال بمزود قاعدة البيانات الموجود على العنيوان ‪ ،hostname‬وتحياول اليدخول إليى‬
‫المزود قاعدة البيانات عن طريق إرسال اسم المسيتخدم ‪ username‬و كلمية الميرور ‪ ،password‬فيي حيال‬
‫نجاح العملية تعيد موردا ( ‪ ) resource‬نستطيع استخدامه مع دوال أخرى لتنفيذ أوامر قاعدة البيانيات عليى‬
                  ‫هذا اإلتصال المفتوح (يمكن فتح أكثر من اتصال بأكثر من قاعدة بيانات في نفس الوقت).‬

‫جميع المتغيرات المررة إلى الدالة اختبارية، إذا لم تدخل ‪ password‬فإن الدالة سيتحاول إجيراء االتصيال دون‬
‫تمرير كلمة مرور، وإذا لم تيدخل ‪ username‬فسيتحاول الدالية إجيراء االتصيال دون اسيم مسيتخدم، وإذا ليم‬
            ‫تحدد ‪ hostname‬فإن الدالة ستحاول اإلتصال بقاعدة البيانات على العنوان المحلي ( ‪.) locahost‬‬
‫إذا كنت قد ركبت ‪ MySQL‬مباشرة دون تغيير اإلعدادات فإن مزود قواعد البيانات سيسمح مباشيرة باإلتصيال‬
‫من الجهاز المحلي باسم المستخدم ‪ root‬والذي لن تكون له كلمة مرور افتراضية، وبالتالي يمكنك االتصيال‬
              ‫مباشرة إلى مزود ‪ MySQL‬المحلي عن طريق القيم الموضحة في المتغيرات التي في األعلى.‬
‫)‪mysql_select_db(database_name, link_identifier‬‬
‫تقوم هذه الدالة بتحديد قاعدة البيانات التي سيتم العميل عليهيا، حييث أن ميزود قاعيدة البيانيات يمكين أن‬
                                                                         ‫يحتوي على أكثر من قاعدة بيانات واحدة.‬
‫تحدد اسم قاعدة البيانات عن طريق المتغيرة ‪ ،database_name‬أما المتغيرة الثانية فهو اإلتصال اليذي ترييد‬
‫أن تحدد قاعدة البيانات له، فإذا كنت قد خزنيت القيمية التيي أعادتهيا الدالية ‪ mysql_connect‬فيي متغييرة،‬
‫وأرت اآلن تعيين قاعدة البيانات الذي يجب استخدامها في ذلك االتصال، فيمكنك تمرير المتغيرة إليى الدالية‬
‫‪ mysql_select_db‬في الوسيطة الثانية، ولكن هذه الوسيطة الثانيية اختياريية، فيإذا ليم تقيم بتمريرهيا فيإن‬
‫الدالة ستعيد قاعدة البيانات التي يجب العمل عليهيا آلخير اتصيال تيم فتحيه بقاعيدة البيانيات، وإذا ليم يكين‬
‫هنالييك ات صييال مفتييوح ميين قبييل سييتحاول الداليية فييتح إتصييال بقاعييدة البيانييات كمييا لييو كنييت قييد شييغلت‬
‫‪ )(mysql_connect‬بدون تحديد اليي ‪ hostname‬و اليي ‪ username‬واليي ‪ password‬وثيم تعييين قاعيدة البيانيات‬
                                                                      ‫التي يجب العمل عليها لهذا االتصال الجديد.‬

              ‫ي‬       ‫ي‬           ‫ي‬       ‫ي‬       ‫ي ي‬
‫ف يي ملفن يا المث يال قمن يا بتنفي يذ ه يذه الدال ية مباشييرة بع يد ف يتح اتص يال بقاع يدة البيان يات باس يتخدام الداليية‬
                                                                      ‫ي‬         ‫ي‬    ‫ي‬        ‫ي‬       ‫ي‬       ‫ي‬       ‫ي‬
‫‪ ,mysql_connect‬وبالتالي عيننا قاعدة البيانات $‪ dbname‬كقاعدة البيانات التي يجيب اسيتخدامها ميع خير‬
                                                                                          ‫اتصال فتح بقاعدة البيانات.‬
                               ‫هذه الدالة تغير ‪ ( true‬صح ) في حالة تجاحها و ‪ ( false‬خطأ ) في حالة فشلها.‬
                                        ‫يمكننا اآلن النظر إلى نسخة نهائية كاملة من الملف ‪: config.php‬‬
‫‪<?php‬‬
‫/* ‪/* store the hostname of the MySQL server‬‬
‫;"‪$dbhost = "localhost‬‬
‫/* ‪/* store the username to login to MySQL‬‬
‫;"‪$dbuser = "root‬‬
‫/* ‪/* store the password to login to MySQL‬‬
‫;"" = ‪$dbpass‬‬
‫/* ‪/* store the name of the MySQL database‬‬
‫;"" = ‪$dbname‬‬
‫/* ‪/* connect to the MySQL server‬‬
‫;)‪mysql_connect($dbhost,$dbuser,$dbpass‬‬
‫/* ‪/* set $dbname as the database to be used‬‬
‫;)‪mysql_select_db($dbname‬‬
‫>?‬

                                                                               ‫* الملف ‪:view.php‬‬
                                                 ‫في البداية المقدمات العادية ورأس المستند بلغة ‪:HTML‬‬
‫>"‪<html dir="rtl‬‬
‫>‪<head‬‬
‫>‪<title‬سجل الزوار>‪</title‬‬
‫>‪<style‬‬
‫{ ‪body,td,input,select,textarea‬‬
‫;‪font-family: Tahoma‬‬
‫;‪font-size: x-small‬‬
‫}‬
‫{ 6‪h1,h2,h3,h4,h5,h‬‬
‫;‪font-family: Arial‬‬
‫}‬
‫>‪</style‬‬
‫>‪</head‬‬
‫>‪<body‬‬
‫>1‪<h‬سجل الزوار>1‪</h‬‬
   ‫بعد أن تتم طباعة رأس المستند بلغة ‪ HTML‬نأتي إلى الجزء التالي وهو جلب البيانات من قاعدة البيانات‬
                                                                                      ‫وعرضها للمستخدم.‬
   ‫في البداية نحتاج إلى اتصال بقاعدة البيانات، وكما قلنا من قبل، الملف ‪ config.php‬يحتوي على الشفرة‬
    ‫الكاملة لتجهيز اتصال بقاعدة البيانات، ما علينا القيوم به اآلن هو إعطاء أمر بتنفيذ البيانات الموجودة في‬
                                                     ‫الملف ‪ ،config.php‬وهذا األمر هو ‪ ،include‬كالتالي:‬
‫/* ‪/* get a database connection‬‬
‫;'‪include 'config.php‬‬
       ‫النتيجة التي يعطيها األمر ‪ include‬السابق هي نفسها النتيجة التي كنا سنحصل عليها لو كنا وضعنا‬
        ‫الشفرة الموجودة في الملف ‪ view.php‬مباشرة، بمعنى أننا بدال من أن ننسخ شفرة قاعدة البيانات‬
 ‫الموجودة في الملف ‪ config.php‬يدويا ونضعها في أعلى الملف ‪ view.php‬للحصول على وصول إلى قواعد‬
    ‫البيانات، فإننا نطلب من مترجم ‪ PHP‬أن يقوم بالعملية ليا، حيث نطلب منه تنفيذ الشفرة الموجودة في‬
                         ‫الملف ‪ config.php‬كما لو كانت جزءا من الملف الذي استدعى األمر ( ‪.) view.php‬‬

                                                                                       ‫* األمر ‪:include‬‬
                                                                         ‫يستخدم األمر ‪ include‬كالتالي :‬
‫;‪include filename‬‬
           ‫أي الكلمة ‪ include‬وبعدها اسم الملف الذي نريد إدراجه، وفي مثالنا كان الملف هو ‪.config.php‬‬

                                                                        ‫* طلب البيانات من قاعدة البيانات‬
   ‫المفترض اآلن بأن جميع اإلضافات التي تمت إلى سجل الزوار مخزنة في الجدول ‪ guestbook‬في قاعدة‬
   ‫البيانات، وأن لدينا اتصاال اآلن بقاعدة البيانات من خالل الملف ‪ ،config.php‬نستطيع البدأ بعمل استعالم‬
                           ‫لقاعدة البيانات نطلب فيه البيانات التي نريدها، ويكون ذلك بالشفرة التالية:‬
‫‪$res = mysql_query( "SELECT‬‬
‫,‪name,email,homepage‬‬
‫,‪UNIX_TIMESTAMP(date) AS date‬‬
‫‪message‬‬
‫‪FROM guestbook‬‬
‫;) "‪ORDER BY date DESC‬‬

                                                                                ‫الدالة ‪:mysql_query‬‬
‫;)‪mysql_query(query,link_identifier‬‬
  ‫تقوم الدالة بإرسال اإلستعالم (‪ )query‬إلى قاعدة البيانات عبر اإلتصال الذي يمرر إليها (‪،)link_identifier‬‬
     ‫وإذا لم يكن هنالك اتصال ممرر، فإن الدالة تستخدم خر اتصال فتح بقاعدة البيانات، وإذا لم يكن هنالك‬
 ‫اتصال قد فتح من قبل ستحاول الدالة إجراء اتصال بقاعدة البيانات عن طريق تنفيذ الدالة ‪mysql_connect‬‬
                                               ‫وتمرر إليها قيم ‪ hostname‬و ‪ username‬و ‪ password‬فارلة.‬

       ‫في مثالنا السابق، قمنا بتمرير قيمة واحدة فقط إلى الدالة هي االستعالم الطويل المحاط بعالمتي‬
 ‫االقتباس " و "، وستقوم الدالة باستخدام خر اتصال فتح بقاعدة البيانات وهو االتصال الذي فتح في الملف‬
                                             ‫‪ config.php‬الذي أدرجناه من قبل في ملفنا (‪.)view.php‬‬

     ‫نأتي اآلن إلى اإلستعالم، وهو عبارة عن استعالم بسيط من النوع ‪ SELECT‬كتب بلغة ‪ . SQL‬وسأقدم‬
                                                                            ‫شرحا سريعا هنا،‬
                                                                                     ‫‪:SELECT‬‬
                                                                          ‫يعني اختيار أو جلب.‬

‫‪name,email,homepage,UNIX_TIMESTAMP(date) AS date,message‬‬
   ‫هذه هي أسماء الحقول التي طلبناها (جلبناها) من الجدول، وهي عبارة عن قائمة بسيطة من أسماء‬
                                                                       ‫الحقول، ما عدى التالي:‬

‫‪UNIX_TIMESTAMP(date) AS date‬‬
 ‫تقوم الدالة ‪ UNIX_TIMESTAMP‬بإعادة التاريخ المخزن في قاعدة البيانات في صورة ‪ TIMESTAMP‬الخاص‬
  ‫بنظام ‪ ،unix‬وهو عبارة عن نظام للتاريخ يحسب عدد الثواني منذ منتصف الليل في 0/0/1970، وبالتالي‬
  ‫فإن هذه القيمة تتغير في كل ثانية، تعتبر الي ‪ Timestamp‬الوحدة القياسية لتخزين المعلومات عن التاريخ‬
 ‫والوقت في ‪ PHP‬وأللب لغات برمجة ونظم ‪ ،Unix‬وبالتالي فإننا طلبنا من قاعدة البيانات أن تحول لنا قيمة‬
  ‫التاريخ ( ‪ ) date‬إلى الي ‪ Timestamp‬المقابل حتى يسهل التعامل معها في ‪ PHP‬وعرضها بالطريقة التي‬
                                                                                            ‫نريدها ..‬

 ‫بعد ذلك أضفنا المقطع ‪ ،AS date‬هذا المقطع يعني بأن الحقل هذا يجب أن يسمى باالسم ‪ ،date‬السبب‬
‫في إضافتنا لهذا المقطع هي أن الحقول تسمى عادة بأسماء التعبيرات التي تتكون منها، فهذا الحقل مثال:‬
‫)‪UNIX_TIMESTAMP(date‬‬
                                                                                ‫سيكون اسمه هو :‬
‫)‪UNIX_TIMESTAMP(date‬‬
 ‫وهذا سيجعل التعامل معه في ‪ PHP‬صعبا نوعا ما، لذا قلنا لقاعدة البيانات أن تسمى البيانات هذه باالسم‬
                                                                        ‫‪ date‬بدال من االسم السابق.‬

                                                       ‫بعد االنتهاء من قائمة الحقول نجد المقطع التالي:‬
‫‪FROM guestbook‬‬
                                                                                       ‫‪FROM‬‬
‫الكلمة ‪ FROM‬تعني (من) ونحدد بعدها اسم الجدول الذي نريد طلب (جلب) البيانات منه، وهو ‪guestbook‬‬
                                                                            ‫في مثالنا السابق.‬

‫‪ORDER BY date DESC‬‬
                                                  ‫المقطع السابق يحدد الطريقة التي ترتب بها البيانات ..‬
‫‪ORDER BY‬‬
     ‫تعني (ترتيب حسب) وهي تحدد الحقل الذي نريد ترتيب تبعا له، وفي مثال الحقل ‪ ،date‬أي أننا نريد‬
   ‫ترتيب المدخالت حسب تاريخ إضافتها، ولكن استخدام ‪ ORDER BY‬وبعده اسم الحقل يعني فرز البيانات‬
 ‫حسب ذلك الحقل تصاعديا، أي من األقل إلى األكبر، ولكننا في الواقع نريد فرزها في برنامجنا تنازليا (من‬
‫األحدث أو األعلى تاريخا إلى األقدم) ولهذا السبب أضفنا المقطع ‪ DESC‬وهو اختصار لكلمة ‪ descending‬أي‬
                                                                                                ‫تنازليا.‬

				
DOCUMENT INFO
Shared By:
Categories:
Tags:
Stats:
views:0
posted:1/25/2013
language:
pages:5