You are on page 1of 102

‫‪Basic concepts in PHP‬‬ ‫‪V1.

01IPCSIT‬‬

‫المقدمة‬
‫عصر صفحات الويب االستاتيكية قد انتهت ‪ ,‬فقد كان الويب لسنوات عديدة خلت ال يعدو عن مجال ترتبط فيه‬
‫صفحات ‪ HTML‬البسيطة معا ً لتشكل موقعا ً ‪ .‬أما اليوم ‪ ،‬فقد بات المستخدمون يتوقعون صفحات مثيرة يتم تحديثها‬
‫بشكل متكرر ‪ ،‬وبحيث توفر تجربة مخصصة لكل مستخدم ‪ .‬وفي الوقت نفسه ‪ ،‬يريد مسؤولو مواقع الويب أن تكون‬
‫هذه األخيرة سهلة التحديث والصيانة لهذه األسباب مجتمعة وأخرى غيرها ‪ ،‬لم يعد بناء موقع بإستخدام ملفات‬
‫‪ HTML‬ستاتيكية مقبوالً أبدا ً ‪ .‬لقد أصبح الويب اآلن موطنا ً لتطبيقات الويب الديناميكية المقادة بقواعد البيانات في‬
‫غالبيتها ‪.‬‬

‫هناك نوعين من المواقع حاليا ‪:-‬مواقع تابثة‪:‬وهي مواقع تعتمد في الغالب في برمجتها على لغة ‪ HTML‬وتقنية‬
‫‪CSS‬وتتميز بكونها سهلة لقصور وظيفته التي تكمن في عرض محتوى ما فقط) صور‪ ،‬نصوص (‪ ،‬وكما ان تغيير‬
‫محتوى هذه المواقع يتطلب عناءا ومشقة اكبر حيث يضطر مبرمجوا هذه المواقع الى اعادة فتح كود صفحات‬
‫الموقع والتعديل فيتم بعد ذلك رفع ملفات الموقع من جديد بعد الغاء الملفات السابقة طبعا او تحديثها‪.‬‬
‫‪-‬مواقع ديناميكية ‪:‬مميزات عديدة وخصائص تحكم اكثر فاعلية وقوة ‪ ،‬وتعتمد هذه المواقع اضافة على ‪ HTML‬و‬
‫‪CSS‬على لغات برمجة اخرى مثل ‪ PHP‬و‪ MYSQL‬مما يجعلها متطورة حيث تسمح بخلق تواصل بين الزائر و‬
‫الموقع ‪ ،‬وايضا تسهيل عملية تغيير او اضافة او حذف محتوى‪.‬‬
‫ماهي مواقع الويب الديناميكية ؟‬
‫تمثل مواقع الويب الديناميكية كائنات مرنة وقوية ‪ ،‬ويمكننا وصفها كتطبيقات بدالً من مواقع فهي ‪:‬ـ‬
‫ـ تستجيب لوسطاء مختلفين ( كالتوقيت والتاريخ وإصدار المستعرض الذي يستخدمه الزائر )‪.‬‬
‫ـ غالبا ً ما تمتلك واجهة يمكن للمسؤولين من خاللها إدارة المحتوى ‪.‬‬
‫ـ تمتلك " ذاكرة " ‪ ،‬مما يسمع بانتساب المستخدمين وتسجيل دخولهم والتجارة اإللكترونية وما شابه من عمليات ‪.‬‬
‫ـ سهلة الصيانة والترقية والبناء إعتمادا ً عليها ‪.‬‬
‫توجد عدة تكنولوجيات إلنشاء مواقع الويب الديناميكية ‪ ،‬ولعل أكثرها رواجا ً ‪ PHP‬و ‪ Asp ,‬من ‪Microsoft‬‬
‫هذا وال تعتمد مواقع الويب الديناميكية على قاعدة بيانات بالضرورة ‪ ،‬ولكن أغلبها كذلك خاصة وأن تطبيقات قواعد‬
‫البيانات ( مثل ‪ ) MySQL‬تتوفر بتكلفة بسيطة أو بدون تكلفة على اإلطالق ‪.‬‬
‫االتصال بموقع عبر االنترنت ‪:‬عادة حينما نريد زيارة موقع معين موجودة على الشبكة العنكبوتية ‪ ،‬فاننا نفتح‬
‫المتصفح الموجود لدينا‪ ،‬مثل ‪ Opera ، Safari، Fierfox،Internet Explorer‬او اي متصفح اخر‪ ،‬ثم نقوم‬
‫بكتابة عنوان الموقع ‪ ،‬فيظهر الموقع إن كان موجودا‪.‬‬

‫‪1‬‬ ‫اعداد د‪.‬عايض الشباطي ‪2019‬‬


‫‪Basic concepts in PHP‬‬ ‫‪V1.01IPCSIT‬‬

‫ان عملية االتصال هذه اعتمدت باالساس على االنترنت‪ ،‬حيث ان هذه االخيرة عبارة عن شبكة من اجهزة الكمبيوتر‬
‫تنقسم الى قسمين ‪:-‬اجهزة كمبيوتر خاصة بالزوار ‪ ،‬يعني جهازك انت الذي سيمكنك من االتصال بالموقع الذي‬
‫تريده ‪.-‬واجهزة كمبيوتر اخرى قوية عبارة عن خوادم )‪(Servers‬تقوم بعميلة تخزين ونشر المواقع‪.‬وعليه فعملية‬
‫االتصال بموقع على النت‪ ،‬تقوم على اتصال كمبيوتر خاص بزائر ‪ ،‬بكمبيوتر خاص بخادم‪.‬‬

‫ماهي ‪ PHP‬؟‬
‫تمثل ‪ PHP‬في أصلها اختصارا ً للعارة " ‪( " Personal Home Page‬الصفحة الرئيسية الشخصية ) ‪ ،‬وقد تم‬
‫تطويرها في عام ‪1994‬م ‪ .‬ومع نمو فوائدها ومقدراتها ‪ ،‬فقد أصبحت اختصارا ً لعبارة أخرى هي ‪Hypertext‬‬
‫‪ ( Preprocessor‬المعالج المسبق للنص التشعي )‪.‬‬
‫وفقا ً لموق الويب الرسمي لهذه اللغة ‪ www.php.net ،‬تعتبر (‪ ) php‬لغة برمجة نصية مضمنة للغة ‪HTML‬‬
‫وهو تعريف معقد ولكنه وصفي ‪ ،‬فدعنا نشرحه ‪.‬‬

‫نقصد بقولنا إن ‪ PHP‬مضمنة للغة ‪ HTML‬أنه يمكن تفسير ‪ PHP‬ضمن ‪ HTML‬مما يجعل تطوير مواقع ويب‬
‫ديناميكية أكثر سالسة ‪ ،‬أما كونها لغة برمجة نصية ‪ ،‬فذلك يخالف لغات البرمجة األخرى ‪ .‬إذا إن ‪ PHP‬مصممة‬
‫للقيام بشيء ما بعد وقوع حدث أي عندما يرسل مستخدم نموذجاًًَ أو ينتقل إلى عنوان ‪ URL‬مثالً ‪.‬‬

‫يجب أن نضيف إلى هذا التعريف أن ‪ PHP‬هي تكنولوجيا من جهة (‪ ) server –side‬على حقيقة أن كل ما تقوم به‬
‫‪ PHP‬يحدث على ‪ ( Server‬على خالف ‪ ، Client‬وهو حاسب مستعرض موقع الويب ) ‪.‬‬

‫‪Unix,‬‬ ‫أما كونها ذات طبيعة مستقلة عن المنصة فيعني أنها تعمل على معظم نظم التشغيل ‪ ،‬بما في ذلك‬
‫‪ ( Windows‬على إختالف تنويعاته ) و ‪ . Macintosh‬واألهم من ذلك أن برامج ‪ PHP‬النصية التي تتم كتابها‬
‫على ‪ Server‬معين ستعمل بشكل أعتيادي على ‪ Server‬آخر ‪ ،‬وذلك الحاجة إلى القليل من التعديالت ‪ ،‬وحتى بدون‬
‫الحاجة لذلك في أغلب الحاالت ‪.‬‬

‫من الواضح أنه من األفضل العمل على ‪ Server‬يستخدم آخر إصدار من ‪ ، PHP‬ولكننا توخيا ً للحاالت التي ال‬
‫تستطيع فيها ذلك ‪ ،‬فسوف نقدم كود ال يتعلق باإلصدار قدر اإلمكان ‪ ،‬علما ً بأننا سوف نشير إلى الحاالت التي‬
‫نستعمل متغيرات تمت إضافتها حديثا ً ‪ ،‬وبحيث نرشدك إلى حلول بديلة ‪.‬‬

‫لماذا تستخدم ‪ PHP‬دون سواها ؟‬


‫بكل بساطة ‪ ،‬وعندما يتعلق األمر بتطوير مواقع ويب ديناميكية ‪ ،‬تعتبر ‪ PHP‬األفضل واألسرع واألسهل تعلما ً‬
‫واستخداما ً مقارنة مع نظرائها ‪ .‬تقدم لك ‪ PHP‬أدا ًء رائعا ً وتكامالً محكما ً مع جميع قواعد البيانات المتوفرة تقريبا ً ‪،‬‬
‫كما تتميز شيفرتها بقابلية التدرج والنقل ‪ ،‬ناهيك عن ميزاتها العديدة التي تنبع من قابليتها للتوسع ‪ .‬وبما أن ‪PHP‬‬

‫‪2‬‬ ‫اعداد د‪.‬عايض الشباطي ‪2019‬‬


‫‪Basic concepts in PHP‬‬ ‫‪V1.01IPCSIT‬‬

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

‫كيف تعمل ‪PHP‬؟‬


‫كما أشرنا سابقا ً ‪ ،‬تعتبر ‪ PHP‬لغة من جهة الملقم ‪ ،‬مما يعني أن الشيفرة التي تكتبها في ‪ PHP‬تستقر على حاسب‬
‫مضيف يلقم صفحات الويب للزور الذين يطلبونها فعندما يدخل زائرا ً موقع ويب مكتوبا ً باستخدام ‪ ، PHP‬يقرأ‬
‫الملقم شيفرة ‪ PHP‬ومن ثم يعالجها وفقا ً للتوجيهات الواردة فيها ‪ .‬ففي المثال المبين في الشكل ‪ ،2‬تطلب شيفرة‬
‫‪ PHP‬من الملقم إرسال البيانات المناسبة (شيفرة ‪ )HTML‬إلى مستعرض الويب ‪ ،‬والذي يعالجها كما ولو كانت‬
‫صفحة ‪ HTML‬قياسية ‪.‬‬
‫الشكل ‪ : 1‬كيف تدخل ‪ PHP‬النموذج ‪ Server / Client‬عندما يطلب مستخدم صفحة ويب ‪.‬‬

‫‪PHP‬‬

‫يختلف ذلك عن حالة موقع ‪ HTML‬ستاتيكي ‪ ،‬والذي عندما يتم فيه إنشاء طلب ‪ ،‬يرسل الملقم بيانات ‪HTML‬‬
‫إلى مستعرض الويب ليس إال ‪ ،‬وبذلك ال يحدث أي تفسير من جهة الملقم لهذه البيانات ( الشكل ‪ . ) 3‬وعليه ال‬
‫يحلظ المستخدم النهائي ومستعرض الويب أي فرق بين الشكل الذي تبدو عليه الصفحة ‪ home . html‬والصفحة‬
‫‪ home .php‬إذ إن الفرق يكمن في كيفية إنشاء محتوى الصفحة ‪.‬‬

‫الشكل ‪ :2‬عملية طلب صفحة ‪ HTML‬ستاتيكية ‪.‬‬

‫‪3‬‬ ‫اعداد د‪.‬عايض الشباطي ‪2019‬‬


‫‪Basic concepts in PHP‬‬ ‫‪V1.01IPCSIT‬‬

‫نظام ادارة قواعد البيانات ‪MYSQL‬‬

‫تعتبر ‪ www.mysql ، MYSQL‬قاعدة البيانات المفتوحة المصدر األكثر إنتشارا ً ‪ ،‬بل ويعتبرها البعض‬
‫األفضل على اإلطالق‪ .‬في الواقع ‪ ،‬ومع إضافة اإلصدار ‪ 4‬منها لمميزات جديدة عديدة ويوجد حاليا اصدارات اكثر‬
‫حداثة ‪ ،‬فقد أصبحت ‪ MYSQL‬منافسا ً قويا ً لقواعد البيانات القوية مثل ‪ SQL Server , Oracle‬وكما ‪PHP‬‬
‫تقدم ‪ MYSQL‬أدا ًء مميزا ً وقابلية للنقل ووثوقية عالية ‪ ،‬وهي بدون تكلفة تقريبا ً ‪.‬‬

‫تم تطوير ‪ MYSQL‬ودعمها من قبل ‪ ، MYSQL AB‬وهي شركة سويدية ‪ ،‬تمثل ‪ MYSQL‬نظام إدارة‬
‫قواعد بيانات (‪ ) DBMS‬لقواعد البيانات العالئقية ‪ ،‬لذلك تعتبر ‪ ، RDBMS‬بحيث يمكن أن تستخدم قواعد بيانتها‬
‫مجموعة من البيانات غير المترابطة نصية كانت أم أعداد أم ملفات ثنائية ‪ ،‬والتي يتم تخزينها والحفاظ عليها منظمة‬
‫في ‪. DBMS‬‬

‫مالحظة ‪:‬‬
‫تلفظ ‪ MYSQL‬تقنيا ً بالشكل "‪" MyEss Que Ell‬‬

‫يوجد العديد من أنواع قواعد البيانات ‪ ،‬بدءا ً من قواعد بيانات الملف البسيطة ووصوالً إلى قواعد البيانات العالئقية‬
‫وتلك الموجهة بالكائنات ‪ .‬تستخدم قواعد البيانات العالئية عدة جداول لتخزين المعلومات في أجزائها المتميزة ‪.‬‬

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

‫‪4‬‬ ‫اعداد د‪.‬عايض الشباطي ‪2019‬‬


‫‪Basic concepts in PHP‬‬ ‫‪V1.01IPCSIT‬‬

‫عند دمج قاعدة بيانات في تطبيق ويب ‪،‬يمكن استخالص بعض البيانات التي تولدها ‪ PHP‬من ‪( MYSQL‬الشكل‬
‫‪ ،) 4‬األمر الذي ينقل محتوى الموقع من حالته الستاتيكية إلى حالته المرنة ‪ ،‬والتي تمثل المفتاح ألي موقع ويب‬
‫ديناميكي ‪.‬‬

‫الشكل ‪ : 5‬كيف تعمل معظم تطبيقات الويب الديناميكية باستخدام ‪. MYSQL PHP‬‬

‫‪PHP‬‬

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

‫تستكون برمجيات ‪ MYSQL‬من عدة أجزاء بما فيها ملقم ‪ ( MYSQL‬نقصد ‪ ) Mysqid‬الذي يشغل ويدير‬
‫قواعد البيانات ) وعميل ‪ ( MYSQL‬نقصد ‪ ، MysQL‬واألمر ينطبق بشكل أكبر على اإلصدارات الخدمية من‬
‫اللغة ‪.‬‬

‫تستطيع ‪ MYSQL‬التعامل مع قواعد بيانات بحجم ‪ 60000‬جدول وأكثر من ‪ 5‬مليارات صف ‪ ،‬كما ويمكنها‬
‫العمل مع جداول بحجم ‪ 8‬مليون تبرابايت ( منذ اإلصدار ‪ )3.32‬على بعض نظم التشغيل وعموما ً ‪ 4GB‬في‬
‫الحاالت األخرى ‪.‬‬

‫لتشغيل برامج ‪ ،Php‬يحتاج الى ‪:‬‬


‫‪ -‬تطبيق ملقم ويب ( ‪ Apache‬أو ‪ Xitamil‬أو ‪.) IIS‬‬

‫‪5‬‬ ‫اعداد د‪.‬عايض الشباطي ‪2019‬‬


‫‪Basic concepts in PHP‬‬ ‫‪V1.01IPCSIT‬‬

‫‪. PHP -‬‬


‫‪MysQL -‬‬
‫‪ -‬مستعرض ويب ( ‪. ) …,Netscape Navigator‬‬
‫‪ -‬محرر نصوص قادر على التعامل مع ‪ ( PHP‬مثل ‪ Dreamweaver MX‬أو بيئة تطوير متكاملة (‪IDE‬‬
‫)‪.‬‬
‫‪ -‬تطبيق ‪ FTP‬إذا كنت تستخدم ملقما ً بعيدا ً ‪.‬‬
‫لعل أفضل ما في تطوير مواقع ويب ديناميكية باستخدام ‪ PHP‬و ‪ MYSQL‬يتمثل في أنه ال تحتاج إلى دفع تكلفة ‪،‬‬
‫‪ MYSQL PHP,Apache‬تطبيقات مفتوحة‬ ‫وذلك بغض النظر عن نظام التشغيل الذي تستخدمه ‪ ،‬إذ إن‬
‫المصدر ‪ ،‬والقليل من مستعرضات الويب الجارية ‪ ،‬ويتوفر العديد من محررات النصوص بشكل مجاني أيضا ً ‪.‬‬
‫تتميز لغة ‪ PHP‬بالكثير من الخصائص التي جعلتها الخيار األمثل لمبرمجي الويب في العالم ‪:‬‬
‫السهولة‬
‫تعتبر لغة ‪ PHP‬من أسهل لغات البرمجة تعلما‪ ،‬فهي تريحك من جميع تعقيدات إدارة الذاكرة وتعقيدات معالجة‬
‫النصوص الموجودة في ‪ C‬من جهة‪ ،‬والكثير من الضعف الموجود في بينية وتصميم لغة البرمجة ‪ Perl‬من جهة‬
‫أخرى‪.‬‬
‫تمتلك لغة ‪ PHP‬بنية وقواعدا ثابته وواضحة جدا‪ ،‬معظم قواعد اللغة مأخوذة من كل من ‪ C‬و ‪ Java‬و ‪ Perl‬لصنع‬
‫لغة برمجة عالية السهولة والسالسة دون فقدان أي من القوة في اللغة‪ ،‬يفيدك ذلك إذا كنت تعلم أي شيء عن لغات‬
‫البرمجة األخرى مثل ‪ Visual Basic‬أو ‪ C‬أو ‪ Java‬حيث ستجد دائما بأنك تفهم مواد الدورة بسرعة‪ ،‬وستكتشف‬
‫كيف تقوم ‪ PHP‬بتسهيل أصعب األمور وإذالل العقبات التي تواجه المبرمج حتى يتفرغ تماما لإلبداع فقط‪ ،‬كل ما‬
‫تفكر به تستطيع تنفيذه بلغة ‪.PHP‬‬
‫السرعة‬
‫لغة ‪ PHP‬من اللغات المعروفة بسرعتها العالية في تنفيذ البرامج‪ ،‬وخاصة في اإلصدارة الرابعة من المترجم‪ ،‬حيث‬
‫تمت كتابة مترجم ‪ PHP‬من الصفر ليعطي أداءا في منتهى الروعة‪ ،‬كما أن لغة ‪ PHP‬مصممة أصال كنواة لمترجم‪،‬‬
‫بحيث يمكن أن تضع هذه النواة في عدة قوالب أو أغلفة لتعمل مع التقنيات المختلفة‪ ،‬فيمكنك تشغيل مترجم ‪PHP‬‬
‫كبرنامج ‪ CGI‬مثال‪ ،‬ولكن األفضل هو إمكانية تركيب مترجم ‪ PHP‬على مزود ‪ IIS‬في صورة وحدة إضافية‬
‫تضاف إلى المزود عن طريق دوال ‪ ،ISAPI‬وتوجد نسخة أخرى منه تركب على مزود ‪ Apache‬أيضا في‬
‫صورة وحدة خارجية‪ ،‬وتوجد أيضا نسخة مخصصة للدمج مع شفرة مزود ‪ Apache‬بحيث تصبح جزءا من‬
‫برنامج ‪ Apache‬نفسه‪ ،‬وهي الطريقة األكثر استخداما اآلن في مزودات الويب التي تعمل على أنظمة ‪UNIX‬‬
‫وهي الطريقة التي تعطي أفضل أداء لمترجم ‪ ،PHP‬حيث يصبح المترجم جزءا من المزود‪ ،‬وبالتالي فإنه سيكون‬
‫محمال في الذاكرة بانتظار صفحات ‪ PHP‬ليقوم بترجمتها وعرضها للزوار مباشرة دون التأخير اإلضافي الذي‬

‫‪6‬‬ ‫اعداد د‪.‬عايض الشباطي ‪2019‬‬


‫‪Basic concepts in PHP‬‬ ‫‪V1.01IPCSIT‬‬

‫تتطلبه برامج ‪ Perl/CGI‬مثال حيث يجب أن يتم تشغيل مترجم ‪ Perl‬مع كل زيارة للصفحة لترجمة الصفحة‪ ،‬ثم يتم‬
‫إغالق المترجم‪ ،‬ثم استدعاءه مجددا عند الزيارة الثانية وهكذا‪ ،‬وهذا يشكل فارقا كبيرا في المواقع ذات الضغط‬
‫العالي بالذات‪ ،‬ويكون استخدام ‪ PHP‬حال أفضل بكثير‪.‬‬
‫يأتي مترجم ‪ PHP‬لوحده محمال بعدد هائل من الدوال الجاهزة االستخدام في جميع المجاالت‪ ،‬من دوال المعالجة‬
‫الرياضية والحسابية إلى دوال الوصول إلى قواعد البيانات ومزودات ‪ ،FTP‬توفر لك دوال ‪ PHP‬مثال وصوال إلى‬
‫مزودات البيانات ‪ MySQL‬و ‪ PostgreSQL‬و ‪ MS SQL‬و ‪ Oracle‬وغيرها من مزودات قواعد البيانات‪،‬‬
‫وهنالك أيضا مجموعة من الدوال لمعالجة ملفات ‪ ،XML‬ودوال أخرى إلرسال واستقبال الملفات عن بعد باستخدام‬
‫بروتوكول ‪ ،FTP‬وهنالك مجموعة من الدوال لمعالجة وإنتاج الصور ديناميكيا وملفات ‪ Flash‬ديناميكيا‪ ،‬ناهيك عن‬
‫جميع الدوال الخاصة بمعالجة النصوص والمصفوفات‪.‬‬
‫التوافقية‬
‫كما قلنا سابقا‪ ،‬فعلى الرغم من أن هنالك الكثير من نسخ ‪ PHP‬التي يعمل كل منها في بيئة مختلفة‪ ،‬إال أنها جميعا‬
‫تشترك في النواة األصلية التي تقوم بالمعالجة الحقيقة لملفات ‪ PHP‬لذا فإن جميع مترجمات ‪ PHP‬تتصرف بنفس‬
‫الطريقة فيما يتعلق بتنفيذ السكريبتات‪ ،‬فإذا كان السكريبت الذي عملته يعمل على نظام ‪ Windows‬مع مزود ‪IIS‬‬
‫فيجب أن يعمل دون الحاجة ألية تغييرات عند نقله إلى مزود ‪ ،Apache‬بالطبع تظل بعض األمور البسيطة جدا‬
‫التي يوفرها بعض المزودات دون غيرها‪ ،‬ولكن جميع البرامج التي كتبتها منذ بداية تعلم اللغة إلى اآلن تعمل على‬
‫جميع المزودات دون الحاجة ألي تغييرات‪ ،‬إضافة إلى ذلك فإن التغييرات التي حدثت باللغة األساسية من اإلصدارة‬
‫الثالثة إلى الرابعة قليلة جدا‪ ،‬وأغلب التغييرات كانت في البنية التحتية للمترجم‪.‬‬
‫الحماية‬
‫يوفر ‪ PHP‬الكثير من المزايا المتقدمة‪ ،‬ولكنه يوفر لك الطرق المناسبة لوضع الحدود على هذه المزايا‪ ،‬فيمكنك‬
‫التحكم بعدد اإلتصاالت المسموحة بقاعدة البيانات مثال‪ ،‬أو الحجم األقصى للملفات التي يمكن إرسالها عبر‬
‫المتصفح‪ ،‬أو السماح باستخدام بعض الميزات أو إلغاء استخدامها‪ ،‬كل هذا يتم عن طريق ملف إعدادات ‪PHP‬‬
‫والذي يتحكم به مدير الموقع‪.‬‬
‫قابلية التوسع‬

‫يمكنك توسعة مترجم ‪ PHP‬بسهولة وإضافة الميزات التي تريدها إليه بلغة ‪ ،C‬وحيث أن الشفرة البرمجية للمترجم‬
‫مفتوحة فإنك تستطيع تغيير ما تريده مباشرة لتحصل على النسخة التي تناسبك من المترجم‪ ،‬ويمكنك أيضا عمل‬
‫الوحدات اإلضافية التي تركب على المترجم لزيادة ميزاته والوظائف المبيته فيه‪ ،‬وفي قد قام فريق تطوير مترجم‬
‫‪ PHP‬مسبقا بعمل هذه المهمة وتحويل كمية ضخمة من المكتبات المكتوبة بلغة ‪ C‬إلى مكتبات مخصصة لتضاف‬

‫‪7‬‬ ‫اعداد د‪.‬عايض الشباطي ‪2019‬‬


‫‪Basic concepts in PHP‬‬ ‫‪V1.01IPCSIT‬‬

‫إلى المترجم‪ ،‬ومنها حصلنا على جميع الميزات التي تحدثنا عنها مثل الوصول إلى قواعد البيانات ومعالجة ملفات‬
‫‪.XML‬‬
‫تطور ‪ PHP‬تطورا مفاجئا في الفترة األخيرة‪ ،‬وتشير إحصائيا ‪ Net Craft‬إلى أن مترجم ‪ PHP‬هو أكثر وحدات‬
‫مزود ‪ Apache‬انتشارات على اإلنترنت‪ ،‬كما أن مترجم ‪ PHP‬مركب على حوالي مليوني مزود ويب على‬
‫اإلنترنت‪.‬‬
‫بنية ملفات ‪PHP‬‬
‫ملفات ‪ PHP‬هي ملفات نصية بسيطة‪ ،‬تشبه في تركيبها ملفات ‪ ASP‬وملفات ‪ HTML‬بشكل عام‪ ،‬يتكون ملف‬
‫‪ PHP‬من قسمان‪ ،‬قسم ‪ HTML‬وقسم ‪ ،PHP‬الملف بالصورة الطبيعية عبارة عن ملف ‪ HTML‬عادي‪ ،‬ولكنك‬
‫تستطيع تحديد أجزاء معينة من الملف ليخرج فيها الملف من وضعية ‪ HTML‬إلى وضعية ‪ ،PHP‬إلخراج الملف‬
‫إلى وضعية ‪ PHP‬توجد عدة طرق ‪:‬‬
‫‪ - 1‬استخدام زوج الوسوم <? ‪ >?php‬كالتالي ‪:‬‬
‫‪<?php‬‬
‫;'!‪echo 'This is PHP output‬‬
‫>?‬
‫‪ - 2‬استخدام ال زوج المختصر <? و ?> وهو يستخدم بنفس الطريقة السابقة ولكنه يكون بدون الكلمة ‪ php‬في‬
‫وسم البداية‪ ،‬هذا النوع من الوسوم يحتاج إلى كمية أقل من الكتابة بالطبع‪ ،‬ولكنه يتعارض مع وسوم ‪ ،xml‬لذا‬
‫يقوم البعض بإغالق ميزة الوسوم القصيرة حتى ال يحصل هذا التعارض ( يمكنك اغالق هذه الميزة بسهولة‬
‫عن طريق ملف إعدادات ‪.) PHP‬‬
‫‪ - 3‬استخدام زوج الوسوم ‪ ،ASP‬وهو من اسمه زوج الوسوم المستخدم في ملفات ‪ ASP‬وهما <‪ %‬و ‪،>%‬‬
‫ميزة وسوم ‪ ASP‬ال تكون فعالة بشكل قياسي ولكنك تستطيع تفعيلها عن طريق ملف إعدادات مترجم ‪.PHP‬‬
‫‪ - 4‬الطريقة األخيرة هي استخدام زوج الوسوم التالي ‪:‬‬
‫> "‪<script language="php‬‬
‫;'!‪echo 'This is PHP output‬‬
‫>‪</script‬‬
‫ولكن هذه الطريقة غير مستخدمة اآلن‪ ،‬حيث أنها تصعب عملية التمييز بين شفرات ‪ PHP‬وباقي ملف ‪،HTML‬‬
‫وكذلك بالنسبة لبرامج كتابة ملفات ‪ HTML‬التي تعطي تلوينا للشفرة فأغلبها ال يتعرف على هذا النوع من الشفرة‬
‫ويعتبره جزءا من ملف ‪ HTML‬االعتيادي‪.‬‬

‫‪8‬‬ ‫اعداد د‪.‬عايض الشباطي ‪2019‬‬


‫‪Basic concepts in PHP‬‬ ‫‪V1.01IPCSIT‬‬

‫أفضل الطرق السابقة للتحويل إلى وضعية ‪ PHP‬هو استخدام زوج الوسوم األول بالطبع‪ ،‬حيث أنه األكثر‬
‫استخدامها‪ ،‬وال يحتوي على أية تعارضات كما أنه يعمل على جميع مترجمات ‪ PHP‬مهما كانت إعداداتها‪ ،‬ولهذا‬
‫السبب سنستخدمها في جميع األمثلة التي ستجدها في هذه الدورة‪.‬‬
‫كتابة ملفات ‪PHP‬‬
‫ملفات ‪ PHP‬هي ملفات نصية بسيطة تماما كما هي ملفات ‪ ،HTML‬يمكنك كتابة سكريبت ‪ PHP‬بأي برنامج كتابة‬
‫نصوص يتيح لك كتابة الملفات النصية البسيطة ‪ Plain Text‬مثل ‪ Notepad‬على النظام ويندوز‪ ،‬ولكن أغلبية‬
‫مبرمجي ‪ PHP‬يستخدمون أدوات أخرى تسهل عليهم عملية البرمجة عن طريق تلوين الشفرات البرمجية‪ ،‬وتسهل‬
‫عملية البحث عن الملفات واستبدال المقاطع من عدة ملفات في نفس الوقت‪ ،‬مثل ‪ ،HomeSite‬على الرغم من أنك‬
‫لن تحتاج إلى الكثير من هذه الميزات إال أن استخدام ‪ Notepad‬في عمل ملفات ‪ PHP‬يعتبر أمرا صعبا جدا‬
‫وخاصة في الملفات الضخمة حيث أن ‪ Notepad‬ال تتيح فتح الملفات الكبيرة‪ ،‬والمشكلة األكبر هي أنها ال توفر‬
‫ترقيما لألسطر‪ ،‬فإذا ظهرت لك رسالة الخطأ تشير إلى وجود خطأ في السطر ‪ 53‬فلن تستطيع معرفة السطر‬
‫المطلوب في ‪ Notepad‬إال إذا قمت بالعد يدويا من السطر األول وحتى ‪ .. 53‬حسنا ماذا لو كان الخطأ في السطر‬
‫‪ ، 652‬يمكنك البدأ بكتابة سكريبتاتك بالبرنامج المتوفر اآلن إلى أن تحصل على برنامج آخر‪ ،‬يمكنك بالطبع فتح‬
‫ملفاتك بأي محرر نصوص‪ ،‬فإذا كتبتها باستخدام ‪ Notepad‬فهذا ال يعني بأنك ملزم باستخدام ‪ Notepad‬في جميع‬
‫ملفاتك أو حتى في هذا الملف‪.‬‬
‫‪ php‬هي لغة برمجة نصية للخادم ‪ ،‬وأداة قوية إلنشاء صفحات ويب ديناميكية وتفاعلية‪,‬وتعتبر بديل مجاني وفعال‬
‫ومستخدم على مجال واسع للمنافسين للشركات االخرئ‪.‬للغة اصدارات مختلفة ‪PHP 7‬هو أحدث إصدار مستقر‪.‬‬
‫يتم تنفيذ كود ‪ PHP‬على ‪.Server‬‬

‫قبل برمجة مواقع االنترنت ‪ ،‬يجب أن يكون لديك فهم أساسي للغات التالية‪:‬‬

‫‪• html‬‬
‫‪• CSS‬‬
‫‪• Javascript‬‬

‫يمكن أن تحتوي ملفات ‪ PHP‬على نصوص و ‪ HTML‬و ‪ CSS‬و ‪ JavaScript‬و ‪ PHP code‬يتم تنفيذ كود‬
‫‪ PHP‬على ‪ ، Server‬ويتم إرجاع النتيجة إلى المتصفح بتنسيق ‪ HTML‬عادي‪,‬ملفات ‪ PHP‬لها امتداد "‪"php.‬‬
‫بحيث تستطيع من خاللها إنشاء محتوى صفحة ديناميكي‪.‬‬

‫يمكن لـ ‪ PHP‬إنشاء الملفات على ‪ Server‬وفتحها وقراءتها وكتابتها وحذفها وإغالقها كما يمكن لـها جمع ومعالجة‬
‫بيانات النموذج‬

‫ومن خالل ‪ PHP‬يمكن إرسال واستقبال ملفات تعريف االرتباط و إضافة أو حذف أو تعديل البيانات في قاعدة‬
‫البيانات الخاصة بك و للتحكم في وصول المستخدم ويمكن لـها تشفير البيانات‬

‫‪9‬‬ ‫اعداد د‪.‬عايض الشباطي ‪2019‬‬


‫‪Basic concepts in PHP‬‬ ‫‪V1.01IPCSIT‬‬

‫ضا‬
‫مع ‪ PHP‬ال تقتصر على إخراج ‪ .HTML‬يمكن إخراج الصور وملفات ‪ PDF‬وحتى أفالم فالش‪ .‬يمكن أي ً‬
‫إخراج أي نص ‪ ،‬مثل ‪ XHTML‬و ‪ .XML‬وتعد ‪ PHP7‬أسرع بكثير من اإلصدار السابقة وتتميز بتحسين‬
‫معالجة األخطاء‪.‬‬

‫بناء جملة ‪PHP‬‬


‫يتم تنفيذ نص ‪ PHP‬على الخادم ‪ ،‬ويتم إرسال نتيجة ‪ HTML‬العادية إلى المتصفح‪ .‬يمكن وضع نص ‪ PHP‬في أي‬
‫مكان في المستند‪ .‬يحتوي ملف ‪ PHP‬عادة ً على عالمات ‪ HTML‬وبعض أكواد ‪ PHP‬النصية‪ .‬أدناه ‪ ،‬لدينا مثال‬
‫لملف ‪ PHP‬بسيط ‪ ،‬مع برنامج نصي ‪ PHP‬يستخدم دالة "‪ "echo‬إلخراج النص "‪ "!Hello World‬على صفحة‬
‫الويب‪:‬‬

‫‪Example‬‬

‫>‪<!DOCTYPE html‬‬
‫>‪<html‬‬
‫>‪<body‬‬
‫>‪<h1>My first PHP page</h1‬‬
‫‪<?php‬‬
‫;"!‪echo "Hello World‬‬
‫>?‬
‫>‪</body‬‬
‫>‪</html‬‬

‫مالحظة‪ :‬تنتهي عبارات ‪ PHP‬بفاصلة منقوطة (؛)‬

‫التعليقات في ‪PHP‬‬
‫التعليق في كود ‪ PHP‬هو سطر ال يتم تنفيذه كجزء من البرنامج‪ .‬والغرض منه هو أن يقرأه شخص يبحث في الكود‬
‫وكتابة التوثيق لوظائف الشفرات وفهمه مستقبال‪ .‬يمكن استخدام التعليقات من أجل‪:‬‬
‫اآلخرين يفهمون التعليمات البرمجية الخاصة بك‬
‫توثيق لما كتبته من شفرات وتذكير بعمل الشفرات ‪ -‬لقد جرب معظم المبرمجين العودة إلى عملهم بعد عام أو‬
‫عامين واضطرارهم إلى إعادة اكتشاف ما فعلوه‪ .‬يمكن أن تذكرك التعليقات بما كنت تفكر فيه عندما كتبت الكود‬
‫تدعم ‪ PHP‬عدة طرق للتعليق‪:‬‬
‫‪Example‬‬
‫‪Syntax for single-line comments:‬‬

‫>‪<!DOCTYPE html‬‬
‫>‪<html‬‬
‫>‪<body‬‬
‫‪<?php‬‬
‫‪// This is a single-line comment‬‬

‫‪10‬‬ ‫اعداد د‪.‬عايض الشباطي ‪2019‬‬


‫‪Basic concepts in PHP‬‬ ‫‪V1.01IPCSIT‬‬

‫‪# This is also a single-line comment‬‬


‫>?‬
‫>‪</body‬‬
‫>‪</html‬‬
‫المتغيرات في لغة ‪PHP‬‬
‫المتغيرات هي "حاويات" لتخزين المعلومات‪ .‬يمكن أن يكون للمتغير اسم قصير (مثل ‪ x‬و ‪ )y‬أو اسم وصفي أكثر‬
‫(‪.)age, carname, total_volume‬‬
‫قواعد متغيرات ‪:PHP‬‬
‫عا باسم المتغير‬
‫يبدأ المتغير بعالمة ‪ ، $‬متبو ً‬ ‫•‬
‫يجب أن يبدأ اسم المتغير بحرف أو بشرطة سفلية‬ ‫•‬
‫ال يمكن أن يبدأ اسم المتغير برقم‬ ‫•‬
‫ال يمكن أن يحتوي اسم المتغير إال على أحرف وشرطات سفلية (‪ A-z‬و‪ 9-0‬و _)‬ ‫•‬
‫أسماء المتغيرات حساسة لحالة األحرف (‪ age $‬و ‪ AGE $‬متغيرين مختلفين)‬ ‫•‬

‫تذكر أن أسماء متغيرات ‪ PHP‬حساسة لحالة األحرف!‬


‫إنشاء (إعالن) متغيرات تبدأ بعالمة ‪ ، $‬متبوعة باسم المتغير‪:‬‬

‫‪Example:‬‬
‫‪<?php‬‬
‫;"!‪$txt = "Hello world‬‬
‫;‪$x = 5‬‬
‫;‪$y = 10.5‬‬
‫>?‬
‫بعد تنفيذ العبارات أعاله ‪ ،‬سيحتفظ المتغير ‪ txt $‬بالقيمة ‪ !Hello world‬وسيحتفظ المتغير ‪ x $‬بالقيمة ‪، 5‬‬
‫وسيحتوي المتغير ‪ y $‬على القيمة ‪.10.5‬‬
‫مالحظة‪ :‬عند تعيين قيمة نصية لمتغير ‪ ،‬ضع عالمات االقتباس حول القيمة‪.‬‬

‫مالحظة‪ :‬على عكس لغات البرمجة األخرى ‪ ،‬ليس لدى ‪ PHP‬أي أمر للتصريح عن متغير‪ .‬يتم إنشاؤه في اللحظة‬
‫التي تحدد فيها قيمة ألول مرة‪.‬‬
‫دوال اإلخراج‬
‫مع ‪ ، PHP‬هناك طريقتان أساسيتان للحصول على اإلخراج‪ Print, Echo :‬متماثالن إلى حد ما‪ .‬كالهما يستخدم‬
‫إلخراج البيانات إلى الشاشة‪.‬‬
‫االختالفات بسيطة ‪ :‬ليس لـ‪ echo‬قيمة إرجاع بينما يوجد قيمة إرجاع لـ‪ 1 Print‬لذا يمكن استخدامها في التعبيرات‪.‬‬
‫يمكن أن يأخذ ‪ echo‬معامالت متعددة (على الرغم من أن هذا االستخدام نادر) بينما يمكن أن تأخذ ‪ print‬وسيط‬
‫واحد‪ echo .‬أسرع من ‪.print‬‬

‫‪11‬‬ ‫اعداد د‪.‬عايض الشباطي ‪2019‬‬


‫‪Basic concepts in PHP‬‬ ‫‪V1.01IPCSIT‬‬

‫دالة ‪PHP echo‬‬

‫غالبًا ما تُستخدم عبارة ‪ PHP echo‬إلخراج البيانات إلى الشاشة‪.‬‬

‫‪Example:‬‬
‫‪<?php‬‬
‫;"‪$txt = "tssy.com‬‬
‫;"!‪echo "I love $txt‬‬
‫>?‬
‫سينتج المثال التالي نفس اإلخراج كما في المثال أعاله‪:‬‬

‫‪Example‬‬
‫‪<?php‬‬
‫;"‪$txt = "tssy.com‬‬
‫;"!" ‪echo "I love " . $txt .‬‬
‫>?‬

‫يمكن استخدام عبارة ‪ echo‬مع أو بدون أقواس‪ echo :‬أو ()‪echo‬‬


‫يوضح المثال التالي كيفية إخراج النص باستخدام األمر ‪( echo‬الحظ أن النص يمكن أن يحتوي على ترميز‬
‫‪:)HTML‬‬
‫‪Example‬‬
‫‪<?php‬‬
‫;">‪echo "<h2>PHP is Fun!</h2‬‬
‫;">‪echo "Hello world!<br‬‬
‫;">‪echo "I'm about to learn PHP!<br‬‬
‫;"‪echo "This ", "string ", "was ", "made ", "with multiple parameters.‬‬
‫>?‬
‫يوضح المثال التالي إخراج النص والمتغيرات باستخدام عبارة ‪:echo‬‬

‫‪Example‬‬
‫‪<?php‬‬
‫;"‪$txt1 = "Learn PHP‬‬
‫;"‪$txt2 = "tssy.com‬‬
‫;‪$x = 5‬‬
‫;‪$y = 4‬‬
‫;">‪echo "<h2>" . $txt1 . "</h2‬‬
‫;">‪echo "Study PHP at " . $txt2 . "<br‬‬
‫;‪echo $x + $y‬‬
‫>?‬
‫دالة ‪Print‬‬
‫يمكن استخدام عبارة ‪ print‬مع أو بدون األقواس‪ print :‬أو ()‪, print‬يوضح المثال التالي كيفية إخراج النص‬
‫باستخدام األمر ‪( print‬الحظ أن النص يمكن أن يحتوي على ترميز ‪:)HTML‬‬

‫‪12‬‬ ‫اعداد د‪.‬عايض الشباطي ‪2019‬‬


‫‪Basic concepts in PHP‬‬ ‫‪V1.01IPCSIT‬‬

‫‪Example‬‬
‫‪<?php‬‬
‫;">‪print "<h2>PHP is Fun!</h2‬‬
‫;">‪print "Hello world!<br‬‬
‫;"!‪print "I'm about to learn PHP‬‬
‫>?‬

‫طباعة المتغيرات‬
‫يوضح المثال التالي كيفية إخراج النص والمتغيرات باستخدام عبارة الطباعة‪: print‬‬

‫‪Example‬‬
‫‪<?php‬‬
‫;"‪$txt1 = "Learn PHP‬‬
‫;"‪$txt2 = "tssy.com‬‬
‫;‪$x = 5‬‬
‫;‪$y = 4‬‬
‫;">‪print "<h2>" . $txt1 . "</h2‬‬
‫;">‪print "Study PHP at " . $txt2 . "<br‬‬
‫;‪print $x + $y‬‬
‫>?‬

‫النتيجة‪:‬‬

‫‪Learn PHP‬‬
‫‪Study PHP at tssy.com‬‬
‫‪9‬‬
‫سينتج المثال التالي مجموع متغيرين‪:‬‬

‫‪Example‬‬
‫‪<?php‬‬
‫;‪$x = 5‬‬
‫;‪$y = 4‬‬
‫;‪echo $x + $y‬‬
‫>?‬
‫في المثال أعاله ‪ ،‬الحظ أنه ليس علينا إخبار ‪ PHP‬بنوع بيانات المتغير‪.‬‬

‫نظرا ألن أنواع البيانات لم يتم تعيينها بالمعنى‬


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

‫‪13‬‬ ‫اعداد د‪.‬عايض الشباطي ‪2019‬‬


Basic concepts in PHP V1.01IPCSIT

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

• Local
• Global
• Static

Global‫ و‬Local ‫المجال‬

:‫ وال يمكن الوصول إليه إال من خارج الدالة‬global ‫المتغير الذي تم اإلعالن عنه خارج دالة له نطاق‬

Example
Variable with global scope:
<?php
$x = 5; // global scope
function myTest() {
// using x inside this function will generate an error
echo "<p>Variable x inside function is: $x</p>";
}
myTest();

echo "<p>Variable x outside function is: $x</p>";


?>

:‫النتيجة‬

Variable x inside function is:


Variable x outside function is: 5
:‫ وال يمكن الوصول إليه إال من خالل هذه الدالة‬local ‫المتغير المعلن داخل دالة له مجال‬

Example
Variable with local scope:
<?php
function myTest() {
$x = 5; // local scope
echo "<p>Variable x inside function is: $x</p>";
}
myTest();

// using x outside the function will generate an error

14 2019 ‫عايض الشباطي‬.‫اعداد د‬


‫‪Basic concepts in PHP‬‬ ‫‪V1.01IPCSIT‬‬

‫;">‪echo "<p>Variable x outside function is: $x</p‬‬


‫>?‬
‫النتيجة‪:‬‬

‫‪Variable x inside function is: 5‬‬


‫‪Variable x outside function is:‬‬

‫يمكن أن يكون لدينا متغيرات محلية بنفس االسم في دوال مختلفة‪ ،‬ألن المتغيرات المحلية يتم التعرف عليها فقط من‬
‫خالل الدالة التي يتم التصريح بها‪.‬‬

‫الكلمة االساسية ‪Global‬‬


‫يتم استخدام الكلمة األساسية للوصول إلى متغير عام ‪Global‬من داخل دالة للقيام بذلك ‪ ،‬استخدم الكلمة األساسية‬
‫العامة ‪ Global‬قبل المتغيرات (داخل الدالة)‪:‬‬
‫‪Example‬‬
‫‪<?php‬‬
‫;‪$x = 5‬‬
‫;‪$y = 10‬‬
‫{ )(‪function myTest‬‬
‫;‪global $x, $y‬‬
‫;‪$y = $x + $y‬‬
‫}‬
‫;)(‪myTest‬‬
‫‪echo $y; // outputs 15‬‬
‫>?‬
‫النتيجة ‪15:‬‬

‫ضا بتخزين جميع المتغيرات العامة في مصفوفة تسمى] ‪ .$GLOBALS [index‬الفهرس يحمل‬ ‫تقوم ‪ PHP‬أي ً‬
‫ضا من داخل الدوال ويمكن استخدامها لتحديث المتغيرات العامة‬
‫اسم المتغير‪ .‬يمكن الوصول إلى هذه المصفوفة أي ً‬
‫‪ global‬مباشرةً‪.‬‬
‫يمكن إعادة كتابة المثال أعاله على النحو التالي‪:‬‬

‫‪Example‬‬
‫‪<?php‬‬
‫;‪$x = 5‬‬
‫;‪$y = 10‬‬
‫{ )(‪function myTest‬‬
‫;]'‪$GLOBALS['y'] = $GLOBALS['x'] + $GLOBALS['y‬‬
‫}‬
‫;)(‪myTest‬‬
‫‪echo $y; // outputs 15‬‬
‫>?‬

‫‪15‬‬ ‫اعداد د‪.‬عايض الشباطي ‪2019‬‬


‫‪Basic concepts in PHP‬‬ ‫‪V1.01IPCSIT‬‬

‫النتيجة‪15 :‬‬

‫النوع الثالث الكلمة االساسية ‪Static‬‬


‫عادة ‪ ،‬عند تنفيذ دالة ‪ ،‬يتم حذف جميع متغيراتها‪ .‬ومع ذلك ‪ ،‬في بعض األحيان نريد عدم حذف متغير محلي‪ ,‬نحن‬
‫في حاجة إليها لدالة أخرى‪ ,‬لذلك نستخدم الكلمة األساسية ‪ Static‬عند تعريف المتغير ألول مرة‪:‬‬
‫‪Example‬‬
‫>‪<!DOCTYPE html‬‬

‫>‪<html‬‬

‫>‪<body‬‬

‫‪<?php‬‬

‫{ )(‪function myTest‬‬

‫;‪static $x = 0‬‬

‫;‪echo $x‬‬

‫;‪$x++‬‬

‫}‬

‫;)(‪myTest‬‬

‫;">‪echo "<br‬‬

‫;)(‪myTest‬‬

‫;">‪echo "<br‬‬

‫;)(‪myTest‬‬

‫>?‬

‫>‪</body‬‬

‫>‪</html‬‬

‫النتيجة‬

‫‪16‬‬ ‫اعداد د‪.‬عايض الشباطي ‪2019‬‬


‫‪Basic concepts in PHP‬‬ ‫‪V1.01IPCSIT‬‬

‫‪0‬‬
‫‪1‬‬
‫‪2‬‬

‫بعد ذلك ‪ ،‬في كل مرة يتم استدعاء الدالة ‪ ،‬سيظل هذا المتغير يحتوي على المعلومات التي يحتويها منذ آخر مرة تم‬
‫استدعاء الدالة‪.‬‬

‫‪ local‬بالنسبة للدالة‪.‬‬ ‫مالحظة‪ :‬المتغير ال يزال محليًا‬

‫الثوابت ‪Constant‬‬
‫الثابت هو معرف (اسم) لقيمة بسيطة‪ .‬ال يمكن تغيير القيمة أثناء تنفيذ البرنامج النصي‪ .‬يبدأ اسم ثابت بحرف أو‬
‫شرطة سفلية (ال توجد عالمة ‪ $‬قبل االسم الثابت)‪.‬‬
‫تشبه الثوابت المتغيرات باستثناء أنه بمجرد تعريفها ال يمكن تغييرها‬

‫طريقة انشاء الثوابت‬

‫(‪define(name, value, case-insensitive‬‬

‫المحددات التي تأخذها دالة‪Define():‬‬


‫‪ :name‬يحدد اسم الثابت‬
‫‪:value‬تحدد قيمة الثابت‬
‫‪ : case-insensitive‬يحدد ما إذا كان االسم الثابت يجب أن يكون غير حساس لحالة األحرف تأخذ القيمة‬
‫‪.true‬و ‪false‬حساسة لحالة االحرف وهي القيمة االفتراضي‬
‫‪Example‬‬
‫‪Create a constant with a case-sensitive name:‬‬
‫‪<?php‬‬
‫;)"!‪define("GREETING", "Welcome to tssy.com‬‬
‫;‪echo GREETING‬‬
‫>?‬
‫‪Example‬‬
‫‪Create a constant with a case-insensitive name:‬‬
‫‪<?php‬‬
‫;)‪define("GREETING", "Welcome to tssy.com!", true‬‬
‫;‪echo greeting‬‬
‫>?‬
‫المصفوفات الثابتة‬
‫يمكننا إنشاء ثابت مصفوفة باستخدام دالة ‪define().‬‬

‫‪Example‬‬
‫‪Create an Array constant:‬‬
‫‪<?php‬‬
‫;)]"‪define("com", [ "acer", "hp", "dell‬‬

‫‪17‬‬ ‫اعداد د‪.‬عايض الشباطي ‪2019‬‬


‫‪Basic concepts in PHP‬‬ ‫‪V1.01IPCSIT‬‬

‫;]‪echo com[0‬‬
‫>?‬

‫مالحظة‪ :‬تصبح الثوابت تلقائيًا ‪Global‬عامة عبر الكود بأكمله ‪,‬على عكس المتغيرات ‪,‬وإلنشاء ثابت استخدم دالة ‪define().‬‬

‫يستخدم هذا المثال ثابتًا داخل دالة ‪ ،‬حتى لو تم تعريفه خارج الدالة‪:‬‬

‫‪<?php‬‬
‫;)"!‪define("GREETING", "Welcome to tssy.com‬‬
‫{ )(‪function myTest‬‬
‫;‪echo GREETING‬‬
‫}‬
‫;)(‪myTest‬‬
‫>?‬

‫يستخدم هذا المثال ثابتًا داخل دالة ‪ ،‬حتى لو تم تعريفه خارج الدالة‪:‬‬

‫‪<?php‬‬
‫;)"!‪define("GREETING", "Welcome to tssy.com‬‬
‫{ )(‪function myTest‬‬
‫;‪echo GREETING‬‬
‫}‬
‫;)(‪myTest‬‬
‫>?‬
‫المصفوفات‪Arrays‬‬
‫المصفوفة هي متغير خاص ‪ ،‬يمكن أن يحتوي على أكثر من قيمة في وقت واحد‪.‬‬
‫إذا كانت لديك قائمة بالعناصر (قائمة بعشرة اسماء طالب ‪ ،‬على سبيل المثال) ‪ ،‬فقد يبدو تخزين الطلبة في‬
‫متغيرات فردية كما يلي‪:‬‬
‫";‪$NAM1 = "AHMED‬‬
‫";‪$NAM2 = "ALI‬‬
‫";‪$NAME3 = "ABDU‬‬
‫‪..‬‬
‫;"‪$NAM10="MOHAMMED‬‬

‫ومع ذلك ‪ ،‬ماذا لو كنت تريد المرور عبر كل الطلبة والعثور على طالب واحد؟ وماذا لو لم يكن لديك عشرة طالب‬
‫‪ ،‬بل ‪1000‬؟‬

‫الحل هو إنشاء‪!,,,,,,‬‬

‫يمكن أن تحتوي المصفوفة على العديد من القيم تحت اسم واحد‪ ،‬ويمكن الوصول إلى القيم من خالل اإلشارة إلى‬
‫رقم فهرس‪,‬انشاء مصفوفة في ‪ ، PHP‬تُستخدم الدالة ()‪ array‬إلنشاء مصفوفة‪.‬‬

‫تخزن المصفوفة قي ًما متعددة في متغير واحد‪:‬‬

‫‪18‬‬ ‫اعداد د‪.‬عايض الشباطي ‪2019‬‬


‫‪Basic concepts in PHP‬‬ ‫‪V1.01IPCSIT‬‬

‫‪Example‬‬
‫‪<?php‬‬
‫;)"‪$NAM = array("AH", "AS", "AB‬‬
‫;"‪echo "I like " . $NAM[0] . ", " . $NAM[1] . " and " . $NAM[2] . ".‬‬
‫>?‬
‫النتيجة‬
‫‪I like AH, AS and AB.‬‬

‫توجد ثالثة أنواع من المصفوفات‪:‬‬


‫• المصفوفات المفهرسة ‪ -Indexed arrays‬المصفوفات ذات الفهرس الرقمي‬
‫• المصفوفات المتصلة(الترابطية) ‪ -Associative arrays‬المصفوفات ذات المفاتيح المسماة‬
‫المصفوفات متعددة األبعاد ‪ - Multidimensional arrays‬المصفوفات التي تحتوي على مصفوفة‬ ‫•‬
‫واحدة أو أكثر‪.‬‬
‫()‪ count‬تُستخدم ا إلرجاع طول المصفوفة (عدد العناصر)‪:‬‬ ‫الحصول على طول المصفوفة ‪ -‬الدالة‬
‫‪Example‬‬
‫‪<?php‬‬
‫;)"‪$com = array("HP", "DELL", "TOSHIBA‬‬
‫;)‪echo count($com‬‬
‫>?‬

‫المصفوفات المفهرسة الرقمية ‪,‬توجد طريقتان إلنشاء مصفوفات مفهرسة‪:‬‬


‫‪.1‬يمكن تعيين الفهرس تلقائيًا (يبدأ الفهرس دائ ًما عند ‪ ، )0‬كالتالي‪:‬‬

‫;)"‪$com = array("HP", "DELL", "TOSHIBA‬‬

‫‪.2‬أو يمكن تعيين الفهرس يدويًا‪:‬‬

‫;"‪$com[0] = "HP‬‬
‫;"‪$com[1] = "DELL‬‬
‫;"‪$com[2] = "TOSHIBA‬‬

‫صا يحتوي على قيم‬


‫يوضح المثال التالي مصفوفة مفهرسة باسم ‪ ، $com‬ويعين لها ثالثة عناصر ‪ ،‬ثم يطبع ن ً‬
‫المصفوفة‪.‬‬

‫‪Example‬‬
‫‪<?php‬‬
‫;)"‪$com = array("HP", "DELL", "TOSHIBA‬‬

‫‪19‬‬ ‫اعداد د‪.‬عايض الشباطي ‪2019‬‬


Basic concepts in PHP V1.01IPCSIT

echo "I like " . $com[0] . ", " . $com[1] . " and " . $com[2] . ".";
?>
:‫ كما يلي‬، for ‫ يمكن استخدام حلقة‬،‫لتكرار وطباعة جميع قيم المصفوفة المفهرسة‬

Example
<?php
$com = array("HP", "DELL", "TOSHIBA");
$arrlength = count($com);
for($x = 0; $x < $arrlength; $x++) {
echo $com[$x];
echo "<br>";
}
?>
:)‫المصفوفات المتصلة (الترابطية‬
.‫المصفوفات الترابطية عبارة عن مصفوفة تستخدم مفاتيح مسماة تقوم بتعيينها‬
:‫هناك طريقتان إلنشاء مصفوفة ترابطية‬

1.$age = array("Peter"=>"35", "Ben"=>"37", "Joe"=>"43");

or:

2.
$age['Peter'] = "35";
$age['Ben'] = "37";
$age['Joe'] = "43";

:‫يمكن بعد ذلك استخدام المفاتيح المسماة في الشفرة البرمجية‬

Example
<?php
$age = array("Peter"=>"35", "Ben"=>"37", "Joe"=>"43");
echo "Peter is " . $age['Peter'] . " years old.";
?>
:‫كما يلي‬، foreach ‫ يمكن استخدام حلقة‬، ‫لتكرار وطباعة جميع قيم المصفوفة الترابطية‬

Example
<?php
$age = array("Peter"=>"35", "Ben"=>"37", "Joe"=>"43");
foreach($age as $x => $x_value) {
echo "Key=" . $x . ", Value=" . $x_value;
echo "<br>";

20 2019 ‫عايض الشباطي‬.‫اعداد د‬


‫‪Basic concepts in PHP‬‬ ‫‪V1.01IPCSIT‬‬

‫}‬
‫>?‬
‫المصفوفات متعددة األبعاد‬
‫المصفوفة متعددة األبعاد هي مصفوفة تحتوي على مصفوفة واحدة أو أكثر‪.‬تدعم ‪ PHP‬المصفوفات متعددة األبعاد‬
‫التي تتكون من اعمدة وصفوف‪ .‬ومع ذلك ‪ ،‬يصعب على معظم األشخاص إدارة المصفوفات التي يزيد عمقها عن‬
‫ثالثة صفوف‪ .‬كما يشير بُعد المصفوفة إلى عدد الفهارس التي تحتاجها لتحديد عنصر‪ .‬المصفوفة ثنائية األبعاد ‪،‬‬
‫تحتاج إلى مؤشرين لتحديد عنصر ‪,‬اما بالنسبة للمصفوفة ثالثية األبعاد ‪ ،‬تحتاج إلى ثالثة مؤشرات لتحديد عنصر‬
‫‪ -‬المصفوفات ثنائية األبعاد‬
‫المصفوفة ثنائية األبعاد هي مصفوفة من المصفوفات (المصفوفة ثالثية األبعاد هي مجموعة من مصفوفات‬
‫المصفوفات)‪.‬‬

‫الجدول التالي يوضح المصفوفة ثنائية االبعاد‪:‬‬

‫‪Name‬‬ ‫‪Stock‬‬ ‫‪Sold‬‬

‫‪HP‬‬ ‫‪22‬‬ ‫‪18‬‬

‫‪DELL‬‬ ‫‪15‬‬ ‫‪13‬‬

‫‪ACER‬‬ ‫‪5‬‬ ‫‪2‬‬

‫‪TOSHIBA‬‬ ‫‪17‬‬ ‫‪15‬‬

‫يمكننا تخزين البيانات من الجدول أعاله في مصفوفة ثنائية األبعاد كما يلي‪:‬‬

‫( ‪$com = array‬‬
‫‪array("HP",22,18),‬‬
‫‪array("DELL",15,13),‬‬
‫‪array("ACER",5,2),‬‬
‫;) )‪array("TOSHIBA",17,15‬‬
‫اآلن تحتوي مصفوفة ‪ $com‬ثنائية األبعاد على أربع مصفوفات ‪ ،‬ولها مؤشرين‪ :‬الصف والعمود‪ ,‬للوصول إلى‬
‫عناصر المصفوفة‪ $com‬يجب أن نشير إلى المؤشرين (الصف والعمود)‪:‬‬

‫‪Example‬‬
‫‪<?php‬‬
‫;">‪echo $com[0][0].": In stock: ".$com[0][1].", sold: ".$com[0][2].".<br‬‬
‫;">‪echo $com[1][0].": In stock: ".$com[1][1].", sold: ".$com[1][2].".<br‬‬
‫;">‪echo $com[2][0].": In stock: ".$com[2][1].", sold: ".$com[2][2].".<br‬‬
‫;">‪echo $com[3][0].": In stock: ".$com[3][1].", sold: ".$com[3][2].".<br‬‬
‫>?‬

‫‪21‬‬ ‫اعداد د‪.‬عايض الشباطي ‪2019‬‬


Basic concepts in PHP V1.01IPCSIT

:‫النتيجة‬

HP: In stock: 22, sold: 18.


DELL: In stock: 15, sold: 13.
ACER: In stock: 5, sold: 2.
TOSHIBA: In stock: 17, sold: 15.

‫ (ال يزال يتعين علينا‬$cars ‫ أخرى للحصول على عناصر مصفوفة‬for ‫ داخل حلقة‬for ‫ضا وضع حلقة‬
ً ‫يمكننا أي‬
:(‫اإلشارة إلى المؤشرين‬

Example
<?php
for ($row = 0; $row < 4; $row++) {
echo "<p><b>Row number $row</b></p>";
echo "<ul>";
for ($col = 0; $col < 3; $col++) {
echo "<li>".$com[$row][$col]."</li>";
}
echo "</ul>";
}
?>
:‫النتيجة‬

Row number 0
• HP
• 22
• 18
Row number 1
• DELL
• 15
• 13
Row number 2
• ACER
• 5
• 2
Row number 3
• TOSHIBA
• 17
• 15

‫( للمصفوفات‬Sort(‫دوال الترتيب‬
.‫ تنازليًا أو تصاعديًا‬، ‫يمكن ترتيب او فرز العناصر الموجودة في المصفوفة بترتيب أبجدي أو رقمي‬
:‫دوال ترتيب او فرز المصفوفة‬

22 2019 ‫عايض الشباطي‬.‫اعداد د‬


‫‪Basic concepts in PHP‬‬ ‫‪V1.01IPCSIT‬‬

‫)( ‪Sort‬ترتيب المصفوفات بترتيب تصاعدي‬ ‫•‬


‫)( ‪rsort‬ترتيب المصفوفات بترتيب تنازلي‬ ‫•‬
‫)( ‪ asort‬فرز المصفوفات الترابطية بترتيب تصاعدي ‪ ،‬حسب القيمة‬ ‫•‬
‫)( ‪ksort‬ترتيب المصفوفات الترابطية بترتيب تصاعدي ‪ ،‬وفقًا للمفتاح‬ ‫•‬
‫)( ‪arsort‬ترتيب المصفوفات الترابطية بترتيب تنازلي حسب القيمة‬ ‫•‬
‫)( ‪krsort‬ترتيب المصفوفات الترابطية بترتيب تنازلي ‪ ،‬وفقًا للمفتاح‬ ‫•‬

‫ترتيب المصفوفة بترتيب تصاعدي)( ‪ - Sort‬يفرز المثال التالي عناصر مصفوفة ‪ $com‬بترتيب أبجدي تصاعدي‪:‬‬
‫‪Example‬‬
‫‪<?php‬‬
‫;)"‪$com = array("ACER", "TOSHIBA", "DELL‬‬
‫;)‪sort($com‬‬
‫>?‬
‫النتيجة‪:‬‬

‫‪ACER‬‬
‫‪DELL‬‬
‫‪TOSHIBA‬‬

‫يفرز المثال التالي عناصر مصفوفة ‪ $number‬بترتيب رقمي تصاعدي‪:‬‬

‫‪Example‬‬
‫‪<?php‬‬

‫;)‪$numbers = array(4, 6, 2, 22, 11‬‬


‫;)‪sort($numbers‬‬
‫;)‪$arrlength = count($numbers‬‬
‫{ )‪for($x = 0; $x < $arrlength; $x++‬‬
‫;]‪echo $numbers[$x‬‬
‫;">‪echo "<br‬‬
‫}‬

‫>?‬

‫ترتيب المصفوفة بترتيب تنازلي )( ‪ rsort‬يرتب المثال التالي عناصر مصفوفة ‪ $com‬بترتيب أبجدي تنازلي‪:‬‬

‫‪<?php‬‬

‫;)"‪$com = array("ACER", "TOSHIBA", "DELL‬‬

‫;)‪rsort($com‬‬

‫‪23‬‬ ‫اعداد د‪.‬عايض الشباطي ‪2019‬‬


Basic concepts in PHP V1.01IPCSIT

$clength = count($com);

for($x = 0; $x < $clength; $x++) {

echo $com[$x];

echo "<br>";

?>

:‫النتيجة‬

TOSHIBA
DELL
ACER

‫ يرتب المثال التالي المصفوفة الترابطية‬asort() ‫ حسب القيمة نستخدم‬، )‫مصفوفة الفرز (ترتيب تصاعدي‬
:‫ وفقًا للقيمة‬، ‫بترتيب تصاعدي‬

<?php

$age = array("Peter"=>"35", "Ben"=>"37", "Joe"=>"43");

asort($age);

foreach($age as $x => $x_value) {

echo "Key=" . $x . ", Value=" . $x_value;

echo "<br>";

?>

:‫النتيجة‬

Key=Peter, Value=35

Key=Ben, Value=37

Key=Joe, Value=43

24 2019 ‫عايض الشباطي‬.‫اعداد د‬


Basic concepts in PHP V1.01IPCSIT

‫ يقوم المثال التالي بترتيب المصفوفة الترابطية‬- ksort () Key‫ وفقًا لـ‬، )‫ترتيب المصفوفة (ترتيب تصاعدي‬
:‫ وفقًا للمفتاح‬، ‫بترتيب تصاعدي‬

<?php

$age = array("Peter"=>"35", "Ben"=>"37", "Joe"=>"43");

ksort($age);

foreach($age as $x => $x_value) {

echo "Key=" . $x . ", Value=" . $x_value;

echo "<br>";

?>

:‫النتيجة‬

Key=Ben, Value=37
Key=Joe, Value=43
Key=Peter, Value=35

‫ يقوم المثال التالي بترتيب المصفوفة الترابطية‬arsort () ‫ نستخدم‬- ‫ حسب القيمة‬، )‫مصفوفة الفرز (ترتيب تنازلي‬
:‫بترتيب تنازلي وفقًا للقيمة‬
<?php
$age = array("Peter"=>"35", "Ben"=>"37", "Joe"=>"43");
arsort($age);
foreach($age as $x => $x_value) {
echo "Key=" . $x . ", Value=" . $x_value;
echo "<br>";
}
?>
:‫النتيجة‬

Key=Joe, Value=43
Key=Ben, Value=37
Key=Peter, Value=35

25 2019 ‫عايض الشباطي‬.‫اعداد د‬


‫‪Basic concepts in PHP‬‬ ‫‪V1.01IPCSIT‬‬

‫مصفوفة الفرز (ترتيب تنازلي) ‪ ،‬وفقًا لـ‪ Key‬نستخدم ()‪ - krsort‬يرتب المثال التالي المصفوفة الترابطية بترتيب‬
‫تنازلي ‪ ،‬وفقًا للمفتاح‪:‬‬

‫‪<?php‬‬
‫;)"‪$age = array("Peter"=>"35", "Ben"=>"37", "Joe"=>"43‬‬
‫;)‪krsort($age‬‬
‫{ )‪foreach($age as $x => $x_value‬‬
‫;‪echo "Key=" . $x . ", Value=" . $x_value‬‬
‫;">‪echo "<br‬‬
‫}‬
‫>?‬
‫النتيجة‪:‬‬

‫‪Key=Peter, Value=35‬‬
‫‪Key=Joe, Value=43‬‬
‫‪Key=Ben, Value=37‬‬

‫‪ Superglobals‬المتغيرات العامة‬
‫المتغيرات المحددة مسبقًا في ‪ PHP‬هي "‪ ، "superglobals‬مما يعني أنه يمكن الوصول إليها دائ ًما ‪ ،‬بغض النظر‬
‫عن المجال ‪ -‬ويمكن الوصول إليها من أي دالة أو فئة أو ملف دون الحاجة إلى القيام بتعريفها كمتغيرات عامة‬
‫ومتوفرة في جميع النطاقات عبر البرنامج النصي‪ .‬وليست هناك حاجة لعمل متغير ‪ ,$Global‬وتعتبر متغيرات‬
‫مدمجة متوفرة دائ ًما في جميع النطاقات)‪)Scope‬‬

‫بعض من متغيرات ‪:Superglobal‬‬

‫•‬ ‫‪$GLOBALS‬‬
‫•‬ ‫‪$_SERVER‬‬
‫•‬ ‫‪$_REQUEST‬‬
‫•‬ ‫‪$_POST‬‬
‫•‬ ‫‪$_GET‬‬
‫•‬ ‫‪$_FILES‬‬
‫•‬ ‫‪$_ENV‬‬
‫•‬ ‫‪$_COOKIE‬‬
‫•‬ ‫‪$_SESSION‬‬

‫‪$ GLOBALS‬‬
‫هو متغير عام يستخدم للوصول إلى المتغيرات من أي مكان في نص‪ PHP‬من داخل الدوال ‪,‬تخزن ‪ PHP‬جميع‬
‫المتغيرات العامة في مصفوفة تسمى ‪ $ GLOBALS [index].‬الفهرس يحمل اسم المتغير‪ ,‬ويعتبر مصفوفة‬

‫‪26‬‬ ‫اعداد د‪.‬عايض الشباطي ‪2019‬‬


Basic concepts in PHP V1.01IPCSIT

‫ أسماء المتغيرات هي مفاتيح‬.‫ترابطية تحتوي على مراجع لجميع المتغيرات المحددة حاليًا في النطاق العام للنص‬
.‫المصفوفة‬

.‫يشير إلى جميع المتغيرات المتاحة في النطاق العام‬


:$ GLOBALS ‫يوضح المثال أدناه كيفية استخدام المتغير العام‬
Example
<?php
function test() {
$var = "local variable";
echo '$var in global scope: ' . $GLOBALS["var"] . "\n";
echo '$var in current scope: ' . $var . "\n";
}
$var = "Example content";
test();
?>
:‫النتيجة‬

$var in global scope: Example content


$var in current scope: local variable

‫ خارج الدالة مسند له‬$Global ‫ومتغير عام‬, ‫ متغير محلي‬$var ‫ تم انشاء متغيرين بنفس االسم‬، ‫في المثال أعاله‬
Example content ‫القيمة‬

:‫فرضا اذا تم حذف المتغير العام واصبح المثال كاالتي‬

Example
<?php
function test() {
$var = "local variable";
echo '$var in global scope: ' . $var . "\n";
echo '$var in current scope: ' . $var . "\n";
}
$var = "Example content";
test();
?>

27 2019 ‫عايض الشباطي‬.‫اعداد د‬


‫‪Basic concepts in PHP‬‬ ‫‪V1.01IPCSIT‬‬

‫ستظهر النتيجة بالشكل االتي‪:‬‬

‫‪$var in global scope: local variable‬‬


‫‪$var in current scope: local variable‬‬

‫‪$ _SERVER‬‬
‫‪ $ _SERVER‬عبارة عن مصفوفة تحتوي على معلومات مثل العناوين والمسارات ومواقع البرامج النصية‪ ,‬يتم‬
‫إنشاء االدخال في هذه المجموعة بواسطة خادم الويب‪ ,Web server‬ليس هناك ما يضمن أن كل ‪ Web server‬أيًا‬
‫من هذه ؛ قد تحذف بعضها ‪ ،‬أو تقدم خدمات أخرى غير مدرجة‪ ,‬ومع ذلك ‪ ،‬يوجد عدد كبير من هذه المتغيرات‬
‫يمكن االطالع عليها ‪ .....‬على موقع اللغة‬
‫يوضح المثال أدناه كيفية استخدام بعض العناصر في ‪:$ _SERVER‬‬

‫‪Example‬‬
‫‪<?php‬‬
‫;]'‪echo $_SERVER['PHP_SELF‬‬
‫;">‪echo "<br‬‬
‫;]'‪echo $_SERVER['SERVER_NAME‬‬
‫;">‪echo "<br‬‬
‫;]'‪echo $_SERVER['HTTP_HOST‬‬
‫;">‪echo "<br‬‬
‫;]'‪echo $_SERVER['HTTP_REFERER‬‬
‫;">‪echo "<br‬‬
‫;]'‪echo $_SERVER['HTTP_USER_AGENT‬‬
‫;">‪echo "<br‬‬
‫;]'‪echo $_SERVER['SCRIPT_NAME‬‬
‫>?‬
‫النتيجة‪:‬‬
‫‪/ayedh.php‬‬
‫‪localhost‬‬
‫‪localhost‬‬
‫‪ERROR‬‬
‫)‪Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko‬‬
‫‪Chrome/84.0.4147.135 Safari/537.36‬‬
‫‪/ayedh.php‬‬
‫يسرد الجدول التالي أهم العناصر التي يمكن أن تدخل داخل ‪:$_ SERVER‬‬
‫وصف العنصر‬ ‫المتغير‬
‫يعيد اسم ملف النص المنفذ حاليا‬ ‫]'‪$_SERVER ['PHP_SELF‬‬
‫يُرجع إصدار واجهة البوابة العامة (‪ )CGI‬التي يستخدمها الخادم‬ ‫]'‪$_SERVER ['GATEWAY_INTERFACE‬‬
‫يُرجع عنوان ‪ IP‬للخادم المضيف‬ ‫]'‪$_SERVER ['SERVER_ADDR‬‬
‫يعرض اسم الخادم المضيف (مثل ‪)www.tssy.com‬‬ ‫]'‪$_SERVER ['SERVER_NAME‬‬

‫‪28‬‬ ‫اعداد د‪.‬عايض الشباطي ‪2019‬‬


‫‪Basic concepts in PHP‬‬ ‫‪V1.01IPCSIT‬‬

‫إرجاع سلسلة تعريف الخادم (مثل ‪)Apache / 2.2.24‬‬ ‫]' ‪$_SERVER ['SERVER_SOFTWARE‬‬
‫يعرض االسم ومراجعة بروتوكول المعلومات (مثل ‪HTTP /‬‬ ‫]'‪$_SERVER ['SERVER_PROTOCOL‬‬
‫‪)1.1‬‬
‫إرجاع طريقة الطلب المستخدمة للوصول إلى الصفحة (مثل‬ ‫]'‪$_SERVER ['REQUEST_METHOD‬‬
‫‪)POST‬‬
‫إرجاع الطابع الزمني لبداية الطلب (مثل ‪)1377687496‬‬ ‫]'‪$_SERVER ['REQUEST_TIME‬‬
‫إرجاع سلسلة االستعالم إذا تم الوصول إلى الصفحة عبر سلسلة‬ ‫]'‪$_SERVER ['QUERY_STRING‬‬
‫استعالم‬
‫إرجاع عنوان قبول من الطلب الحالي‬ ‫]'‪$_SERVER ['HTTP_ACCEPT‬‬
‫إرجاع رأس ‪ Accept_Charset‬من الطلب الحالي (مثل ‪utf-8‬‬ ‫]'‪$_SERVER ['HTTP_ACCEPT_CHARSET‬‬
‫‪)ISO-8859-1 ،‬‬
‫يقوم بإرجاع اسم المضيف من الطلب الحالي‬ ‫]'‪$_SERVER ['HTTP_HOST‬‬
‫عنوان ‪ URL‬الكامل للصفحة الحالية (ال تدعمه بعض‬ ‫]'‪$_SERVER ['HTTP_REFERER‬‬
‫المتصفحات)‬
‫إرجاع عنوان ‪ IP‬من المكان الذي يستعرض المستخدم الصفحة‬ ‫]'‪$_SERVER ['REMOTE_ADDR‬‬
‫الحالية منه‬
‫إرجاع اسم المضيف من حيث يقوم المستخدم بعرض الصفحة‬ ‫]'‪$_SERVER ['REMOTE_HOST‬‬
‫الحالية‬
‫إرجاع المنفذ المستخدم على جهاز المستخدم للتواصل مع خادم‬ ‫]'‪$_SERVER ['REMOTE_PORT‬‬
‫الويب‬
‫يعرض] اسم المسار المطلق للنص البرمجي الجاري تنفيذه‬ ‫]'‪$_SERVER ['SCRIPT_FILENAME‬‬
‫يُرجع القيمة المعطاة لتوجيه ‪ SERVER_ADMIN‬في ملف‬ ‫]'‪$_SERVER ['SERVER_ADMIN‬‬
‫تكوين خادم الويب (إذا تم تشغيل البرنامج النصي على مضيف‬
‫افتراضي ‪ ،‬فستكون القيمة المحددة لهذا المضيف الظاهري) (مثل‬
‫‪) admin@admin.com‬‬
‫إرجاع المنفذ الموجود على جهاز الخادم الذي يستخدمه خادم‬ ‫]'‪$_SERVER ['SERVER_PORT‬‬
‫الويب لالتصال (مثل ‪)80‬‬
‫يعرض إصدار الخادم واسم المضيف الظاهري اللذين تمت‬ ‫]''‪$_SERVER ['SERVER_SIGNATURE‬‬
‫إضافتهما إلى الصفحات التي ينشئها الخادم‬
‫إرجاع المسار المستند إلى نظام الملفات إلى البرنامج النصي‬ ‫]'‪$_SERVER ['PATH_TRANSLATED‬‬
‫الحالي‬
‫يعيد مسار النص الحالي‬ ‫]''‪$_SERVER ['SCRIPT_NAME‬‬
‫إرجاع ‪ URI‬للصفحة الحالية‬ ‫]'‪$_SERVER ['SCRIPT_URI‬‬

‫‪$_REQUEST‬‬
‫‪ $ _REQUEST‬هو متغير شامل يستخدم لجمع البيانات بعد إرسال نموذج ‪ .HTML‬ويعتبر مصفوفة ترابطية‬
‫تحتوي افتراضيًا على محتويات ‪ $ _ GET‬و ‪ $ _ POST‬و ‪.$_ COOKIE‬‬
‫يتم ايجاد المتغيرات في ‪ $_REQUEST‬للنص البرمجي عبر آليات اإلدخال ‪ GET‬و ‪ POST‬و ‪، COOKIE‬‬
‫وبالتالي يمكن تعديلها بواسطة المستخدم البعيد وال يمكن الوثوق بها‪.‬‬
‫يوضح المثال أدناه نموذ ًجا يحتوي على حقل إدخال وزر إرسال‪ .‬عندما يرسل المستخدم البيانات بالنقر فوق "‬
‫‪ ، " submit‬يتم إرسال بيانات النموذج إلى الملف المحدد في سمة اإلجراء لعالمة <‪ .>form‬في هذا المثال ‪ ،‬نشير‬
‫إلى هذا الملف نفسه لمعالجة بيانات النموذج‪ ,‬إذا كنت ترغب في استخدام ملف ‪ PHP‬آخر لمعالجة بيانات النموذج ‪،‬‬

‫‪29‬‬ ‫اعداد د‪.‬عايض الشباطي ‪2019‬‬


‫‪Basic concepts in PHP‬‬ ‫‪V1.01IPCSIT‬‬

‫فاستبدل ذلك باسم الملف الذي تختاره‪ .‬بعد ذلك ‪ ،‬يمكننا استخدام المتغير العام (‪REQUEST)Super Global‬‬
‫_‪$‬لجمع قيمة حقل اإلدخال‪:‬‬

‫‪Example‬‬
‫>‪<html‬‬
‫>‪<body‬‬
‫>">?;]'‪<form method="post" action="<?php echo $_SERVER['PHP_SELF‬‬
‫>"‪Name: <input type="text" name="fname‬‬
‫>"‪<input type="submit‬‬
‫>‪</form‬‬
‫‪<?php‬‬
‫{ )"‪if ($_SERVER["REQUEST_METHOD"] == "POST‬‬
‫‪// collect value of input field‬‬
‫;)]'‪$name = htmlspecialchars($_REQUEST['fname‬‬
‫{ ))‪if (empty($name‬‬
‫;"‪echo "Name is empty‬‬
‫{ ‪} else‬‬
‫;‪echo $name‬‬
‫}‬
‫}‬
‫>?‬
‫>‪</body‬‬
‫>‪</html‬‬

‫‪https://www.php.net/manual/en/reserved.variables.request.php‬‬

‫‪$ _POST‬‬
‫‪ $ _POST‬هو متغير عام يستخدم لجمع بيانات النموذج بعد إرسال نموذج ‪ HTML‬باستخدام "‪method="post‬‬
‫ضا على نطاق واسع لتمرير المتغيرات‪ .‬ويعتبرمصفوفة تحوي المتغيرات التي يتم‬
‫‪ .‬يستخدم ‪ $ _POST‬أي ً‬

‫‪.POST‬‬ ‫تمريرها إلى البرنامج النصي عبر الطريقة‬

‫يوضح المثال أدناه نموذ ًجا يحتوي على حقل إدخال وزر إرسال‪ .‬عندما يرسل المستخدم البيانات بالنقر فوق‬
‫"إرسال" ‪ ،‬يتم إرسال بيانات النموذج إلى الملف المحدد في سمة اإلجراء لعالمة <‪ .>form‬في هذا المثال ‪ ،‬نشير‬
‫إلى الملف نفسه لمعالجة بيانات النموذج‪ .‬إذا كنت ترغب في استخدام ملف ‪ PHP‬آخر لمعالجة بيانات النموذج ‪،‬‬
‫فاستبدل ذلك باسم الملف الذي تختاره‪ .‬بعد ذلك ‪ ،‬يمكننا استخدام المتغير العام الفائق ‪ $_ POST‬لتجميع قيمة حقل‬

‫اإلدخال‪:‬‬
‫‪Example‬‬

‫‪30‬‬ ‫اعداد د‪.‬عايض الشباطي ‪2019‬‬


Basic concepts in PHP V1.01IPCSIT

<html>
<body>
<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
Name: <input type="text" name="fname">
<input type="submit">
</form>
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
// collect value of input field
$name = $_POST['fname'];
if (empty($name)) {
echo "Name is empty";
} else {
echo $name;
}
}
?>
</body>
</html>

$ _GET
‫وهو متغير يستخدم‬.GET ‫مصفوفة تحوي المتغيرات التي يتم تمريرها إلى البرنامج النصي عبر الطريقة‬
‫ضا جمع‬
ً ‫أي‬$ _GET ‫ ويمكن لـ‬method ="get" ‫ باستخدام‬HTML ‫لجمع بيانات النموذج بعد إرسال نموذج‬
.URL ‫البيانات المرسلة في عنوان‬
:‫ تحتوي على ارتباط تشعبي بمعامالت‬HTML ‫فرضا لدينا صفحة‬
<html>
<body>
<a href="test_get.php?subject=PHP&web=tssy.com">Test $GET</a>
</body>
</html>
‫" إلى‬web" ‫" و‬subject" ‫ يتم إرسال المعامالت‬، "Test $ GET" ‫عندما ينقر المستخدم على الرابط‬
‫ يوضح المثال‬$ _GET ‫" باستخدام‬test_get.php" ‫ ويمكن بعد ذلك الوصول إلى قيمهما في‬،"test_get.php"
: "test_get.php":‫أدناه الشفرة في‬

Example
<html>
<body>

31 2019 ‫عايض الشباطي‬.‫اعداد د‬


‫‪Basic concepts in PHP‬‬ ‫‪V1.01IPCSIT‬‬

‫‪<?php‬‬
‫;]'‪echo "Study " . $_GET['subject'] . " at " . $_GET['web‬‬
‫>?‬
‫>‪</body‬‬
‫>‪</html‬‬
‫‪ Regular Expressions‬التعبيرات المنتظمة‬
‫هذه التقنية تساعدك على تفادي األخطاء في صفحة الويب عند حدوثه مثل أن يقوم مستخدم ما بكتابة بريدد الكتروندي‬
‫غير صحيح (مثال ‪ )a@y@.k.d :‬هذا البريد غير صحيح وألجل أن تقوم بمندع حصدول أي خطدأ مثدل ذلدك وتقييدد‬
‫العبددارات التددي يدددخلها المسددتخدم فإنددك تقددوم بإسددتخدام ال (‪ )Regular Expressions‬إنددك باألصددح تجعددل قواعددد‬
‫للكلمات التي يدخلها المستخدم فمثالً تجعل المستخدم ال يدخل سوي أرقام أو حروف فقط أو شكل معدين مدن الكلمدات‬
‫‪ ،‬حيث تقوم أوالً بإنشاء نمط للكلمة التي تريد المستخدم أن يقوم بإدخالها ‪.‬‬
‫تُعرف أي ً‬
‫ضا باسم ‪ regex‬وهي عبارة عن خوارزمية قوية لمطابقة األنماط يمكن إجراؤها في تعبير واحد‪ .‬تستخدم‬
‫التعبيرات العادية عوامل حسابية مثل (‪ )^ ، - ، +‬إلنشاء تعبيرات معقدة في إنجاز مهام مثل التحقق من صحة‬
‫عناوين البريد اإللكتروني وعنوان ‪ IP‬وما إلى ذلك‪ .‬ونستطيع ان نقول انه عبارة عن سلسلة من األحرف التي تشكل‬
‫نمط بحث‪,‬عندما تبحث عن بيانات في نص ‪ ،‬يمكن استخدام نمط البحث لوصف ما تبحث عنه ويمكن ايضا أن‬
‫يكون التعبير المنتظم حرفًا واحدًا أو نم ً‬
‫طا أكثر تعقيدًا‪ .‬يمكن استخدام التعبيرات إلجراء جميع أنواع عمليات البحث‬
‫عن النص واستبدال النص وغيرها من التعبيرات‪.‬‬
‫لماذا نستخدم التعابير النمطية‬
‫تعمل التعبيرات العادية على تبسيط تحديد األنماط في بيانات السلسلة عن طريق اسدتدعاء دالدة واحددة‪ .‬هدذا يدوفر لندا‬
‫وقت الترميز عند التحقق من صحة إدخال المستخدم مثل عنوان البريد اإللكتروني وأسماء المجاالت وأرقام الهواتف‬
‫وعناوين ‪.IP‬‬
‫بناء التعبير‬
‫تكون التعبيرات النمطية عبارة عن سالسل مكونة من محددات ونمط ومعامالت(رموز) اختيارية‪.‬‬
‫;";‪$exp = "/tssy/i‬‬

‫في المثال أعاله ‪ / ،‬هو المحدد ‪ tssy ،‬هو النمط الذي يتم البحث عنه ‪ ،‬و ‪ i‬هو رمز يجعل البحث غير حساس لحالة‬
‫األحرف‪.‬‬

‫يمكن أن يكون المحدِّد أي رمزا ليس فقط حرفًا أو رق ًما أو شرطة مائلة للخلف أو مسافة‪ ,‬المحدد األكثر شيو ً‬
‫عا هو‬
‫الشرطة المائلة لألمام (‪ ، )/‬ولكن عندما يحتوي النمط الخاص بك على خطوط مائلة لألمام ‪ ،‬فمن االفضل اختيار‬
‫المحددات األخرى مثل ‪ #‬أو ~‪.‬‬

‫‪32‬‬ ‫اعداد د‪.‬عايض الشباطي ‪2019‬‬


‫‪Basic concepts in PHP‬‬ ‫‪V1.01IPCSIT‬‬

‫دوال التعبير العادي‬


‫توفر الـ ‪ PHP‬مجموعة متنوعة من الدوال التي تتيح استخدام التعبيرات النمطية‪ ,‬يوجد العديد من دوال التعبير‬
‫ونذكر بعضا منها ‪:‬‬
‫• ()‪ preg_match‬تُرجددع ‪ 1‬إذا تددم العثددور علددى الددنمط فددي السلسددلة و ‪ 0‬إذا لددم يكددن كددذلك(إذا كانددت السلسددلة‬
‫تحتوي على تطابق من النمط)‪.‬‬
‫• ()‪ preg_match_all‬ترجع عدد المرات التي تم فيها العثور على النمط في السلسلة ‪ ،‬و‪0‬إذا لم يوجد‪.‬‬
‫• ()‪ - preg_replace‬تُستخدم هذه الدالة إلجراء تطابق نمط على سلسلة ثم استبدال التطابق بالنص المحدد‪.‬‬
‫• ‪ - preg_split‬تُستخدم هذه الدالة إلجراء تطابق نمط على سلسلة ثم تقسيم النتائج إلى مصفوفة رقمية‪.‬‬
‫عند إنشاء قالب ‪ HTML‬مخصص‪ .‬يمكن استخدام التعبيرات العادية لتحديد عالمات القالب واستبدالها ببيانات فعلية‪.‬‬
‫في المثال ادناه لدالة التعبير العادي مثل ‪ preg_match‬أو ‪ preg_split‬أو ‪.preg_replace‬‬
‫‪<?php‬‬
‫;)‪function_name('/pattern/',subject‬‬
‫>?‬
‫ويوضح المثال‪:‬‬
‫الدالة " (‪ "function_name(...‬قدتكون ‪ preg_match‬أو ‪ preg_split‬أو ‪. preg_replace‬‬
‫"‪ "/.../‬تشير ال ُ‬
‫شرط المائلة إلى بداية ونهاية تعبير نمطي‪.‬‬
‫'‪ '/ pattern /‬هو النمط الذي نحتاج إلى مطابقته‪.‬‬
‫"‪ " subject‬هو السلسلة النصية المطلوب المطابقة معها‪.‬‬
‫) (‪preg_match‬‬
‫يستخدم المثال التالي دالة ‪ preg_match‬إلجراء تطابق نمط بسيط لكلمة ‪ tssy2020‬في عنوان ‪ .URL‬يوضح‬
‫الكود أدناه التنفيذ للمثال أعاله‪.‬‬
‫‪<?php‬‬
‫;"‪$my_url = "www.tssy2020.com‬‬
‫))‪if (preg_match("/tssy/", $my_url‬‬
‫{‬
‫;"‪echo "the url $my_url contains tssy‬‬
‫}‬
‫‪else‬‬
‫{‬
‫;"‪echo "the url $my_url does not contain tssy‬‬
‫}‬
‫>?‬

‫‪33‬‬ ‫اعداد د‪.‬عايض الشباطي ‪2019‬‬


‫‪Basic concepts in PHP‬‬ ‫‪V1.01IPCSIT‬‬

‫دعونا نفحص الجزء من الكود المسؤول عن النتيجة)‪preg_match("/tssy/", $my_url‬‬


‫"‪ "preg_match‬هي دالة التعبير العادي‬
‫'‪ '/ tssy /‬هو نمط التعبير العادي المطلوب مطابقته‬
‫"‪ "$ my_url‬هو المتغير الذي يحتوي على النص المطلوب المطابقة معه‪.‬‬
‫النتيجة‪:‬‬
‫‪the url www.tssy2020.com contains tssy‬‬

‫‪Preg_split‬‬

‫استخدام الدالة ‪ ,preg_split‬سوف تأخذ سلسلة نصية وتحويلها في مصفوفة ؛ النمط المراد مطابقته هو مسافة‬
‫واحدة‪ ,‬السلسلة النصية التي سيتم استخدامها في هذا المثال هي "‪." I Love Regular Expressions‬‬
‫‪<?php‬‬
‫;"‪$my_text="I Love Regular Expressions‬‬
‫;)‪$my_array = preg_split("/ /", $my_text‬‬
‫;) ‪print_r($my_array‬‬
‫>?‬
‫النتيجة‪:‬‬
‫) ‪Array ( [0] => I [1] => Love [2] => Regular [3] => Expressions‬‬
‫‪https://www.php.com/php-regular-expressions.html#1‬‬

‫تعبيرا عاديًا إلجراء بحث لحالة األحرف عن "‪ "tssy‬في سلسلة‪:‬‬


‫ً‬ ‫مثال ‪:‬استخدم‬

‫‪<?php‬‬
‫;"‪$str = "Visit tssy‬‬
‫;"‪$pattern = "/tssy/i‬‬
‫‪echo preg_match($pattern, $str); // Outputs 1‬‬
‫>?‬
‫()‪preg_match_all‬‬
‫ستخبرنا الدالة ()‪ preg_match_all‬بعدد التطابقات التي تم العثور عليها للنمط في السلسلة‪.‬‬
‫مثال‪:‬‬
‫تعبيرا عاديًا إلجراء حساب لحالة األحرف لعدد مرات ظهور "‪ "ain‬في سلسلة‪:‬‬
‫ً‬ ‫استخدم‬
‫‪<?php‬‬
‫;"‪$str = "The rain in SPAIN falls mainly on the plains.‬‬
‫;"‪$pattern = "/ain/i‬‬
‫‪echo preg_match_all($pattern, $str); // Outputs 4‬‬
‫>?‬
‫)( ‪preg_replace‬‬
‫ستستبدل الدالة )( ‪ preg_replace‬جميع تطابقات النمط في سلسلة بسلسلة أخرى‪.‬‬
‫تعبيرا عاديًا غير حساس لحالة األحرف الستبدال ‪ Microsoft‬بـ ‪ tssy‬في سلسلة‪:‬‬
‫ً‬ ‫مثال‪:‬استخدم‬

‫‪34‬‬ ‫اعداد د‪.‬عايض الشباطي ‪2019‬‬


‫‪Basic concepts in PHP‬‬ ‫‪V1.01IPCSIT‬‬

‫‪<?php‬‬
‫;"!‪$str = "Visit Microsoft‬‬
‫;"‪$pattern = "/microsoft/i‬‬
‫"!‪echo preg_replace($pattern, "tssy", $str); // Outputs "Visit tssy‬‬
‫>?‬
‫الرموز المستخدمة للمغيرات في التعبير العادي‪Regular Expression Modifiers‬‬
‫يمكن للمغيرات تغيير طريقة إجراء البحث‪.‬‬
‫‪ i‬يقوم بإجراء بحث غير حساس لحالة األحرف‬
‫‪ m‬يُجري بحثًا متعدد األسطر (األنماط التي تبحث عن بداية سلسلة أو نهايتها ستطابق بداية أو نهاية كل سطر(‬
‫‪ u‬لتمكين المطابقة الصحيحة ألنماط ‪ UTF-8‬المشفرة‬
‫أنماط التعبير العادي‬
‫يتم استخدام األقواس للعثور على مجموعة من األحرف‪:‬‬
‫يمكننا استعمال اختصارات لبعض التعبيرات فمثالً إذا كنا نريد كلمة ال تحتوي على أي رقم كنا سنكتب كالتالى‬
‫]‪[^123456789‬‬
‫يمكن أن نستعمل اختصار لهذا الموضوع كالتالى ‪:‬‬
‫]‪[^0-9‬‬
‫وحتي إذا أردنا أن يتأكد من وجود رقم من واحد الى تسعه فقط علينا مسح الـ^‬
‫]‪[0-9‬‬
‫وأيضا الحروف الصغيرة من ‪ a‬الى ‪z‬‬
‫]‪[a-z‬‬
‫وإذا نريد التأكد من عدم وجودها‬
‫]‪[^a-z‬‬
‫نفس الشي مع الحروف الكبيرة ‪.‬‬
‫هناك اختصارات اخري لهذا الموضوع كالتالى ‪:‬‬

‫ملخص بعض القواعد في الجدول التالى ‪:‬‬


‫المعني‬ ‫القاعدة‬
‫أي حرف كان ‪ a‬او ‪ b‬او ‪c‬‬ ‫]‪[abc‬‬
‫أي حرف غير ‪ a‬و ‪ b‬و ‪c‬‬ ‫]‪[^abc‬‬
‫كل الحروف من ‪ a‬الى ‪z‬‬ ‫]‪[a-z‬‬
‫‪ \d‬لالرقام و ‪ \D‬لغير االرقام‬ ‫‪\d\D‬‬
‫‪ \s‬للفراغ (‪ )space‬و‪ \S‬لغير الفراغ (‪)no space‬‬ ‫‪\s\S‬‬
‫ابحث عن تطابق في بداية كلمة مثل هذا ‪ ،: \ bWORD‬أو‬ ‫‪\b‬‬
‫في نهاية كلمة مثل هذه‪: WORD \ b‬‬
‫أي حرف‬ ‫‪.‬‬
‫تقوم باعتبار ‪ abc‬كمجموعة ‪..‬‬ ‫)‪(abc‬‬
‫يتطابق مع أي سلسلة تحتوي على صفر أو تكرار واحد لـ ‪n‬‬ ‫؟‬
‫حرف علي االقل او مجموعة حروف تتكرر مره او اكثر‬ ‫‪+‬‬
‫يتطابق مع أي سلسلة تحتوي على صفر أو تكرار واحد لـ‪n‬‬ ‫*‬
‫تكرار بعدد معين من المرات ‪..‬‬ ‫}‪{x,y‬‬
‫تكرار بحد اقصي من المرات ‪..‬‬ ‫}‪{,y‬‬

‫‪35‬‬ ‫اعداد د‪.‬عايض الشباطي ‪2019‬‬


‫‪Basic concepts in PHP‬‬ ‫‪V1.01IPCSIT‬‬

‫تكرار بحد ادني من المرات ‪...‬‬ ‫}‪{x,‬‬


‫تكرار بعدد معين من المرات‬ ‫}‪{x‬‬
‫في بدايه النص‬ ‫^‬
‫البحث عن تطابق في نهاية السلسلة كما في‪World$ :‬‬ ‫‪$‬‬
‫ابحث عن تطابق ألي نمط من األنماط المفصولة بعالمة |‬ ‫|‬
‫مثل‪cat | dog | fish :‬‬

‫تعبير للتاكد من ايميل‬


‫‪^[_a-zA-Z0-9-]+(\.[_A-Za-z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*$‬‬

‫شرح التعبير‬
‫الشرح‬ ‫الرمز‬
‫يجب ان يبدا النص‬ ‫^‬
‫أي حرف من ‪ a-z‬كبيرا كان او صغيرا او _او ارقام‬ ‫]‪[_A-Za-z0-9-‬‬
‫وقد يكون هذا الحرف متكررا اكثر من مره‬ ‫‪+‬‬
‫باالضافه الى انه قد يتبع النقطه حروف وارقام‬ ‫)‪(\.[_A-Za-z0-9-]+‬‬
‫يبحث عن تطابق يبدأ بحرف معين و ينتهي بحرف‬ ‫*‬
‫معين دون االهتمام فيما بينهم وقد ال يتبعه اوقد يتبعه‬
‫ويتكرر اكثر من مره‬
‫وبعد ذلك يكون لديه حرف ال@‬ ‫@‬
‫وايضا نفس القواعد في النهاية‬ ‫‪[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*$‬‬
‫فحص ايجابي او سليي‬ ‫!?( ‪(?= or‬‬
‫مالحظة‪ :‬إذا احتاج التعبير إلى البحث عن أحد األحرف الخاصة ‪ ،‬يمكن استخدام شرطة مائلة للخلف (\) للتخلص‬
‫منها‪ .‬على سبيل المثال ‪ ،‬للبحث عن عالمة استفهام واحدة أو أكثر ‪ ،‬يمكن استخدام التعبير التالي ‪:‬‬
‫;'‪$pattern = '/\?+/‬‬

‫التجميع ‪Grouping‬‬
‫ضا لتحديد أجزاء من‬
‫يمكن استخدام األقواس ( ) لتطبيق المعامالت على األنماط بأكملها كما يمكن استخدامها أي ً‬
‫النمط الستخدامها كمطابقة‪.‬‬
‫عا برقم ‪ 2‬من الحرفين ‪:na‬‬
‫مثال‪ :‬استخدم التجميع للبحث عن كلمة "‪ "banana‬من خالل البحث عن ‪ ba‬متبو ً‬
‫‪<?php‬‬
‫;"‪$str = "Apples and bananas.‬‬
‫;"‪$pattern = "/ba(na){2}/i‬‬
‫‪echo preg_match($pattern, $str); // Outputs 1‬‬
‫>?‬
‫‪Complete RegExp Reference For a complete reference, go to our Complete PHP Regular Expression Reference.‬‬
‫‪The reference contains descriptions and examples of all Regular Expression functions.‬‬

‫معالجة نموذج ‪ HTML‬بسيط‪.‬‬


‫النماذج في الويب أو صفحات االنترنت عبارة عن استمارات تقوم بتعبئتها ثم عند إرسالها لخادم الويب (السيرفر)‬
‫يتلقاها برنامج يقوم بإجراء العمليات عليها باستخدام لغات ديناميكية‪ ,‬لنقل مثالً أردت شراء كتاب من االنترنت فإنك‬

‫‪36‬‬ ‫اعداد د‪.‬عايض الشباطي ‪2019‬‬


‫‪Basic concepts in PHP‬‬ ‫‪V1.01IPCSIT‬‬

‫في الواقع تحتاج إلى تعبئة استمارة ببياناتك ورقم بطاقة االئتمان وغير ذلك من المعلومات ويتم ذلك عن طريق‬
‫نموذج (فورم)‪.‬في الواقع أنت تقوم باختيار الكتاب الذي تريد وتكتب اسمك ورقم هاتفك وصندوق بريدك (ربما) في‬
‫فراغات أو عن طريق اإلشارة الى مجموعة من الخيارات ‪ .‬يتم تخزين هذه القيم في المتغيرات التي يتم كتابتها في‬
‫الخاصية ‪ name‬ويتم ارسالها عند ضغط زر ‪ -‬ارسال البيانات ‪ )submit( -‬الى (البرنامج ) الصفحة التي سوف‬
‫تقوم بمعالجة هذه البيانات (والتي يتم تحديدها في الخاصية ‪ )ACTION‬وإجراء العمليات عليها مثل تخزينها مثالً‬
‫في قاعدة البيانات أو ارسالها إلى البريد االلكتروني وذلك عن طريق الـ‪. php‬‬
‫يعرض المثال أدناه نموذج ‪ HTML‬بسي ً‬
‫طا مع حقلي إدخال وزر إرسال‪:‬‬

‫‪Example‬‬
‫>‪<html‬‬
‫>‪<body‬‬
‫>"‪<form action="welcome.php" method="post‬‬
‫>‪Name: <input type="text" name="name"><br‬‬
‫>‪E-mail: <input type="text" name="email"><br‬‬
‫>"‪<input type="submit‬‬
‫>‪</form‬‬
‫>‪</body‬‬
‫>‪</html‬‬

‫عندما يمأل المستخدم النموذج أعاله وينقر على زر اإلرسال ‪ ،‬يتم إرسال بيانات النموذج للمعالجة إلى ملف ‪PHP‬‬
‫يسمى "‪ ,"welcome.php‬يتم إرسال بيانات النموذج بطريقة ‪.HTTP POST‬‬
‫لعرض البيانات المقدمة ‪ ،‬يمكن ببساطة تكرار جميع المتغيرات‪ ,‬يظهرملف "‪ "welcome.php‬كما يلي‪:‬‬
‫>‪<html‬‬
‫>‪<body‬‬
‫>‪Welcome <?php echo $_POST["name"]; ?><br‬‬
‫>? ;]"‪Your email address is: <?php echo $_POST["email‬‬
‫>‪</body‬‬
‫>‪</html‬‬

‫‪The output could be something like this:‬‬


‫‪Welcome John‬‬
‫‪Your email address is john.doe@example.com‬‬

‫ضا تحقيق نفس النتيجة باستخدام طريقة‪: HTTP GET:‬‬


‫يمكن أي ً‬
‫‪Example‬‬

‫‪37‬‬ ‫اعداد د‪.‬عايض الشباطي ‪2019‬‬


‫‪Basic concepts in PHP‬‬ ‫‪V1.01IPCSIT‬‬

‫>‪<html‬‬
‫>‪<body‬‬
‫>"‪<form action="welcome_get.php" method="get‬‬
‫>‪Name: <input type="text" name="name"><br‬‬
‫>‪E-mail: <input type="text" name="email"><br‬‬
‫>"‪<input type="submit‬‬
‫>‪</form‬‬
‫>‪</body‬‬
‫>‪</html‬‬
‫‪and "welcome_get.php" looks like this:‬‬
‫>‪<html‬‬
‫>‪<body‬‬
‫>‪Welcome <?php echo $_GET["name"]; ?><br‬‬
‫>? ;]"‪Your email address is: <?php echo $_GET["email‬‬
‫>‪</body‬‬
‫>‪</html‬‬
‫الكود أعاله بسيط للغاية‪ .‬ومع ذلك ‪ ،‬يحتاج إلى التحقق من صحة بيانات النموذج لحماية البرنامج النصي من‬
‫التعليمات البرمجية الضارة‪.‬‬

‫الحماية عند معالجة النماذج‬


‫أمرا مه ًما لحماية‬
‫معالجة النماذج بلغة ‪ PHP‬مع وضع األمان في االعتبار! يعد التحقق الصحيح من بيانات النموذج ً‬
‫النموذج الخاص من المتسللين ومرسلي البريد العشوائي!‬

‫‪ GET‬مقابل ‪POST‬‬
‫ينشئ كل من ‪ GET‬و ‪ POST‬مصفوفة (على سبيل المثال مصفوفة (‪،key2 => value2 ،key1 => value1‬‬
‫‪ .))... ، key3 => value3‬تحتوي هذه المصفوفة على أزواج من المفاتيح ‪ /‬القيمة ‪ ،‬حيث تكون المفاتيح هي أسماء‬
‫عناصر تحكم النموذج والقيم هي بيانات اإلدخال من المستخدم‪ ,‬يتم التعامل مع كل من ‪ GET‬و ‪ POST‬كـ ‪GET‬‬
‫_ ‪ $‬و ‪ $ _POST‬وتعتبر ‪ ، Superglobals‬مما يعني أنه يمكن الوصول إليها دائ ًما ‪ ،‬بغض النظر عن النطاق‬
‫او المجال‪ -‬ويمكننا الوصول إليها من أي دالة أو فئة أو ملف دون الحاجة إلى القيام بأي شيء اخر‪.‬‬
‫‪ $ _POST‬عبارة عن مجموعة من المتغيرات التي يتم تمريرها إلى النص عبر طريقة ‪.HTTP POST‬‬
‫‪ $ _ GET‬عبارة عن مجموعة من المتغيرات التي يتم تمريرها إلى النص عبر معامالت ‪.URL‬‬

‫متى تستخدم ‪GET‬‬


‫المعلومات المرسلة من نموذج باستخدام طريقة ‪ GET‬مرئية للجميع (يتم عرض جميع أسماء المتغيرات والقيم في‬
‫ضا قيود على كمية المعلومات التي يجب إرسالها‪ .‬القيد حوالي ‪ 2000‬حرف‪ .‬ومع‬
‫عنوان ‪ .)URL‬لدى ‪ GET‬أي ً‬

‫‪38‬‬ ‫اعداد د‪.‬عايض الشباطي ‪2019‬‬


‫‪Basic concepts in PHP‬‬ ‫‪V1.01IPCSIT‬‬

‫نظرا لعرض المتغيرات في عنوان ‪ ، URL‬فمن الممكن وضع إشارة مرجعية على الصفحة‪ .‬يمكن أن يكون‬
‫ذلك ‪ً ،‬‬
‫هذا مفيدًا في بعض الحاالت‪.‬يمكن استخدام ‪ GET‬إلرسال بيانات غير حساسة‪.‬‬
‫مالحظة‪ :‬يجب عدم استخدام ‪ GET‬مطل ًقا إلرسال كلمات المرور أو غيرها من المعلومات الحساسة!‬

‫متى تستخدم ‪POST‬‬


‫المعلومات المرسلة من نموذج باستخدام طريقة ‪ POST‬غير مرئية لآلخرين (جميع األسماء ‪ /‬القيم مضمنة في نص‬
‫طلب ‪ )HTTP‬وليس لها حدود على كمية المعلومات المراد إرسالها‪ ,‬عالوة على ذلك ‪ ،‬يدعم ‪ POST‬الوظائف‬
‫نظرا لعدم عرض‬
‫المتقدمة مثل دعم اإلدخال الثنائي متعدد األجزاء أثناء تحميل الملفات إلى ‪ .Server‬ومع ذلك ‪ً ،‬‬
‫المتغيرات في عنوان ‪ ، URL‬ال يمكن وضع إشارة مرجعية على الصفحة‪ .‬يفضل المطورون ‪ POST‬إلرسال‬
‫بيانات النموذج‪.‬‬
‫التحقق من صحة النموذج بالـ‪Validation Form PHP‬‬
‫نموذج االدخال في الـ‪ ، HTML‬يحتوي على حقول إدخال مختلفة‪ :‬حقول نصية مطلوبة واختيارية ‪ ،‬وأزرار‬
‫اختيار ‪ ،‬وزر إرسال وبعض من حقول االدخال كما يلي ‪:‬‬

‫‪PHP Form Validation Example‬‬


‫‪Username:‬‬
‫‪E-mail:‬‬
‫‪Website:‬‬

‫‪Comment:‬‬

‫‪Gender:‬‬ ‫‪Female‬‬ ‫‪Male‬‬

‫‪Your Input:‬‬
‫قواعد التحقق من صحة النموذج أعاله هي كما يلي‪:‬‬
‫‪ :Username‬يجب أن يحتوي فقط على أحرف ومسافات بيضاء‬
‫‪ :E-mail‬يجب أن يحتوي على عنوان بريد إلكتروني صالح (@ ‪)with‬‬
‫‪( :Website‬اختياري‪ ,‬إذا كان موجودًا ‪ ،‬يجب أن يحتوي على عنوان ‪ URL‬صالح‬

‫‪39‬‬ ‫اعداد د‪.‬عايض الشباطي ‪2019‬‬


‫‪Basic concepts in PHP‬‬ ‫‪V1.01IPCSIT‬‬

‫‪( : Comment‬اختياري‪ ,‬حقل إدخال متعدد األسطر (منطقة نصية)‬


‫‪ :Gender‬مطلوب‪ .‬يجب اختيار واحد‪.‬‬
‫كما ان بعض النماذج تعتمد حقول االدخال على حسب العمل اما ان يكون اختياري او مطلوب ادخال قيمة‪ .‬حقول‬
‫النموذج هي حقول االسم والبريد اإللكتروني وموقع الويب وتعتبر عناصر إدخال نص ‪ ،‬وحقل التعليق عبارة عن‬
‫منطقة نصية وحقل الجنس قيمة افتراضية مختارة ‪.‬وتظهر شفرة ‪ HTML‬كما يلي‪:‬‬
‫>"‪Name: <input type="text" name="name‬‬
‫>"‪E-mail: <input type="text" name="email‬‬
‫>"‪Website: <input type="text" name="website‬‬
‫>‪Comment: <textarea name="comment" rows="5" cols="40"></textarea‬‬
‫‪Radio Buttons‬‬
‫‪The gender fields are radio buttons and the HTML code looks like this:‬‬
‫‪Gender:‬‬
‫‪<input type="radio" name="gender" value="female">Female‬‬
‫‪<input type="radio" name="gender" value="male">Male‬‬

‫يظهر كود ‪ HTML‬للنموذج كما يلي‪:‬‬


‫]"‪<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF‬‬
‫>">?;)‬
‫عند إرسال النموذج ‪ ،‬يتم إرسال بيانات النموذج باستخدام"‪. Method="post‬‬

‫المتغير ]"‪$_SERVER ["PHP_SELF‬‬


‫]"‪ $_SERVER ["PHP_SELF‬هو متغير عام يقوم بإرجاع اسم ملف البرنامج النصي المنفذ حاليًا‪ ,‬لذلك‬
‫يرسل ]"‪ $_SERVER ["PHP_SELF‬بيانات النموذج المرسلة إلى الصفحة نفسها ‪ ،‬بدالً من القفز إلى صفحة‬
‫مختلفة‪.‬‬
‫وظيفة ()‪htmlspecialchars‬‬
‫تعمل دالة ()‪ htmlspecialchars‬على تحويل األحرف الخاصة إلى وسوم ‪ .HTML‬هذا يعني أنه سيحل محل‬
‫أحرف ‪ HTML‬مثل <و> بـ ‪ &lt‬و‪ .&gt‬هذا يمنع المهاجمين من استغالل الكود عن طريق دمج كود ‪ HTML‬أو‬
‫‪( Javascript‬هجمات البرمجة النصية عبر المواقع) في النماذج‪.‬‬
‫مالحظة‪ :‬حول أمان نموذج ‪ PHP‬يمكن للقراصنة استخدام المتغير ]"‪$_SERVER ["PHP_SELF‬‬

‫إذا تم استخدام ‪ PHP_SELF‬في صفحة ‪ ،‬فيمكن للمستخدم إدخال شرطة مائلة (‪ )/‬ثم بعض أوامر ‪)Cross Site‬‬
‫)‪ Scripting XSS‬ليتم تنفيذها‪ .‬كيف تتجنب مآثر ]"‪$_SERVER ["PHP_SELF‬؟ يمكن تجنب عمليات‬
‫استغالل ]"‪$_SERVER ["PHP_SELF‬باستخدام دالة ()‪.htmlspecialchars‬‬
‫>‪<form method="post" action="test_form.php/"><script>alert('hacked')</script‬‬
‫بحيث يجب أن يبدو شفرة النموذج كما يلي‪:‬‬

‫‪40‬‬ ‫اعداد د‪.‬عايض الشباطي ‪2019‬‬


‫‪Basic concepts in PHP‬‬ ‫‪V1.01IPCSIT‬‬

‫]"‪<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF‬‬


‫>">?;)‬
‫تعمل الدالة () ‪ htmlspecialchars‬على تحويل األحرف الخاصة إلى وسوم ‪ .HTML‬وإذا حاول المستخدم‬
‫استغالل المتغير ‪ ، PHP_SELF‬فسيؤدي ذلك إلى الناتج التالي‪:‬‬

‫‪<form method="post" action="test_form.php/&quot;&gt;&lt;script&gt;alert('hacked')&l‬‬


‫>";‪t;/script&gt‬‬
‫فشلت محاولة االستغالل وال ضرر!‬
‫التحقق من صحة بيانات النموذج باستخدام ‪.PHP‬‬
‫اوال‪ :‬تمرير جميع المتغيرات من خالل دالة ()‪ htmlspecialchars‬وعندما نستخدم دالة () ‪htmlspecialchars‬‬
‫؛ ثم إذا حاول المستخدم إرسال ما يلي في حقل نصي‪:‬‬
‫>‪<script> location.href ('http://www.hacked.com') </script‬‬
‫‪ -‬لن يتم تنفيذ الشفرة ‪ ،‬ألنه سيتم حفظه كرمز ‪ HTML‬تم تجاوزه ‪ ،‬على النحو التالي‪:‬‬

‫؛‪script ،&gt‬؛ ‪&location.href ('http://www.hacked.com')& lt /‬؛ ‪script ،&gt‬؛ ‪&lt‬‬

‫أصبح الرمز اآلن آمنًا ليتم عرضه على صفحة أو داخل بريد إلكتروني‪.‬‬
‫ثانيا‪ :‬عندما يرسل المستخدم النموذج‪:‬‬
‫‪ .1‬قم بإزالة األحرف غير الضرورية (مسافة إضافية ‪ ،‬عالمة تبويب ‪ ،‬سطر جديد) من بيانات إدخال‬
‫المستخدم (باستخدام دالة ()‪)trim‬‬
‫‪ .2‬إزالة الخطوط المائلة للخلف (\) من بيانات إدخال المستخدم (باستخدام دالة ()‪)stripslashes‬‬
‫ثالثا‪:‬تتمثل الخطوة التالية في إنشاء دالة تقوم بكل عمليات الفحص (وهو أمر أكثر مالءمة من كتابة نفس الرمز‬
‫وتكرارا)‪ .‬حيث ننشاء دالة ونسميها ()‪ test_input‬تقوم بكل عمليات الفحص للحقول المدخلة ‪ .‬اآلن ‪ ،‬يمكن‬
‫ً‬ ‫مرارا‬
‫ً‬
‫التحقق من كل متغير بطريقة الـ‪ $_ POST‬باستخدام دالة ()‪ ، test_input‬ويظهر البرنامج النصي بهذا الشكل‬

‫‪Example‬‬
‫‪<?php‬‬
‫‪// define variables and set to empty values‬‬
‫;"" = ‪$name = $email = $gender = $comment = $website‬‬
‫{ )"‪if ($_SERVER["REQUEST_METHOD"] == "POST‬‬
‫;)]"‪$name = test_input($_POST["name‬‬
‫;)]"‪$email = test_input($_POST["email‬‬
‫;)]"‪$website = test_input($_POST["website‬‬
‫;)]"‪$comment = test_input($_POST["comment‬‬
‫;)]"‪$gender = test_input($_POST["gender‬‬
‫}‬

‫‪41‬‬ ‫اعداد د‪.‬عايض الشباطي ‪2019‬‬


‫‪Basic concepts in PHP‬‬ ‫‪V1.01IPCSIT‬‬

‫{ )‪function test_input($data‬‬
‫;)‪$data = trim($data‬‬
‫;)‪$data = stripslashes($data‬‬
‫;)‪$data = htmlspecialchars($data‬‬
‫;‪return $data‬‬
‫}‬
‫>?‬

‫الحظ أنه في بداية البرنامج النصي‪ ،‬نتحقق مما إذا كان قد تم إرسال النموذج باستخدام‬
‫]"‪ $_SERVER["REQUEST_METHOD‬إذا كان ‪ REQUEST_METHOD‬هو ‪ ، POST‬فهذا يعني‬
‫أنه تم إرسال النموذج ‪ -‬ويجب التحقق من صحته وإذا لم يتم تقديمه‪ ،‬فتخط عملية التحقق واعرض نموذ ًجا فار ً‬
‫غا‪.‬‬
‫ومع ذلك‪ ،‬في المثال أعاله‪ ،‬تعتبر جميع حقول اإلدخال اختيارية‪ .‬يعمل البرنامج النصي بشكل جيد حتى إذا لم يقم‬
‫المستخدم باالختيار‪,‬نفترض ان الحقول المطلوبة ‪ ،‬هي حقول "‪ "name‬و "‪ "E-mail‬و "‪ "Gender‬وال يمكن أن‬
‫تكون هذه الحقول فارغة ويجب تعبئتها في نموذج ‪.HTML‬‬
‫أضفنا بعض المتغيرات الجديدة (متغيرات الخطاء) في الشفرة التالي‪ $nameErr :‬و ‪ $emailErr‬و‬
‫‪ $genderErr‬و ‪,$ websiteErr‬ستحتوي متغيرات الخطأ هذه على رسائل الخطأ للحقول المطلوبة‪ ,‬لقد أضفنا‬
‫ضا تعليمة ‪ if else‬لكل متغير‪ ,$_POST‬يتحقق هذا مما إذا كان المتغير ‪ $_POST‬فار ً‬
‫غا (مع دالة ()‪)empty‬‬ ‫أي ً‬
‫إذا كانت فارغة‪ ،‬يتم تخزين رسالة خطأ في متغيرات الخطأ المختلفة‪ ،‬وإذا لم تكن فارغة‪ ،‬فإنها ترسل بيانات‬
‫االدخال من قبل المستخدم من خالل دالة ()‪:test_input‬‬
‫‪<?php‬‬
‫‪// define variables and set to empty values‬‬
‫;"" = ‪$nameErr = $emailErr = $genderErr = $websiteErr‬‬
‫;"" = ‪$name = $email = $gender = $comment = $website‬‬
‫{ )"‪if ($_SERVER["REQUEST_METHOD"] == "POST‬‬
‫{ ))]"‪if (empty($_POST["name‬‬
‫;"‪$nameErr = "Name is required‬‬
‫{ ‪} else‬‬
‫;)]"‪$name = test_input($_POST["name‬‬
‫}‬
‫{ ))]"‪if (empty($_POST["email‬‬
‫;"‪$emailErr = "Email is required‬‬
‫{ ‪} else‬‬
‫;)]"‪$email = test_input($_POST["email‬‬
‫}‬

‫‪42‬‬ ‫اعداد د‪.‬عايض الشباطي ‪2019‬‬


Basic concepts in PHP V1.01IPCSIT

if (empty($_POST["website"])) {
$website = "";
} else {
$website = test_input($_POST["website"]);
}
if (empty($_POST["comment"])) {
$comment = "";
} else {
$comment = test_input($_POST["comment"]);
}
if (empty($_POST["gender"])) {
$genderErr = "Gender is required";
} else {
$gender = test_input($_POST["gender"]);
}
}
?>

‫عرض رسائل الخطأ‬


‫ والذي يولد رسالة الخطأ الصحيحة إذا لزم‬، ‫صغيرا بعد كل حقل مطلوب‬
ً ‫صا‬
ً ‫ نضيف ن‬، HTML ‫ثم في نموذج الـ‬
:)‫األمر (أي إذا حاول المستخدم إرسال النموذج دون ملء الحقول المطلوبة‬
Example
<head>
<style>
.error {color: #FF0000;}
</style>
</head>
<body>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]
);?>">
Name: <input type="text" name="name">
<span class="error">* <?php echo $nameErr;?></span>
<br><br>
E-mail:
<input type="text" name="email">
<span class="error">* <?php echo $emailErr;?></span>
<br><br>
Website:
<input type="text" name="website">

43 2019 ‫عايض الشباطي‬.‫اعداد د‬


‫‪Basic concepts in PHP‬‬ ‫‪V1.01IPCSIT‬‬

‫>‪<span class="error"><?php echo $websiteErr;?></span‬‬


‫>‪<br><br‬‬
‫>‪Comment: <textarea name="comment" rows="5" cols="40"></textarea‬‬
‫>‪<br><br‬‬
‫‪Gender:‬‬
‫‪<input type="radio" name="gender" value="female">Female‬‬
‫‪<input type="radio" name="gender" value="male">Male‬‬
‫>‪<span class="error">* <?php echo $genderErr;?></span‬‬
‫>‪<br><br‬‬
‫>"‪<input type="submit" name="submit" value="Submit‬‬
‫>‪</form‬‬
‫>‪</body‬‬

‫الخطوة التالية هي التحقق من صحة بيانات اإلدخال ‪ ،‬وهي "هل يحتوي حقل االسم فقط على أحرف ومسافات‬
‫بيضاء؟" ‪ ،‬و "هل يحتوي حقل البريد اإللكتروني على بنية صحيحة لعنوان البريد اإللكتروني؟" ‪ ،‬وإذا تم ملؤه ‪" ،‬‬
‫هل يحتوي حقل موقع الويب على عنوان ‪ URL‬صالح؟ "‪.‬‬
‫اوال‪:‬التحقق من االسم‬
‫يوضح الكود أدناه طريقة بسيطة للتحقق مما إذا كان حقل االسم يحتوي فقط على أحرف ومسافات‪ .‬إذا كانت قيمة‬
‫حقل االسم غير صالحة ‪ ،‬يتم ارسال سالة خطأ تبحث الدالة ()‪ preg_match‬في سلسلة عن النمط ‪ ،‬وتعيد القيمة‬
‫‪ true‬إذا كان النمط موجودًا ‪ ،‬والخطأ في الحاالت األخرى‪.‬‬
‫ثانيا‪ :‬التحقق من صحة البريد اإللكتروني‬
‫الطريقة األسهل واألكثر أمانًا للتحقق من صحة عنوان البريد اإللكتروني هي استخدام دالة ()‪ filter_var‬للتحقق‬
‫من البريد االلكتروني‪ .‬في الكود أدناه‪ ،‬إذا لم يكن عنوان البريد اإللكتروني منسقًا حسب المطلوب ‪ ،‬يتم ارسال‬
‫رسالة خطأ‪.‬‬
‫;)]"‪$email = test_input($_POST["email‬‬
‫{ ))‪if (!filter_var($email, FILTER_VALIDATE_EMAIL‬‬
‫;"‪$emailErr = "Invalid email format‬‬
‫}‬

‫ثالثا ‪:‬التحقق من صحة ‪URL‬‬


‫ضا‬
‫يوضح الكود أدناه طريقة للتحقق مما إذا كان تنسيق عنوان ‪ URL‬صحيحة (يسمح هذا التعبير العادي أي ً‬
‫بالشرطة في عنوان ‪ .)URL‬إذا كان تنسيق عنوان ‪ URL‬غير صالحة ‪ ،‬ارسل رسالة خطأ‬
‫;)]"‪$website = test_input($_POST["website‬‬
‫‪if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-‬‬
‫))‪9+&@#\/%=~_|]/i",$website‬‬

‫‪44‬‬ ‫اعداد د‪.‬عايض الشباطي ‪2019‬‬


Basic concepts in PHP V1.01IPCSIT

{
$websiteErr = "Invalid URL";
}
:‫ يبدو الكود كما يلي‬، URL ‫بعد توضيح التحقق من صحة االسم والبريد اإللكتروني وعنوان‬

Example
<?php
// define variables and set to empty values
$nameErr = $emailErr = $genderErr = $websiteErr = "";
$name = $email = $gender = $comment = $website = "";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (empty($_POST["name"])) {
$nameErr = "Name is required";
} else {
$name = test_input($_POST["name"]);
// check if name only contains letters and whitespace
if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
$nameErr = "Only letters and white space allowed";
}
}
if (empty($_POST["email"])) {
$emailErr = "Email is required";
} else {
$email = test_input($_POST["email"]);
// check if e-mail address is well-formed
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$emailErr = "Invalid email format";
}
}
if (empty($_POST["website"])) {
$website = "";
} else {
$website = test_input($_POST["website"]);
// check if URL address syntax is valid (this regular expression also allows dashes in
the URL)
if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-
9+&@#\/%=~_|]/i",$website)) {
$websiteErr = "Invalid URL";
}
}
if (empty($_POST["comment"])) {
$comment = "";
} else {

45 2019 ‫عايض الشباطي‬.‫اعداد د‬


Basic concepts in PHP V1.01IPCSIT

$comment = test_input($_POST["comment"]);
}
if (empty($_POST["gender"])) {
$genderErr = "Gender is required";
} else {
$gender = test_input($_POST["gender"]);
}
}
?>
‫االحتفاظ بالقيم في النموذج‬
‫ صغيرة داخل‬PHP ‫ نقوم بإضافة شفرة‬، ‫إلظهار القيم في حقول اإلدخال بعد أن يضغط المستخدم على زر اإلرسال‬
‫ نضع‬، ‫ االسم والبريد اإللكتروني والموقع اإللكتروني و في حقل نص التعليق‬:‫قيمة السمة لحقول اإلدخال التالية‬
$ ‫ و‬$name ‫< يُخرج البرنامج النصي الصغير قيمة المتغيرات‬textarea> </textarea> ‫الشفرة بين عالمتي‬
‫ الذي تم‬Radio button ‫ضا إلى إظهار زر االختيار‬
ً ‫بعد ذلك نحتاج أي‬, $comment.‫ و‬$website ‫و‬email
.)Radio button‫ يجب علينا معالجة السمة المحددة (وليس قيمة السمة ألزرار االختيار‬، ‫ لهذا‬.‫اختياره‬
Name: <input type="text" name="name" value="<?php echo $name;?>">
E-mail: <input type="text" name="email" value="<?php echo $email;?>">
Website: <input type="text" name="website" value="<?php echo $website;?>">
Comment: <textarea name="comment" rows="5" cols="40"><?php echo $comment;?>
</textarea>
Gender:
<input type="radio" name="gender"
<?php if (isset($gender) && $gender=="female") echo "checked";?>
value="female">Female
<input type="radio" name="gender"
<?php if (isset($gender) && $gender=="male") echo "checked";?>
value="male">Male

:‫مثال متكامل على التحقق من النموذج‬


<!DOCTYPE HTML>
<html>
<head>
<style>
.error {color: #FF0000;}
</style>
</head>
<body>
<?php
// define variables and set to empty values
$nameErr = $emailErr = $genderErr = $websiteErr = "";

46 2019 ‫عايض الشباطي‬.‫اعداد د‬


Basic concepts in PHP V1.01IPCSIT

$name = $email = $gender = $comment = $website = "";


if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (empty($_POST["name"])) {
$nameErr = "Name is required";
} else {
$name = test_input($_POST["name"]);
// check if name only contains letters and whitespace
if (!preg_match("/^[a-zA-Z-' ]*$/",$name)) {
$nameErr = "Only letters and white space allowed";
}
}
if (empty($_POST["email"])) {
$emailErr = "Email is required";
} else {
$email = test_input($_POST["email"]);
// check if e-mail address is well-formed
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$emailErr = "Invalid email format";
}
}
if (empty($_POST["website"])) {
$website = "";
} else {
$website = test_input($_POST["website"]);
// check if URL address syntax is valid (this regular expression also allows dashes in the URL)
if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-
9+&@#\/%=~_|]/i",$website)) {
$websiteErr = "Invalid URL";
}
}

if (empty($_POST["comment"])) {
$comment = "";
} else {
$comment = test_input($_POST["comment"]);
}

if (empty($_POST["gender"])) {
$genderErr = "Gender is required";
} else {
$gender = test_input($_POST["gender"]);
}
}
function test_input($data) {

47 2019 ‫عايض الشباطي‬.‫اعداد د‬


Basic concepts in PHP V1.01IPCSIT

$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?>
<h2>PHP Form Validation Example</h2>
<p><span class="error">* required field</span></p>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
Name: <input type="text" name="name" value="<?php echo $name;?>">
<span class="error">* <?php echo $nameErr;?></span>
<br><br>
E-mail: <input type="text" name="email" value="<?php echo $email;?>">
<span class="error">* <?php echo $emailErr;?></span>
<br><br>
Website: <input type="text" name="website" value="<?php echo $website;?>">
<span class="error"><?php echo $websiteErr;?></span>
<br><br>
Comment: <textarea name="comment" rows="5" cols="40"><?php echo $comment;?></textarea>
<br><br>
Gender:
<input type="radio" name="gender" <?php if (isset($gender) &&
$gender=="female") echo "checked";?> value="female">Female
<input type="radio" name="gender" <?php if (isset($gender) &&
$gender=="male") echo "checked";?> value="male">Male
<br><br>
<input type="submit" name="submit" value="Submit">
</form>
<?php
echo "<h2>Your Input:</h2>";
echo $name;
echo "<br>";
echo $email;
echo "<br>";
echo $website;
echo "<br>";
echo $comment;
echo "<br>";
echo $gender;
?>
</body>
</html>

48 2019 ‫عايض الشباطي‬.‫اعداد د‬


‫‪Basic concepts in PHP‬‬ ‫‪V1.01IPCSIT‬‬

‫تضمين ملفات ‪Include file‬‬


‫يأخذ بيان التضمين‪( Include‬أو الطلب ‪ )Require‬كل النص او الكود او الترميز الموجود في الملف المحدد‬
‫ونسخه الى الملف الذي يستخدم عبارة التضمين‪ ,‬يعد تضمين‪ Include‬الملفات مفيدًا جدًا عندما تريد تضمين نفس‬
‫‪ PHP‬أو ‪ HTML‬أو نص على صفحات متعددة من موقع ويب‪.‬‬
‫صياغة التضمين او الطلب(‪)Include or Require‬‬
‫من الممكن إدراج محتوى ملف ‪ PHP‬في ملف ‪ PHP‬آخر (قبل أن ينفذه ‪ ، )Server‬مع عبارة ‪ include‬أو‬
‫خطأ‬ ‫يظهر‬ ‫الفشل‪,‬‬ ‫عند‬ ‫إال‬ ‫‪،‬‬ ‫متطابقة‬ ‫‪Require‬‬ ‫أو‬ ‫‪Include‬‬ ‫عبارات‬ ‫‪,Require‬تكون‬
‫تحذيرا‬
‫ً‬ ‫فقط‬ ‫ستنتج‬ ‫‪Include‬‬ ‫عبارة‬ ‫النصي‪,‬‬ ‫البرنامج‬ ‫وإيقاف‬ ‫(‪)E_COMPILE_ERROR‬‬
‫(‪ )E_WARNING‬وسيستمر النص البرمجي بالتنفيذ‪ ،‬لذا إذا كنت تريد استمرار التنفيذ وإظهار المخرجات‬
‫للمستخدمين حتى إذا كان ملف التضمين مفقودًا ‪ ،‬فاستخدم عبارة ‪ ,Include‬بخالف ذلك ‪ ،‬في حالة ‪Framework‬‬
‫أو ‪ CMS‬أو ترميز تطبيق ‪ PHP‬معقد ‪ ،‬استخدم دائ ًما عبارة ‪ ,Require‬سيساعد هذا في تجنب المساس بأمان‬
‫وسالمة التطبيق الخاص ‪.‬تضمين الملفات يوفر الكثير من العمل ‪ ,‬يعني أنه يمكن إنشاء رأس أو تذييل أو ملف قائمة‬
‫قياسي لجميع صفحات الويب الخاصة بالتطبيق‪ ,‬بعد ذلك ‪ ،‬عندما يحتاج الرأس إلى التحديث ‪ ،‬يمكن فقط تحديث‬
‫ملف تضمين الرأس‪.‬‬

‫‪Syntax‬‬
‫;'‪include 'filename‬‬
‫‪or‬‬
‫;'‪require 'filename‬‬

‫امثلة على ‪Include‬‬

‫مثال ‪1‬‬
‫افرض أن لدينا ملف تذييل ثابت يسمى "‪ ، "footer.php‬يبدو كاالتي‪:‬‬
‫‪<?php‬‬
‫;">‪echo "<p>Copyright &copy; 2020-" . date("Y") . "tssy.com</p‬‬
‫>?‬

‫لتضمين ملف التذييل في الصفحة ‪ ،‬استخدم عبارة ‪:include‬‬

‫>‪<html‬‬
‫>‪<body‬‬
‫>‪<h1>Welcome to my home page!</h1‬‬
‫>‪<p>Some text.</p‬‬
‫>‪<p>Some more text.</p‬‬
‫>?;'‪<?php include 'footer.php‬‬

‫‪49‬‬ ‫اعداد د‪.‬عايض الشباطي ‪2019‬‬


Basic concepts in PHP V1.01IPCSIT

</body>
</html>

2 ‫مثال‬
menu.php ‫افرض أن لدينا ملف راس الصفحة يسمى‬

<?php
echo '<a href="/default.asp">Home</a> -
<a href="/html/default.asp">HTML Tutorial</a> -
<a href="/css/default.asp">CSS Tutorial</a> -
<a href="/js/default.asp">JavaScript Tutorial</a> -
<a href="default.asp">PHP Tutorial</a>';
?>

‫ التوضيح ادناه يوضح كيفية‬.‫يجب أن تستخدم ملف راس الصفحة(القائمة) على كافة الصفحات في موقع الويب‬
:)CSS ‫> بحيث يمكن تصميم القائمة بسهولة باستخدام‬div< ‫القيام بذلك (نستخدم عنصر‬

Example
<html>
<body>
<div class="menu">
<?php include 'menu.php';?>
</div>
<h1>Welcome to my home page!</h1>
<p>Some text.</p>
<p>Some more text.</p>
</body>
</html>
3‫مثال‬
:‫ مع تحديد بعض المتغيرات‬، "vars.php" ‫فرضا أن لدينا ملفًا يسمى‬
<?php
$color='red';
$com='DELL';
?>

:‫ فيمكن استخدام المتغيرات في ملف االستدعاء‬، "vars.php" ‫ إذا قمنا بتضمين ملف‬، ‫بعد ذلك‬

4‫مثال‬

50 2019 ‫عايض الشباطي‬.‫اعداد د‬


‫‪Basic concepts in PHP‬‬ ‫‪V1.01IPCSIT‬‬

‫>‪<html‬‬
‫>‪<body‬‬
‫>‪<h1>Welcome to my home page!</h1‬‬
‫;'‪<?php include 'vars.php‬‬
‫;"‪echo "I have a $color $com.‬‬
‫>?‬
‫>‪</body‬‬
‫>‪</html‬‬
‫‪ Include‬مقابل ‪Require‬‬
‫تُستخدم عبارة "‪ " Require‬أي ً‬
‫ضا لتضمين ملف كود ‪ .PHP‬ومع ذلك ‪ ،‬هناك فرق واحد كبير بين ‪ Include‬و‬
‫‪ Require‬كما ذكرنا سابقا ؛ عندما يتم تضمين ملف في جملة ‪ Include‬وال يمكن لـ ‪ PHP‬العثور عليه ‪ ،‬سيستمر‬
‫البرنامج النصي في التنفيذ‪:‬‬

‫‪Example‬‬
‫>‪<html‬‬
‫>‪<body‬‬
‫>‪<h1>Welcome to my home page!</h1‬‬
‫;'‪<?php include 'noFileExists.php‬‬
‫;"‪echo "I have a $color $com.‬‬
‫>?‬
‫>‪</body‬‬
‫>‪</html‬‬
‫إذا فعلنا نفس المثال باستخدام تعليمة ‪ ، Require‬فلن يتم تنفيذ جملة ‪ echo‬ألن تنفيذ البرنامج النصي يموت بعد‬
‫أن أعادت العبارة المطلوبة بالخطأ الكبير‪.‬‬

‫‪Example‬‬
‫>‪<html‬‬
‫>‪<body‬‬
‫>‪<h1>Welcome to my home page!</h1‬‬
‫;'‪<?php require 'noFileExists.php‬‬
‫;"‪echo "I have a $color $com.‬‬
‫>?‬
‫>‪</body‬‬
‫>‪</html‬‬
‫استخدم الطلب ‪Require‬عندما يكون الملف مطلوبًا من قبل التطبيق‪.‬‬
‫استخدم التضمين ‪Include‬عندما ال يكون الملف مطلوبًا ويجب أن يستمر التطبيق في حالة عدم العثور على الملف‪.‬‬

‫‪51‬‬ ‫اعداد د‪.‬عايض الشباطي ‪2019‬‬


‫‪Basic concepts in PHP‬‬ ‫‪V1.01IPCSIT‬‬

‫معالجة الملفات‪:‬‬
‫كل مبرمج يجب أن يتعامل مع الملفات والمجلدات في بعض النقاط ‪ ،‬اغلب البرامج تستخدم الملفات لكي يقوم‬
‫بتخزين معلومات اإلعداد للكود ‪ ،‬أو يقوم بتخزين البيانات لقراءتها وكتابتها ‪ ،‬أو لكي يقوم بحفظ البيانات المؤقتة ‪،‬‬
‫وكمثال فإن ابسط برنامج يحتاج إلي ملف يقوم بتخزين آخر قيمة تم الوصول إليه ‪..‬‬
‫الملف ‪ :‬ليس عبارة عن أكثر من بايتات متسلسلة يتم تخزينها على القرص الصلب أو أي ماده تخزينية أخرى ‪.‬‬
‫والمجلد ‪ :‬هو عبارة عن نوع محدد من الملفات يحتفظ بأسماء ملفات أخري ومجلدات أخري ( تسمي بالمجلدات‬
‫الفرعية ) ‪ ،‬كل ما تحتاجه لتتعامل مع الملفات والمجلدات هو كيف يمكن ربط الشفرة بهم ‪..‬‬
‫مالحظة ‪:‬‬
‫قبل أن نبدأ دعنا ننبه أن التعامل مع الملفات يختلف من نظام تشغيل إلي آخر ففي أنظمة اليونكس تستخدم المسارات العالمة المائلة‬
‫لألمام‬
‫مثال‪:‬‬
‫‪/home/usr/bin/data.txt‬‬
‫بينما في الويندوز فإن المسار يكون كالتالى‪:‬‬
‫‪C:\usr\bin\perl‬‬
‫وإذا استخدمنا العالمة األمامية في ‪ PHP‬للويندوز فإنه يقوم بتحويلها بشكل تلقائي إلي عالمة خلفية بينما إذا أردنا استخدام العالمة‬
‫األمامية فإننا يجب أن نقوم بتكرار العالمة لكي يتم التعرف عليها‬
‫‪C:\\windows\\PHP‬‬
‫التعامل مع الملفات‬
‫يوفر الـ‪ PHP‬نوعين من الدوال المتعلقة بالملفات فهناك نوع من الدوال يستخدم مقبض للملف (‪ )file handle‬أو ما‬
‫يسمونه بالمؤشر (‪ )pointer‬في العادة ‪ ،‬بينما بعض الدوال يستخدم قيمه حرفيه تشير إلي موضع الملف مباشره‬
‫‪,‬تعتبر معالجة الملفات جز ًءا مه ًما من أي تطبيق ويب‪ ,‬غالبًا ما تحتاج إلى فتح ملف ومعالجته لمهام مختلفة‪ .‬في‬
‫الـ‪PHP‬يوجد العديد من الدوال العديدة إلنشاء الملفات وقراءتها وتحميلها وتحريرها‪.‬‬
‫كن حذرا عند التعامل مع الملفات!‬
‫حذرا جدًا‪ ,‬يمكن إحداث الكثير من الضرر إذا قمت بعمل خاطئ‪ ,‬األخطاء‬
‫عندما تتالعب بالملفات ‪ ،‬يجب أن تكون ً‬
‫الشائعة هي‪ :‬تحرير الملف الخاطئ ‪ ،‬وملء القرص الصلب ببيانات غير صحيحة ‪ ،‬وحذف محتوى الملف عن‬
‫طريق الخطأ‪.‬‬
‫بعض من الدوال التي تتعامل مع الملفات ‪:‬دالة ()‪ readfile‬تقرأ الدالة ()‪ readfile‬ملفًا وتكتبه في المخزن المؤقت‬
‫لإلخراج‪,‬فرضا لدينا ملفًا نصيًا يسمى "‪ ، "webdictionary.txt‬مخزن على ‪ ، Server‬كالتالي‪:‬‬
‫‪AJAX = Asynchronous JavaScript and XML‬‬
‫‪CSS = Cascading Style Sheets‬‬
‫‪HTML = Hyper Text Markup Language‬‬
‫‪PHP = PHP Hypertext Preprocessor‬‬
‫‪SQL = Structured Query Language‬‬

‫‪52‬‬ ‫اعداد د‪.‬عايض الشباطي ‪2019‬‬


‫‪Basic concepts in PHP‬‬ ‫‪V1.01IPCSIT‬‬

‫‪SVG = Scalable Vector Graphics‬‬


‫‪XML = EXtensible Markup Language‬‬
‫المثال ادناه لقراءة الملف وكتابته في المخزن المؤقت لإلخراج (الدالة )( ‪ readfile‬ترجع عدد البايتات التي تمت‬
‫قراءتها بنجاح(‪:‬‬

‫‪Example‬‬
‫‪<?php‬‬
‫;)"‪echo readfile("webdictionary.txt‬‬
‫>?‬
‫دالة ()‪ readfile‬مفيدة إذا كان كل ما تريد فعله هو فتح ملف وقراءة محتوياته‪.‬‬

‫فتح وقراءة واغالق الملف‪File Open/Read/Close‬‬


‫أفضل طريقة لفتح الملفات هي باستخدام دالة ()‪ fopen‬تمنح هذه الدالة خيارات أكثر من دالة ()‪readfile‬‬

‫سنستخدم الملف النصي "‪ "webdictionary.txt‬اثناء التطبيق‪:‬‬

‫‪AJAX = Asynchronous JavaScript and XML‬‬


‫‪CSS = Cascading Style Sheets‬‬
‫‪HTML = Hyper Text Markup Language‬‬
‫‪PHP = PHP Hypertext Preprocessor‬‬
‫‪SQL = Structured Query Language‬‬
‫‪SVG = Scalable Vector Graphics‬‬
‫‪XML = Extensible Markup Language‬‬

‫يحتوي المعامل األول لـ ()‪ fopen‬على اسم الملف الذي سيتم فتحه والمعامل الثاني يحدد الوضع الذي يجب فتح‬
‫ضا رسالة إذا كانت الدالة ()‪ fopen‬غير قادرة على فتح الملف‬
‫الملف فيه(للقراءه او الكتابة‪,‬يظهر المثال التالي أي ً‬
‫المحدد‪:‬‬

‫‪Example‬‬
‫‪<?php‬‬
‫;)"!‪$myfile = fopen("webdictionary.txt", "r") or die("Unable to open file‬‬
‫;))"‪echo fread($myfile,filesize("webdictionary.txt‬‬
‫;)‪fclose($myfile‬‬
‫>?‬

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

‫‪53‬‬ ‫اعداد د‪.‬عايض الشباطي ‪2019‬‬


‫‪Basic concepts in PHP‬‬ ‫‪V1.01IPCSIT‬‬

‫افتح ملفًا للقراءة فقط‪ .‬يبدأ مؤشر الملف في بداية الملف‬ ‫‪r‬‬
‫فتح ملف للكتابة فقط‪ .‬يحذف محتويات الملف أو ينشئ ملفًا‬ ‫‪w‬‬
‫جديدًا إذا لم يكن موجودًا‪ .‬يبدأ مؤشر الملف في بداية الملف‬
‫فتح ملف للكتابة فقط‪ .‬يتم االحتفاظ بالبيانات الموجودة في‬ ‫‪a‬‬
‫الملف‪ ..‬ينشئ ملفًا جديدًا إذا كان الملف غير موجود‪,‬المؤشر‬
‫يكون في النهاية‬
‫ينشئ ملف جديد للكتابة فقط‪ .‬إرجاع ‪ FALSE‬إذا كان‬ ‫‪x‬‬
‫الملف موجود بالفعل‬
‫فتح ملف للقراءة ‪ /‬الكتابة‪ .‬يبدأ مؤشر الملف في بداية الملف‬ ‫‪r+‬‬
‫فتح ملف للقراءة ‪ /‬الكتابة‪ .‬يحذف محتويات الملف أو ينشئ‬ ‫‪w+‬‬
‫ملفًا جديدًا إذا لم يكن موجودًا‪ .‬يبدأ مؤشر الملف في بداية‬
‫الملف‬
‫فتح ملف للقراءة ‪ /‬الكتابة‪ .‬يتم االحتفاظ بالبيانات الموجودة‬ ‫‪a+‬‬
‫في الملف‪ .‬يبدأ مؤشر الملف في نهاية الملف‪ .‬ينشئ ملفًا‬
‫جديدًا إذا لم يكن الملف موجودًا‬
‫ينشئ ملفًا جديدًا للقراءة ‪ /‬الكتابة‪ .‬إرجاع ‪ FALSE‬إذا كان‬ ‫‪x+‬‬
‫الملف موجود بالفعل‬

‫قراءة ملف باستخدام دالة ()‪ - fread‬تقرأ الدالة من ملف مفتوح ‪,‬وتحتوي على معاملين المعامل األول على اسم‬
‫الملف المراد القراءة منه ويحدد المعامل الثاني الحد األقصى لعدد وحدات البايت للقراءة‪.‬‬
‫تقرأ شفرة ‪ PHP‬التالية ملف "‪ "webdictionary.txt‬حتى النهاية‪:‬‬
‫;))"‪fread($myfile,filesize("webdictionary.txt‬‬
‫او‬
‫;)‪$data=fread($fp,20‬‬
‫مع االخذ باالعتبار نقطتين وهما ‪:‬‬
‫إذا قرأت عشرون حرف من الملف وكان في الملف اربعين حرف وقمت بطلب الدالة ‪ fread‬مرة أخري‬ ‫‪-1‬‬
‫فسيتم قراءة العشرين االحرف الثانية ‪..‬‬
‫إذا كان في الملف أقل من عشرين حرف فسيتم قراءة الموجود ‪.‬‬ ‫‪-2‬‬

‫تستخدم الدالة )(‪ - fclose‬الغالق ملف مفتوح‪.‬‬


‫من الممارسات البرمجية الجيدة إغالق جميع الملفات بعد االنتهاء منها‪ ,‬الن الملفات المفتو ًحة التي تعمل على الخادم‬
‫‪ Server‬يستهلك الموارد!‬
‫تتطلب الدالة ()‪ fclose‬اسم الملف (أومعامل يحمل اسم الملف) الذي نريد إغالقه‪:‬‬
‫‪<?php‬‬
‫;)"‪$myfile = fopen("webdictionary.txt", "r‬‬

‫‪54‬‬ ‫اعداد د‪.‬عايض الشباطي ‪2019‬‬


Basic concepts in PHP V1.01IPCSIT

// some code to be executed....


fclose($myfile);
?>

fgets)( ‫الدالة‬
‫يُخرج المثال أدناه السطر األول من ملف‬, ‫ لقراءة سطر واحد من الملف‬fgets)( ‫تُستخدم الدالة‬

:"webdictionary.txt"
Example:
<?php
$myfile = fopen("webdictionary.txt", "r") or die("Unable to open file!");
echo fgets($myfile);
fclose($myfile);
?>

:‫النتيجة‬
AJAX = Asynchronous JavaScript and XML
.‫ ينتقل مؤشر الملف إلى السطر التالي‬، fgets () ‫ بعد استدعاء الدالة‬:‫مالحظة‬
feof ()‫الدالة‬
‫ مفيدة للتنقل بين البيانات ذات‬feof () ‫( "تُعد دالة‬EOF).‫ من الوصول إلى "نهاية الملف‬feof() ‫تتحقق الدالة‬
‫ حتى يتم الوصول إلى نهاية‬، ‫سطرا بسطر‬
ً "webdictionary.txt" ‫ يقرأ المثال أدناه ملف‬.‫الطول غير المعروف‬
:‫الملف‬
Example

<?php
$myfile = fopen("webdictionary.txt", "r") or die("Unable to open file!");
// Output one line until end-of-file
while(!feof($myfile)) {
echo fgets($myfile) . "<br>";
}
fclose($myfile);
?>

:‫النتيجة‬
AJAX = Asynchronous JavaScript and XML
CSS = Cascading Style Sheets

55 2019 ‫عايض الشباطي‬.‫اعداد د‬


Basic concepts in PHP V1.01IPCSIT

HTML = Hyper Text Markup Language


PHP = PHP Hypertext Preprocessor
SQL = Structured Query Language
SVG = Scalable Vector Graphics
XML = EXtensible Markup Language

fgetc)( ‫دالة‬
، ‫" حرفًا بحرف‬webdictionary.txt" ‫ يقرأ المثال أدناه ملف‬,‫ لقراءة حرف واحد من ملف‬fgetc)( ‫تُستخدم الدالة‬
:‫حتى يتم الوصول إلى نهاية الملف‬
Example

<?php
$myfile = fopen("webdictionary.txt", "r") or die("Unable to open file!");
// Output one character until end-of-file
while(!feof($myfile)) {
echo fgetc($myfile);
}
fclose($myfile);
?>

:‫النتيجة‬
AJAX = Asynchronous JavaScript and XML CSS = Cascading Style Sheets HTML = Hyper Text
Markup Language PHP = PHP Hypertext Preprocessor SQL = Structured Query Language SVG =
Scalable Vector Graphics XML = Extensible Markup Language

.‫ ينتقل مؤشر الملف إلى الحرف التالي‬، fgetc)( ‫ بعد استدعاء دالة‬:‫مالحظة‬
For a complete reference of filesystem functions, go to our complete PHP Filesystem Reference .
‫إنشاء او الكتابة في ملف‬
fopen)( ‫دالة‬
‫ يتم إنشاء‬، PHP ‫ ولكن في‬، ‫ ربما قد يكون األمر مختلفا بعض الشيء‬,‫ ايضا إلنشاء ملف‬fopen)( ‫تُستخدم دالة‬
، ‫ فسيتم إنشاؤه‬، ‫ في ملف غير موجود‬fopen)( ‫ إذا استخدمت‬,‫ملف باستخدام نفس الدالة المستخدمة لفتح الملفات‬
:PHP ‫ في نفس الدليل حيث توجد شفرة الـ‬testfile.txt" ‫ينشئ المثال أدناه ملفًا جديدًا باسم‬,)a( ‫) او‬w( ‫راجع رمز‬

Example
$myfile = fopen("testfile.txt", "w")

56 2019 ‫عايض الشباطي‬.‫اعداد د‬


‫‪Basic concepts in PHP‬‬ ‫‪V1.01IPCSIT‬‬

‫صالحيات ملف ‪PHP‬‬

‫إذا كنت تواجه أخطاء عند محاولة تشغيل الشفرة ‪ ،‬فتحقق من صالحيات حق الوصول إلى ملف الـ‪ PHP‬لكتابة‬
‫المعلومات على القرص الصلب‪.‬‬

‫دالة ‪fwrite)( -‬‬


‫تُستخدم الدالة ()‪ fwrite‬للكتابة على ملف‪ ,‬وتحتوي على معاملين ‪,‬المعامل األول اسم الملف المراد الكتابة عليه‬
‫والمعامل الثاني هو السلسلة المراد كتابتها ‪,‬يظهر المثال أدناه كتابة اسمين في ملف جديد يسمى "‪"newfile.txt‬‬

‫‪Example‬‬
‫‪<?php‬‬
‫;)"!‪$myfile = fopen("newfile.txt", "w") or die("Unable to open file‬‬
‫;"‪$txt = "John Doe\n‬‬
‫;)‪fwrite($myfile, $txt‬‬
‫;"‪$txt = "Jane Doe\n‬‬
‫;)‪fwrite($myfile, $txt‬‬
‫;)‪fclose($myfile‬‬
‫>?‬
‫الحظ أننا كتبنا إلى ملف "‪ "newfile.txt‬مرتين‪ ,‬في كل مرة نكتب فيها على الملف السلسلة ‪ $txt‬التي احتوت أوالً‬
‫على "‪ "John Doe‬والثانية تحتوي على "‪ "Jane Doe‬بعد أن انتهينا من الكتابة ‪ ،‬أغلقنا الملف باستخدام الدالة ‪.‬‬
‫)( ‪fclose‬‬
‫إذا فتحنا ملف "‪ "newfile.txt‬فسيبدو كالتالي‪:‬‬
‫‪John Doe‬‬
‫‪Jane Doe‬‬

‫االستبدال ‪Overwriting‬‬
‫بعد أن احتوى الملف "‪ "newfile.txt‬على بعض البيانات ‪ ،‬يمكننا إظهار ما يحدث عندما نفتحه للكتابة‪ ,‬سيتم مسح‬
‫جميع البيانات الموجودة وسنبدأ بملف فارغ‪ ,‬في المثال أدناه نقوم بفتح الملف الحالي "‪ ، "newfile.txt‬ونكتب‬
‫بعض البيانات الجديدة فيه‪:‬‬

‫‪Example‬‬
‫‪<?php‬‬
‫;)"!‪$myfile = fopen("newfile.txt", "w") or die("Unable to open file‬‬
‫;"‪$txt = "Mickey Mouse\n‬‬
‫;)‪fwrite($myfile, $txt‬‬
‫;"‪$txt = "Minnie Mouse\n‬‬

‫‪57‬‬ ‫اعداد د‪.‬عايض الشباطي ‪2019‬‬


‫‪Basic concepts in PHP‬‬ ‫‪V1.01IPCSIT‬‬

‫;)‪fwrite($myfile, $txt‬‬
‫;)‪fclose($myfile‬‬
‫>?‬

‫إذا تم فتح الملف "‪ ، "newfile.txt‬فقد تم مسح او حذف البيانات كل من ‪ John‬و ‪ ، Jane‬والبيانات الجديدة التي‬
‫في المثال اعاله ستظهر كاالتي‪:‬‬
‫‪Mickey Mouse‬‬
‫‪Minnie Mouse‬‬

‫‪For a complete reference of filesystem functions, go to our complete PHP Filesystem Reference.‬‬

‫تحميل الملف‬
‫تحميل الملفات على الخادم البعيد باستخدام نموذج ‪ HTML‬بسيط ولغة الـ‪ PHP‬يمكن تحميل أي نوع من الملفات‬
‫مثل الصور ومقاطع الفيديو وملفات ‪ ZIP‬والمستندات ‪ Microsoft Office‬وملفات‪ ، PDF‬باإلضافة إلى الملفات‬
‫التنفيذية ومجموعة كبيرة من أنواع الملفات األخرى ‪,‬باستخدام الـ‪ PHP‬من السهل تحميل الملفات إلى الخادم ‪,‬ومع‬
‫ذلك ‪ ،‬تأتي المخاطر بسهولة ‪ ،‬لذا يجب الحذر دائ ًما عند السماح بتحميل الملفات! إلنشاء صفحة لرفع ملف يتطلب‬
‫اجراء االتي‪:‬‬
‫أوالً ‪ :‬تأكد من تهيئة ‪ PHP‬للسماح بتحميل الملفات‪,‬في ملف "‪ ، "php.ini‬ابحث عن األمر ‪، file_uploads‬‬
‫واضبطه على ‪:On‬‬
‫‪file_uploads = On‬‬
‫وباستخدام المصفوفة ‪ $_FILES‬يمكن رفع الملفات من المستخدم الى السيرفر‪ ,‬ان أول قيمة في حقل النموذج هي‬
‫االسم أما الثانية فيمكن أن تكون اما االسم ‪ name‬أو النوع ‪ type‬أو الحجم ‪ size‬أو ‪ tmp_name‬أو الخطأ ‪error‬‬
‫كالتالي‪:‬‬
‫]"‪ $_FILES["file"]["name‬اسم الملف المرفوع‪.‬‬
‫]"‪$_FILES["file"]["type‬نوع الملف المرفوع‪.‬‬ ‫•‬
‫]"‪$_FILES["file"]["size‬حجم الملف المرفوع‪.‬‬ ‫•‬
‫]"‪$_FILES["file"]["tmp_name‬اسم النسخة المؤقتة للملف الذي تم تخزينه في السيرفر‪.‬‬ ‫•‬
‫]"‪$_FILES["file"]["error‬نتيجة الخطأ اذا كان هناك خطأ في الكود أو الملف المرفوع‪.‬‬ ‫•‬

‫ثانيا‪ :‬إنشاء نموذج ‪HTML‬‬


‫إنشاء نموذج ‪ HTML‬يسمح للمستخدم اختيار ملف لرفعه‪:‬‬

‫‪58‬‬ ‫اعداد د‪.‬عايض الشباطي ‪2019‬‬


Basic concepts in PHP V1.01IPCSIT

<!DOCTYPE html>
<html>
<body>
<form action="upload.php" method="post" enctype="multipart/form-data">
Select image to upload:
<input type="file" name="fileToUpload" id="fileToUpload">
<input type="submit" value="Upload Image" name="submit">
</form>
</body>
</html>

‫" ويحتاج النموذج‬post" = ‫تأكد من أن النموذج يستخدم الطريقة‬, HTML ‫ويتطلب اتباع قواعد في إنشاء نموذج‬
‫ لتحدد نوع المحتوى الذي يجب استخدامه عند‬,enctype = "multipart / form-data" : ‫ضا إلى السمة التالية‬
ً ‫أي‬
‫ويوجد متطلبات اخرى في النموذج‬, ‫ لن يعمل تحميل الملف‬، ‫بدون المتطلبات المذكورة أعاله‬, ‫إرسال النموذج‬
‫ مع وجود الزر‬، ‫> حقل اإلدخال كعنصر تحكم في تحديد الملف‬input< ‫ للعالمة‬type = "file" ‫وهي السمة‬
، "upload.php" ‫يرسل النموذج أعاله البيانات إلى ملف يسمى‬, ‫" بجوار عنصر التحكم في اإلدخال‬Browser"
. ‫والذي موجود بالمثال ادناه‬

PHP Script ‫إنشاء ملف‬:‫ثالثا‬

:‫" على الكود الخاص بتحميل الملف‬upload.php" ‫يحتوي ملف‬

<?php
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
// Check if image file is a actual image or fake image
if(isset($_POST["submit"])) {
$check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
if($check !== false) {
echo "File is an image - " . $check["mime"] . ".";
$uploadOk = 1;
} else {
echo "File is not an image.";
$uploadOk = 0;
}

59 2019 ‫عايض الشباطي‬.‫اعداد د‬


‫‪Basic concepts in PHP‬‬ ‫‪V1.01IPCSIT‬‬

‫}‬
‫>?‬

‫شرح الكود‪:‬‬
‫"‪ - $ target_dir = "uploads /‬يحدد الدليل حيث الملف الذي با يوضع‬
‫‪ $ target_file‬يحدد مسار الملف المراد تحميله‪.‬‬
‫;)]"‪ basename($_FILES["fileToUpload"]["name‬تعمل هذه الدالة على عرض اسم الملف فقط بينما‬
‫الدالة )(‪ dirname‬تعرض لنا مسار المجلد الذى يحتوى على الملف‬
‫‪ $ imageFileType‬يحتفظ بامتداد الملف (بأحرف صغيرة)‬
‫بعد ذلك ‪ ،‬تحقق مما إذا كان ملف الصورة صورة فعلية أم صورة مزيفة‪.‬‬
‫مالحظة‪ :‬سوف تحتاج إلى إنشاء دليل جديد يسمى "‪ "uploads‬في الدليل حيث يوجد ملف "‪ ."upload.php‬سيتم‬
‫حفظ الملفات التي تم تحميلها فيه‪.‬‬
‫دالة)( ‪ strtolower‬تحويل السلسلة إلى أحرف صغيرة‪.‬‬
‫وتعيد الدالة )(‪ pathinfo‬معلومات عن مسار الملف‪.‬‬

‫يحدِّد هذا المعامل المعلومات ال ُمعادة وذلك باستعمال الثوابت التالية‪:‬‬

‫‪PATHINFO_DIRNAME:‬يُعاد اسم المجلَّد‪.‬‬ ‫•‬


‫‪PATHINFO_BASENAME:‬يُعاد اسم الملف األساسي‪.‬‬ ‫•‬
‫‪PATHINFO_EXTENSION:‬يُعاد امتداد الملف‪.‬‬ ‫•‬
‫‪PATHINFO_FILENAME:‬يُعاد اسم الملف‪.‬‬ ‫•‬

‫)(‪getimagesize‬يتم استخدام الدالة للحصول على حجم الصورة والمعلومات ذات الصلة‪ .‬تقوم بإرجاع مصفوفة‬
‫إذا تم التنفيذ ‪ ،‬أو إرجاعها إذا فشلت‪FALSE‬وتنتج‪E_WARNING‬مستوى معلومات الخطأ‪.‬‬

‫حيث تكون ناتج استخدام الشفرة للخرج للمتغير ]"‪ $check["mime‬كالتالي‪File is an image - image/jpeg :‬‬

‫تحقق مما إذا كان الملف موجودًا بالفعل‬


‫اآلن يمكن إضافة بعض القيود‪.‬أوالً ‪ ،‬تتحقق مما إذا كان الملف موجودًا بالفعل في مجلد "‪ ." uploads‬في حالة لم‬
‫يكن موجود ولم يحمل ‪ ،‬يتم عرض رسالة خطأ ويتم اسناد القيمة صفر الى المتغير ‪ $ uploadOk=0‬والمثال‬
‫التالي يوضح ذلك‪:‬‬
‫‪// Check if file already exists‬‬
‫{ ))‪if (file_exists($target_file‬‬
‫;"‪echo "Sorry, file already exists.‬‬
‫;‪$uploadOk = 0‬‬
‫}‬

‫‪60‬‬ ‫اعداد د‪.‬عايض الشباطي ‪2019‬‬


Basic concepts in PHP V1.01IPCSIT

‫تحديد حجم الملف‬


‫إذا كان الملف‬,‫وللتحقق من حجم الملف‬."fileToUpload" ‫ أعاله‬HTML ‫يسمى حقل إدخال الملف في نموذج‬
‫ والمثال التالي يوضح‬$uploadOk =0 ‫ يتم عرض رسالة خطأ ويتم اسناد القيمة صفر‬، ‫ كيلو بايت‬500 ‫أكبر من‬
:‫ذلك‬
// Check file size
if ($_FILES["fileToUpload"]["size"] > 500000) {
echo "Sorry, your file is too large.";
$uploadOk = 0;
}

‫تحديد نوع الملف‬


‫ واذا حدد‬.GIF ‫ و‬PNG ‫ و‬JPEG ‫ و‬JPG ‫يسمح الكود أدناه للمستخدم فقط بتحميل ملفات صور من نوع‬
: $uploadOk =0 ‫المستخدم نوع اخر غير المحدد تظهر رسالة خطأ قبل اسناد القيمة صفر‬
// Allow certain file formats
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType !=
"jpeg"&& $imageFileType != "gif" )

{
echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
$uploadOk = 0;
}

:‫" الكامل لتحميل ملف كما يلي‬upload.php" ‫وينتج الملف‬

<?php
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
// Check if image file is a actual image or fake image
if(isset($_POST["submit"])) {
$check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
if($check !== false) {
echo "File is an image - " . $check["mime"] . ".";
$uploadOk = 1;
} else {
echo "File is not an image.";
$uploadOk = 0;

61 2019 ‫عايض الشباطي‬.‫اعداد د‬


Basic concepts in PHP V1.01IPCSIT

}
}
// Check if file already exists
if (file_exists($target_file)) {
echo "Sorry, file already exists.";
$uploadOk = 0;
}
// Check file size
if ($_FILES["fileToUpload"]["size"] > 500000) {
echo "Sorry, your file is too large.";
$uploadOk = 0;
}
// Allow certain file formats
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType
!= "jpeg" && $imageFileType != "gif" ) {
echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
$uploadOk = 0;
}
// Check if $uploadOk is set to 0 by an error
if ($uploadOk == 0) {
echo "Sorry, your file was not uploaded.";
// if everything is ok, try to upload file
} else {
if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
echo "The file ". basename( $_FILES["fileToUpload"]["name"]). " has been
uploaded.";
} else {
echo "Sorry, there was an error uploading your file.";
}
}
?>

‫ تحتاج إلى نقله من الدليل المؤقت إلى موقع دائم باستخدام دالة‬،‫ أو تخزينه على أساس دائم‬،‫الستخدام هذا الملف‬
move_uploaded_file ().

For a complete reference of filesystem functions, go to our complete PHP Filesystem Reference.

62 2019 ‫عايض الشباطي‬.‫اعداد د‬


‫‪Basic concepts in PHP‬‬ ‫‪V1.01IPCSIT‬‬

‫الكوكيز‪Cookie‬‬
‫الكوكيز هو عبارة عن بعض المعلومات أو القطع الصغيرة من البيانات يتم االحتفاظ بها في جهاز العميل لكي يتم‬
‫االحتفاظ بها عند الزيارات المختلفة للمستخدم (العميل) ‪ ،‬يمكن استخدامه في ملف تعريف االرتباط لتحديد هوية‬
‫المستخدم‪ .‬ملف تعريف االرتباط هو ملف صغير يقوم الخادم بتضمينه على كمبيوتر المستخدم‪ .‬في كل مرة يطلب‬
‫ضا باستخدام‪ ،PHP‬يمكنك إنشاء واسترداد‬
‫فيها نفس الكمبيوتر صفحة بها متصفح‪ ،‬سيرسل ملف تعريف االرتباط أي ً‬
‫قيم ملفات تعريف االرتباط‪.‬‬
‫الكوكيز مفيد لالستخدام في األشياء البسيطة والغير خطيرة ‪ ،‬لكنه يمكن ان يستخدم بشكل سئ ‪ ،‬مثل استخدامه في‬
‫معرفة معلومات عن المستخدم بدون علم منه ‪ ،‬أو تخزين كميات كبيرة من البيانات فيه والتي من األجدر أن يتم‬
‫حفظها في ملف على السيرفر ‪.‬‬
‫ولذلك فهو عبارة عن قطعة صغيرة من البيانات التي تستخدم لتخزين اسم متغير وقيمته مع معلومات حول الموقع‬
‫التي أتت منه وتاريخ انتهاءها‪ .‬ويمكن ان نقول هو عباره عن تقنية للتخزين من جهة العميل ( ‪Client-Side‬‬
‫‪ )Storage‬تخزن في ملفات في جهاز العميل‪.‬‬
‫عندما يطلب المستعرض صفحة من السيرفر وهذه الصفحة تقوم بتخزين كوكيز فإن السيرفر يقوم بإخبار‬
‫المستعرض بأنه سيقوم بوضع كوكيز لالستعمال الحقا ‪.‬وعندما يتم طلب الصفحة مرة آخري يقوم المستعرض‬
‫بأرسال البيانات التي تم إنشاؤها سابقا ً عند طلب الصفحة ‪.‬يتم انتهاء مدة الكوكيز بإنتهاء وقت صالحيتها االمحدد‬
‫من قبل السيرفر ويتم مسحها فوريا ً عند اغالق الصفحة إذا كان وقت صالحيتها صفرا ً من الثواني ‪ .‬يقوم السيرفر‬
‫بإرسال الكوكيز عبر الـ‪ HTTP Headers‬الذي يتم إرساله قبل أي مخرج من مخرجات الـ‪ , html‬كما ان‬
‫المستعرض أيضا يقوم بإرسال الكوكيز عبر الـ‪ HTTP Header‬باإلضافه إلى أن المستعرض يتعرف على من‬
‫سيقوم بإرسال الكوكيز الذي يتم ارساله من قبل الموقع مثال الموقع االتي ‪ www.php.net‬او أي موقع اخر‬
‫باستطاعتنا عند إ نشاء الكوكيز تحديد مسار يتم ارسال الكوكيز لكي يتم اقتصار عملية العبور إلى الكوكيز إلى‬
‫أماكن معينة ‪.‬وكون الـ‪ PHP‬لغة حديثه لعمل اكواد ويب فإنها تأتي بدعم كامل للكوكيز بواسطة الدالة‬
‫)(‪ setcookie‬التي تقوم بانشاء ملف تعريف االرتباط ‪.‬‬
‫‪Syntax‬بناء الجملة‬
‫;)‪setcookie(name, value, expire, path, domain, secure, httponly‬‬
‫المعامل االول مطلول والبقية األخرى اختيارية‪.‬‬
‫نظرا ً بأن لغة الـ " ‪ " PHP‬لغة حديثه نسبيا ً لعمل كود ويب فإنها تأتي بدعم كامل للكوكيز بواسطة الدالة‪setcookie() .‬‬
‫و تأخذ الدالة )(‪ setcookie‬عدد من المعامالت‪ ،‬الثالثة األولى هي األهم و األكثر استخداما ً و هي بالترتيب‪:‬‬
‫‪: Name‬و هو قيمة حرفية يتم تخزينها كاسم للمتغير‪.‬‬

‫‪: Value‬وهو قيمة حرفية يتم تخزينها كقيمة لذلك المتغير‪.‬‬

‫‪63‬‬ ‫اعداد د‪.‬عايض الشباطي ‪2019‬‬


‫‪Basic concepts in PHP‬‬ ‫‪V1.01IPCSIT‬‬

‫‪: Expire‬وهو عبارة عن ‪ timestamp‬الذي يقوم باإلشارة إلى تاريخ انتهاء الكوكيز‪.‬‬

‫و يمكن تعريف الـ " ‪ " timestamp‬بأنه عبارة عن رقم صحيح ال يحتوي على فواصل عشرية يقوم بحساب الثواني و إذا كنا نريد مثالً أن‬
‫نقوم بمسح الكوكيز بعد ساعة من تخزينه فإننا نقوم باستعمال الدالة " )(‪ " time‬التي تقوم بحساب الـ " ‪ " timestamp‬ثم نضيف عليه‬
‫الوقت الذي نريده و في حالتنا الساعة تساوي ‪ 3600‬ثانية ‪ ،‬و على ذلك سنقوم بإضافة ناتج الدالة " ‪ " time‬على ‪ 3600‬لكي يتم مسح‬
‫الكوكيز بعد ساعة واحدة‪.‬‬

‫أما الثالث العوامل األخرى التي يتم استخدامها أيضا ً في الكوكيز و لكنها نادرة االستخدام فهي‪:‬‬

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

‫‪2‬ـ ‪ domain‬الذي سيتم إرسال البيانات إليه و هو مفيد في حالة ما إذا كان هناك أكثر من دومين تريد إرسال الكوكيز إليه‪.‬‬

‫‪3‬ـ ‪ secure‬من نوع ‪ integer‬يتم اإلشارة إليه بـ ‪ secure‬يتم في حالة استخدام عمليات تشفير بالـ‪. SSL.‬‬

‫‪ Httponly-4‬عندما تكون القيمة ‪ ، TRUE‬يمكن الوصول إلى ملف تعريف االرتباط فقط من خالل بروتوكول ‪ .HTTP‬هذا يعني أنه لن يمكن‬
‫الوصول إلى ملف تعريف االرتباط من خالل لغات البرمجة النصية‪ ،‬مثل ‪ .JavaScript‬لقد تم اقتراح أن هذا اإلعداد يمكن أن يساعد بشكل فعال‬
‫في تقليل سرقة الهوية من خالل هجمات ‪( XSS‬على الرغم من عدم دعمها من قبل جميع المتصفحات) ‪ ،‬ولكن هذا االدعاء غال ًبا ما يكون محل‬
‫خالف مضاف في ‪ .PHP 5.2.0‬صحيحة أو خاطئة‪.‬‬

‫إنشاء ‪ /‬استرداد ملف تعريف االرتباط‪.‬‬


‫ينشئ المثال التالي ملف تعريف ارتباط باسم "المستخدم" بقيمة "‪ "John Doe‬تنتهي صالحية ملف تعريف‬
‫االرتباط بعد ‪ 30‬يو ًما (‪ .)30 * 86400‬يعني "‪ "/‬أن ملف تعريف االرتباط متاح في موقع الويب بالكامل (بخالف‬
‫ذلك ‪ ،‬حدد دليل المسار الذي تفضله)‪.‬‬
‫ضا الدالة‬
‫ثم نسترد قيمة ملف تعريف االرتباط "المستخدم" (باستخدام المتغير العام ‪ .)$_ COOKIE‬نستخدم أي ً‬
‫()‪ isset‬لمعرفة ما إذا تم تعيين ملف تعريف االرتباط‪:‬‬

‫‪Example:‬‬
‫‪<?php‬‬
‫;"‪$cookie_name = "user‬‬
‫;"‪$cookie_value = "John Doe‬‬
‫‪setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/"); // 86400 = 1 day‬‬
‫>?‬
‫>‪<html‬‬
‫>‪<body‬‬
‫‪<?php‬‬
‫{ ))]‪if(!isset($_COOKIE[$cookie_name‬‬
‫;"!‪echo "Cookie named '" . $cookie_name . "' is not set‬‬
‫{ ‪} else‬‬
‫;">‪echo "Cookie '" . $cookie_name . "' is set!<br‬‬

‫‪64‬‬ ‫اعداد د‪.‬عايض الشباطي ‪2019‬‬


Basic concepts in PHP V1.01IPCSIT

echo "Value is: " . $_COOKIE[$cookie_name];


}
?>
</body>
</html>
Cookie named 'user' is not set!

‫< وقيمة ملف تعريف االرتباط يتم ترميزها‬html> ‫ قبل عالمة‬setcookie () ‫ يجب أن تظهر الدالة‬:‫مالحظة‬
‫ استخدم‬، URL ‫ ويتم فك تشفيرها تلقائيًا عند استالمها (لمنع تشفير عنوان‬، ‫تلقائيًا عند إرسال ملف تعريف االرتباط‬
.)‫ بدالً من ذلك‬setrawcookie)(

Cookie ‫تعديل قيمة‬


‫ ما عليك سوى تعيين (مرة أخرى) ملف تعريف االرتباط باستخدام دالة‬، ‫لتعديل ملف تعريف االرتباط‬
:setcookie)(
Example
<?php
$cookie_name = "user";
$cookie_value = "Alex Porter";
setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/");
?>
<html>
<body>

<?php
if(!isset($_COOKIE[$cookie_name])) {
echo "Cookie named '" . $cookie_name . "' is not set!";
} else {
echo "Cookie '" . $cookie_name . "' is set!<br>";
echo "Value is: " . $_COOKIE[$cookie_name];
}
?>

</body>
</html>
Cookie 'user' is set!
Value is: John Doe
‫حذف ملف تعريف االرتباط‬
:‫ مع تاريخ انتهاء صالحية في الماضي‬setcookie)( ‫ استخدم دالة‬، ‫لحذف ملف تعريف ارتباط‬
<?php
// set the expiration date to one hour ago
setcookie("user", "", time() - 3600);
?>
<html>
<body>
<?php

65 2019 ‫عايض الشباطي‬.‫اعداد د‬


‫‪Basic concepts in PHP‬‬ ‫‪V1.01IPCSIT‬‬

‫;"‪echo "Cookie 'user' is deleted.‬‬


‫>?‬
‫>‪</body‬‬
‫>‪</html‬‬
‫‪Cookie 'user' is deleted.‬‬

‫تحقق من تمكين ملفات تعريف االرتباط‬


‫ً‬
‫يقوم المثال التالي بإنشاء برنامج نصي صغير يتحقق من تمكين ملفات تعريف االرتباط‪ .‬أوال ‪ ،‬حاول إنشاء ملف‬
‫تعريف ارتباط تجريبي باستخدام الدالة )( ‪ ، setcookie‬ثم احسب عدد متغير المصفوفة‪$ _COOKIE‬‬
‫‪Example‬‬
‫‪<?php‬‬
‫;)'‪setcookie("test_cookie", "test", time() + 3600, '/‬‬
‫>?‬
‫>‪<html‬‬
‫>‪<body‬‬

‫‪<?php‬‬
‫{ )‪if(count($_COOKIE) > 0‬‬
‫;"‪echo "Cookies are enabled.‬‬
‫{ ‪} else‬‬
‫;"‪echo "Cookies are disabled.‬‬
‫}‬
‫>?‬
‫>‪</body‬‬
‫>‪</html‬‬
‫‪Cookies are enabled.‬‬
‫‪Complete PHP Network Reference‬‬
‫‪For a complete reference of Network functions, go to our complete PHP Network Reference.‬‬

‫الجلسة ‪: Session‬‬
‫سنتعرف على الـ ‪ Session‬وعن التحكم فيها ‪ ،‬ومن ثم استخداماتها باالضافة الى بعض االمثلة ‪ ،‬وسنتطرق الى‬
‫بعض األخطاء في كتابة الـ ‪ Session‬وحلول تلك األخطاء ‪ ،‬عند االنتقال من صفحة الى أخرى في موقع معين فإن‬
‫بروتوكول الـ ‪ HTTP‬ال يمكنه معرفة أن تلك الصفحات قد تم تصفحها من قبل نفس الشخص ‪ ،‬ولكن مع الـ‬
‫‪ cookies‬و الـ ‪ Session‬تقدم تلك الطريقة ‪ ،‬ولذلك وببساطة فإن الـ ‪ Session‬مكان على جهاز المتصفح يمكن من‬
‫خالله تخزين قيمة معينة للرجوع اليها في حال قام نفس الشخص باالنتقال من صفحة الى أخرى ‪ ،‬ولعل هذا‬
‫التعريف يصف ببساطة معناها العام وال يعني ذلك أنه تعريف شامل لكل المعاني ‪,‬وما هي النقاط الرئيسية التي يجب‬
‫معرفتها لفهم طريقة التعامل مع الـ ‪ Session‬؟ أول تلك النقاط أن عملية تسجيل المتغير على جهاز المستخدم له‬
‫مدة معينة تنتهي بانتهاء الجلسة ‪ ،‬ومن هنا جاءت التسمية ‪ ،‬أما ما نعنيه الجلسة فهي مصطلح لقيامك بالتصفح من‬

‫‪66‬‬ ‫اعداد د‪.‬عايض الشباطي ‪2019‬‬


‫‪Basic concepts in PHP‬‬ ‫‪V1.01IPCSIT‬‬

‫الموقع ومن ثم اغالق الموقع ‪ ،‬ببساطة كل مرة تقوم بزيارة الموقع تبدأ جلسة أو ‪ Session‬جديدة ‪ ،‬مع مالحظة أن‬
‫هناك طرق للتحكم بوقت االنتهاء كما في الـ ‪.cookies‬‬
‫وبالنسبة الى ما يسمى بالـ ‪ ID Session‬أو اختصـارا ً ‪ SID‬ويعني ذلك ( رقم الجلسة ) ‪ ،‬وهو رقم عشوائي فريد‬
‫يصعب تكراره أو فلنقل أنه مستحيل الحتوائه على ارقام واحرف كبيرة وصغيرة في متغير طويل نسبيا ً ‪ ،‬وهذه‬
‫القيمة هي األهم ‪ ،‬إلنها القيمة الوحيدة التي تربط ما يسمى بالـ ‪ Session Variables‬أو ( متغيرات الجلسة ) مع‬
‫جهاز المستخدم ‪ ،‬فالـ ‪ SID‬هي القيمة الوحيدة التي يتم تخزينها في جهاز المستخدم ( ‪ ، ) Client‬أما متغيرات‬
‫الجلسة ‪ Session Variables‬يتم تخزينها في السيرفر ( ‪ ، ) Server‬فعند التحقق من وجود هذه القيمة على جهاز‬
‫المستخدم يمكن الدخول الى المتغير اآلخر المتربط به والمسمى بالـ ‪. Session Variable‬‬
‫و طريقة تخزين لـ ‪ SID‬و الـ ‪ SID ، Variables Session‬كما قلنا أنها تخزن على جهاز العميل ( ‪) Client‬‬
‫إما عن طريق الـ ‪ cookies‬والتي لها سلبياتها المتعددة أو عن طريق تمريرها عبر الـ ‪ ، HTTP‬أما بالنسبة للـ‬
‫‪ Session Variables‬فيتم تخزينها في ملفات فارغة على جهاز الـ ‪ Server‬وكذلك في مستويات متقدمة يمكن‬
‫التحكم بها وتخزينها في قواعد بيانات ‪.‬‬
‫عندما تعمل مع تطبيق ما ‪ ،‬تقوم بفتحه وإجراء بعض التغييرات ‪ ،‬ثم تقوم بإغالقه‪ .‬هذا يشبه إلى حد كبير الجلسة‪.‬‬
‫الكمبيوتر يعرف من أنت‪,‬يعرف متى تبدأ التطبيق ومتى تنتهي‪ .‬ولكن هناك مشكلة واحدة على اإلنترنت‪ :‬خادم‬
‫الويب‪ Server Web‬ال يعرف من أنت أو ماذا تفعل ‪ ،‬ألن عنوان ‪ HTTP‬ال يحافظ على حالته‪.‬‬

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

‫‪ -‬إعدادت الـ ‪: Session‬‬


‫عن طريق ملف الـ ‪ php.ini‬والذي يحتوي على إعدادات الـ ‪ PHP‬يمكن التحكم بإعدادات الـ ‪ ، Session‬ملف الـ‬
‫‪ php.ini‬يوجد في دليل الـ ‪ ، Windows‬وللوصول الى خصائص الـ ‪ Session‬إبحث عن كلمة ( ‪) Session‬‬
‫وستجد السطر التالي ‪:‬‬
‫]‪[Session‬‬
‫من هنا تستطيع التحكم بخيارات الـ ‪ ، Sessions‬وهي كاالتي(وصف ألهم الخيارات) ‪..‬‬

‫‪ -1‬الخيار ‪: Session.auto_start‬‬
‫ً‬
‫بداية تلقائية للـ ‪ ( Session‬دون الحاجة لعمل ذلك يدويا عن طريق ‪. ) Session_start‬‬

‫‪ -2‬الخيـار ‪: Session.cache_expire‬‬

‫‪67‬‬ ‫اعداد د‪.‬عايض الشباطي ‪2019‬‬


‫‪Basic concepts in PHP‬‬ ‫‪V1.01IPCSIT‬‬

‫وقت انتهاء الجلسة بالدقائق ‪.‬‬


‫‪ -3‬الخيـار ‪: Session.cookie_lifetime‬‬
‫وقت انتهاء الـ ‪ cookie‬المرتبطة بالجلسة ‪ ،‬وهي افتراضيا ً ستكون ‪ 0‬أي أن الـ ‪ cookie‬ستنتهي فترتها مع اقفـال‬
‫الشخص المتصفح للموقع ‪.‬‬

‫‪ -4‬الخيـار ‪: Session_name‬‬
‫إسم الـ ‪ Session‬التي ستستخدم كـ ‪ cookie‬وافتراضيا ً ستكون ‪. PHPSESSID‬‬

‫‪ -5‬الخيـار ‪: session.save_path‬‬
‫هذا يعني مكان تخزين ملفات الـ ‪ Session‬في جهازك باعتباره سيرفر ‪ ،‬وهنا‬
‫تستطيع أن تضع أي عنوان في جهازك ‪ ،‬أما تركه فارغا ً فيعني عدم تفعيل الـ ‪Session‬‬
‫لديك ‪.‬‬

‫بداية الـ ‪: Session‬‬


‫قبل أن تستخدم أيا ً من دوال الـ ‪ Session‬يجب اخبارالكود أن يبدأ جلسة ‪ ، Session‬والطريقة هي أن تضع في‬
‫بداية الكود وفي أول سطر فيه بعد عالمة الفتح ما يلي ‪:‬‬
‫?<‬
‫;)(‪session_start‬‬
‫>?‬
‫في هذه الحالة فقط يمكن أن تقوم باستخدام دوال الـ ‪ Session‬األخرى ‪ ،‬أما اذا لم يتم كتابة هذا السطر فلن يتم ذلك ‪.‬‬

‫مالحظة مهمة حول عملية بداية الـ ‪ Session‬وهي أن تتأكد من أن هذا السطر ال يسبقه عملية اخراج مخرجات ‪،‬‬
‫بمعنى أخرى أي استخدام للدوال مثل ‪ echo‬أو ‪ ، print‬وكذلك ال يسبق هذا السطر أي فراغ وتأكد من هذه النقطة‬
‫جيدا ً النها كثيرة الحدوث‬
‫‪ -‬تخزين متغيرات الجلسات ‪:‬‬
‫وهي ما نسميها بالـ ‪ ، Session Variables‬ولعمل ذلك يوجد لدينا الدالة الواردة في المثال التالي ‪:‬‬
‫?<‬
‫;"‪$user = "AYEDH‬‬
‫;]"‪$_SESSION["user‬‬
‫>?‬
‫ما قمنا بعمله هو التالي ‪:‬‬
‫‪ -1‬عرفنا متغيرا ً ‪ user‬يحتوي على قيمة حرفية ‪.‬‬
‫‪ -2‬قمنا بتسجيل هذا المتغير في متغير جلسة ( ‪ ) Session Variable‬وبنفس االسم ‪ user‬ولكن بدون عالمة ‪. $‬‬
‫‪ -‬التعامل مع متغيرات الجلسة ‪:‬‬
‫بعد تسجيل المتغير ‪ ،‬يمكن الرجوع اليه بعدة طرق تعتمد على الخيار ‪ register_globals‬في ملف الـ ‪php.ini‬‬

‫‪68‬‬ ‫اعداد د‪.‬عايض الشباطي ‪2019‬‬


‫‪Basic concepts in PHP‬‬ ‫‪V1.01IPCSIT‬‬

‫‪ ،‬اذا كان ‪ on‬وهذا هو االختيار اإلفتراضي فإن المتغير الذي تم تسجيله في الـ ‪ Session‬يمكن الرجوع اليه كأي‬
‫متغير آخر ‪ ،‬عن طريق اسم المتغير فقط ‪ ،‬وفي مثالنا الحالي سيكون ‪ ، $ user‬أما اذا كان الخيار غير مفعل وليس‬
‫بالصورة التي ذكرتها فيمكن الرجوع الى المتغير عن طريق األمر‬
‫]"‪$HTTP_SESSION_VARs["user"] OR($_SESSION["user‬‬
‫أيضا كنقطة مهمة يجب معرفتها وهي طريقة التحقق من أن متغيرا ً معينا ً قد تم تسجيله أم ال ‪ ،‬وهذه الطريقة مفيدة‬
‫في الصفحات التي يجب أن يكون فيها المستخدم قد سجل الدخول وبالفعل تمت عملية تسجيل الـ ‪ Session‬له ‪ ،‬في‬
‫المثال التالي تلك الطريقة ‪:‬‬
‫?<‬
‫{ ))]"‪if (isset($_SESSION["x‬‬
‫;"أهال وسهال بكم في موقعنا" ‪echo‬‬
‫}‬
‫{ ‪else‬‬
‫;"‪ ..‬ال يسمح لك بالدخول" ‪echo‬‬
‫}‬
‫>?‬
‫في هذا المثال سيتم عرض الجملة (أهال وسهال بكم في موقعنا ) إذا كان عملية تسجيل الـ ‪ Session‬تمت للمتغير‬
‫‪ ، user‬وسيتم عرض الجملة (ال يسمح لك بالدخول ‪ ) ..‬في حالة عدم تسجيل الـ ‪ . Session‬ايضا يوجد عملية‬
‫للتعامل مع متغيرات الجلسة ‪ ،‬وهي عملية الغاء تسجيل الـ ‪ Session‬لمتغير معين ‪ ،‬وهذه الطريقة تتم عن طريق‬
‫الدوال ‪ session_unset‬و ‪ ، session_destroy‬أما الفرق بينهم فهو أن الدالة األولى تقوم بعملية حذف جميع‬
‫متغيرات الجلسة لـ ‪:، Session‬‬
‫?<‬
‫;)(‪session_unset‬‬
‫>?‬
‫وفي النهاية يجب أستخدام الدالة الثالثة ‪ session_destroy‬اللغاء الـ ‪ SID‬واالنتهاء من التعامل مع الـ ‪Session‬‬
‫مثال بسيط عن الـ ‪: Session‬‬
‫مثال بسيط لتوضيح كيفية عمل الـ ‪ ، Session‬في البداية يوضع الكود التالي في ملف ونسميه ‪: phpsession.php‬‬
‫‪<?php‬‬
‫;)(‪session_start‬‬
‫>?‬
‫‪<?php‬‬
‫;‪$age = 12‬‬
‫;‪$_SESSION["age"] = 12‬‬
‫;]"‪echo $_SESSION["age‬‬
‫;">‪ ..</a‬التــالي>‪echo "<a href=phpsession1.php‬‬
‫>?‬
‫الصفحة الثانية احفظها بإسم ‪ ، phpsession1.php‬وضع الكود التالي فيها ‪:‬‬

‫‪69‬‬ ‫اعداد د‪.‬عايض الشباطي ‪2019‬‬


‫‪Basic concepts in PHP‬‬ ‫‪V1.01IPCSIT‬‬

‫‪<?php‬‬
‫;)(‪session_start‬‬
‫>?‬
‫‪<?php‬‬
‫;">‪<br‬أنت في الصفحة الثانية" ‪echo‬‬
‫;]"‪echo $_SESSION["age‬‬
‫;)(‪session_unset‬‬
‫;">‪ ..</a‬التــالي>‪echo "<a href= phpsession2.php‬‬
‫>?‬
‫الصفحة الثالثة تحتوي على الكود التالي ‪ ،‬واسمها ‪: phpsession2.php‬‬
‫?<‬
‫‪<?php‬‬
‫;)(‪session_start‬‬
‫>?‬
‫‪<?php‬‬
‫;">‪<br‬أنت في الصفحة الثالثة" ‪echo‬‬
‫;]"‪echo $_SESSION["age‬‬
‫>?‬
‫>?‬
‫ابدأ من الصفحة األولى ومن ثم انتقل من صفحة الى أخرى ‪ ،‬حتى تصل الى الثالثة ‪ ،‬بافتراض أنك قمت بتجربة‬
‫المثال ‪ ،‬ستالحظ أن الصفحة األولى سيتم طباعة الـ ‪ Session‬التي تم تسجيلها وهي ‪ age‬وستظهر القيمة ‪ 12‬في‬
‫الجملة الطويلة التي تبين أن المتغير ‪ age‬يحتوي على قيمة معينة ‪ ،‬وفي الصفحة الثانية ستالحظ نفس الجملة ونفس‬
‫القيمة تمت طباعتهما ‪ ،‬أما في الصفحة الثالثة واألخيرة فتمت طباعة الجملة ‪ ،‬لكن االختالف أن القيمة ‪ 12‬في متغير‬
‫الـ ‪ age Session‬لم تتم طباعتها ‪ ،‬لماذا ؟ لسبب بسيط وهو أننا في الصفحة السابقة قمنا بالغاء تسجيل الـ‬
‫‪ Session‬للمتغير ‪ age‬وبالتالي فإن الصفحة الثالثة لم تتعرف على متغير مباشر له االسم ‪ age‬وال على متغير الـ‬
‫‪ ، age Session‬وبالتالي تم طباعة الجملة بدون القيمة ‪.‬‬

‫‪ $ _SESSION‬المتغير العام‪.‬‬
‫يتم تعيين متغيرات الجلسة باستخدام المتغير العام‪ $_SESSION‬لنقم بإنشاء صفحة جديدة تسمى‬
‫"‪ "demo_session1.php‬في هذه الصفحة ‪ ،‬نبدأ جلسة جديدة ونضع بعض متغيرات الجلسة‪:‬‬

‫‪Example‬‬
‫‪<?php‬‬
‫‪// Start the session‬‬
‫;)(‪session_start‬‬
‫>?‬
‫>‪<!DOCTYPE html‬‬
‫>‪<html‬‬

‫‪70‬‬ ‫اعداد د‪.‬عايض الشباطي ‪2019‬‬


Basic concepts in PHP V1.01IPCSIT

<body>
<?php
// Set session variables
$_SESSION["favcolor"] = "green";
$_SESSION["favanimal"] = "cat";
echo "Session variables are set.";
?>
</body>
</html>
‫ سنصل إلى معلومات‬، ‫" من هذه الصفحة‬demo_session2.php". ‫ نقوم بإنشاء صفحة أخرى تسمى‬، ‫بعد ذلك‬
‫"( الحظ أن متغيرات الجلسة ال يتم تمريرها‬demo_session1.php").‫الجلسة التي حددناها في الصفحة األولى‬
‫ بل يتم استرجاعها من الجلسة التي نفتحها في بداية كل صفحة‬، ‫بشكل فردي إلى كل صفحة جديدة‬
:‫ العام‬$_ SESSION ‫ضا أن جميع قيم متغيرات الجلسة مخزنة في متغير‬
ً ‫( الحظ أي‬session_start ()).
Example
<?php
session_start();
?>
<!DOCTYPE html>
<html>
<body>
<?php
// Echo session variables that were set on previous page
echo "Favorite color is " . $_SESSION["favcolor"] . ".<br>";
echo "Favorite animal is " . $_SESSION["favanimal"] . ".";
?>
</body>
</html>
Favorite color is .
Favorite animal is .

:‫هناك طريقة أخرى إلظهار جميع قيم متغيرات الجلسة لجلسة مستخدم وهي تشغيل الكود التالي‬

Example
<?php
session_start();
?>
<!DOCTYPE html>
<html>
<body>
<?php
print_r($_SESSION);
?>
</body>
</html>
Array ( )

71 2019 ‫عايض الشباطي‬.‫اعداد د‬


Basic concepts in PHP V1.01IPCSIT

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

Example
<?php
session_start();
?>
<!DOCTYPE html>
<html>
<body>
<?php
// to change a session variable, just overwrite it
$_SESSION["favcolor"] = "yellow";
print_r($_SESSION);
?>
</body>
</html>
Array ( [favcolor] => yellow )
session ‫حذف‬
:session_destroy () ‫ و‬session_unset () ‫ استخدم‬،‫إلزالة جميع متغيرات الجلسة العامة وتدميرها‬
Example:

<?php
session_start();
?>
<!DOCTYPE html>
<html>
<body>
<?php
// remove all session variables
session_unset();
// destroy the session
session_destroy();
?>
</body>
</html>
All session variables are now removed, and the session is destroyed.

72 2019 ‫عايض الشباطي‬.‫اعداد د‬


‫‪Basic concepts in PHP‬‬ ‫‪V1.01IPCSIT‬‬

‫الفرق بين ‪session and cookie‬‬


‫عندما يرسل طلب الى سرفر معين و ‪ session‬شغاله في السرفر‪ server‬سوف تقوم بتكوين ملف في السرفر برقم‬
‫يبداء بكلمة ‪ sess‬وتكوين رقم عشوائي يتم ارساله الى العميل ‪,Client‬حيث يتم انشاء ملف بنفس اسم‬
‫السرفر‪ host.com‬ويحفظ بداخل الملف ‪ session_id‬وعندما يرسل العميل طللب ثاني لتثبيت اسم المستخدم‬
‫يرسل ‪ http‬كل معلومات الكوكيز‪ cookie‬الذي تم تخزينه للهوست ‪ host‬المرسل‪ ,‬السرفر يقوم بعملية البحث عن‬
‫المتغير للتطابق فاذا وجده تم حفظ اسم المستخدم داخل ‪ session‬ويرجع الطلب الى العميل بان العملية تمت‪,‬وعند‬
‫ارسال طلب اخر الى ‪ server‬سوف يرسل كل المعلومات التي في ‪ cookie‬عبر ‪ http‬وسيقوم بالبحث عن ‪id‬‬
‫ويعيد اسم المستخدم‪ .‬لذلك باختصار نقول ان ‪ cookie‬عبارة عن ملف بنفس اسم ‪ host‬يخزن بالمتصفح يحتوي‬
‫على عدة قيم ‪ .‬اما ‪session‬عبارة عن ملف يحوي ملف ‪ Random Id‬ويحتوي على مجموعة قيم ‪ .‬وعندما يتم‬
‫ارسال قيم ثانية يتم حفظها في )‪.HOST(SERVER‬‬

‫قواعد البيانات ‪MYSQL‬‬


‫مفهوم قواعد البيانات‬
‫قواعد البيانات ببساطة جمع المعطيات أو المدخالت ‪ .‬كل قاعدة بيانات ربما تتكون من جدول (‪ )Table‬واحد أو‬
‫عدة جداول هذه الجداول تحتوي علي أعمدة وصفوف تهيكل البيانات وترتبها ‪ ,,,‬الجدول الذي باألسفل كمثال ‪:‬‬
‫"‪#Table "Coustomers‬‬

‫‪Lname‬‬ ‫‪Fname‬‬ ‫‪Id‬‬


‫صالح‬ ‫عبدالواهب‬ ‫‪025‬‬
‫خالد‬ ‫محمد‬ ‫‪044‬‬

‫كما تالحظ ‪ ,‬الجدول قسم البيانات إلى صفوف ‪...‬مع كل إضافة عميل جديد سوف يكون هناك صف (سجل) جديد ‪...‬‬

‫‪73‬‬ ‫اعداد د‪.‬عايض الشباطي ‪2019‬‬


‫‪Basic concepts in PHP‬‬ ‫‪V1.01IPCSIT‬‬

‫ربما لو تطلق لخيالك العنان سوف تالحظ أن هذا الجدول مشابه للدوالب والصفوف رفوف فإذا أردت أن تضيف‬
‫كتب أو مالبس أو أي كان سوف تضيفها في رف جديد ‪..‬كما يحصل في إضافة عميل جديد سوف تضيفه في صف‬
‫(سجل) جديد ‪.‬‬
‫البيانات في كل صف قسمت إلى مدى أبعد في الخاليا ( أو الحقول) ‪ ,‬كل من هذه البيانات تحتوي على قيمة محددة‬
‫وصفة محددة ‪ ,‬على سبيل المثال محمد خالد سوف ترى أن هذا العميل انقسمت بياناته في الحقل إلى ‪ id‬واالسم‬
‫األول واالسم األخير ‪ .‬الصفوف في الجدول ليس لها ترتيب معين ‪ ..‬يمكن أن يكون الترتيب أبجديا ويمكن أن يكون‬
‫باسم العضو أو باسمه األخير أو بآي معيار أخر يمكن أن تحدده مسبقا ً لترتيب الصفوف ولهذا يكون من الضروري‬
‫تحديد طريقة ليسهل عليك تحديد صف(سجل) معين ‪....‬في المثال السابق نستطيع إخراج السجل من بين باقي‬
‫السجالت بــ ‪ id‬وهو رقم العميل الذي هو عدد فريد ال يتكرر في أي صف(سجل) أخر وسبب استنادي في استخراج‬
‫السجل علي ‪ id‬النه ربما يكون هناك عميالن لها نفس االسم ‪ ....‬وهذا ليس شرط أن يكون للجدول مفتاح فريد لكن‬
‫هنا حددنه لكي يتم استخراج السجالت المطلوبة بسهوله وبسرعة اكبر ‪.‬‬
‫قبل ان يبدء العمل مع ‪ mysql‬يجب ان تعرف احتياجات التطبيق الذي تريد ان تصممه وهذا سوف يجعلنا ان‬
‫نصمم قاعدة بيانات لتخزين المعلومات وستتكون قاعدة البيانات من جدول او عدة جداول فرضا اذا اردنا تصميم‬
‫جدول المتسخدمين ونسميه ‪ users‬لتخزين معلومات عن المتسخدمين سيحوي اعمدة لتخزين بيانات مثال معرف‬
‫المستخدم ‪ user_id‬واسمه االول واالخير والعنوان وااليميل وكلمة مرور وتاريخ التسجيل ‪,‬يجب ان تحدد وتقوم‬
‫بتعريف الجداول واالعمدة التي ستحتاج اليها قاعدة البيانات يجب ان تحدد نوع بيانات ‪ mysql‬لكل حقل ‪,‬انواع‬
‫البيانات متشابهة في جميع برمجيات قواعد البيانات‬

‫‪col‬‬ ‫‪Ex‬‬
‫‪User _id‬‬ ‫‪1‬‬
‫‪f-name‬‬ ‫‪Essam‬‬
‫‪l-name‬‬ ‫‪Mohammed‬‬
‫‪Email‬‬ ‫‪ate@hotmail.com‬‬
‫‪Password‬‬ ‫*****‬
‫‪Registration_date‬‬ ‫‪2020.09.08‬‬

‫اذا لم تحدد أي قيمة لعمود عند اضافة سجل ممكن ان تدرج قيمة افتراضية وتكون هي القيمة االفتراضية للحقل واال‬
‫سوف يظهر خطاء في حالة ان العمود معرف ومقيد بالشكل ‪ not null‬يمكن للعديد من االنواع ان تاخذ السمة‬
‫االختيارية ‪ length‬مما يحد من حجمها ويمكن ان تكون اختيارية او مطلوبة حسب القيود او الشروط التي في‬
‫قواعد البيانات ‪ mysql‬ويمكن ان تكتب يدويا او التحكم بها عبر واجهة ‪ mysql‬ويمكن الرجوع واالطالع على‬
‫القيود والشروط على مرجع ‪ mysql‬وعند انشاء جدول في اوامر ‪ sql‬سنوضح بعضا منها‪.‬‬
‫انواع بيانات ‪ mysql‬العامة التي يمكن استخدامها لتعريف االعمدة توضح عند انشاء الجدول التالي‪.‬‬

‫‪74‬‬ ‫اعداد د‪.‬عايض الشباطي ‪2019‬‬


‫‪Basic concepts in PHP‬‬ ‫‪V1.01IPCSIT‬‬

‫‪Col‬‬ ‫‪Type‬‬ ‫‪Permissions‬‬


‫‪User _id‬‬ ‫‪int‬‬ ‫‪not null auto_increment‬‬

‫‪f-name‬‬ ‫)‪Varchar(20‬‬ ‫‪not null‬‬

‫‪l-name‬‬ ‫)‪varchar(20‬‬ ‫‪not null‬‬

‫‪email‬‬ ‫)‪varchar(20‬‬ ‫‪not null‬‬

‫‪password‬‬ ‫)‪Char(15‬‬ ‫‪not null‬‬

‫‪Registration_date‬‬ ‫‪Date time‬‬ ‫‪not null‬‬

‫يجب عند ادحال نص بطول ‪ 20‬حرف وفي الحقل ‪ 15‬فسوف يتم قص اخر خمسة حروف وبنطبق ذلك على اي‬
‫حقل ‪,‬األمر األول الذي سنقوم بكتابته يقوم باستعراض قواعد البيانات الموجودة على السيرفر واالمر هو ‪:‬‬
‫‪Show databases‬‬
‫بعد استعراض قواعد البيانات باألمر السابق ‪ ،‬سنقوم بانشاء قاعدة بيانات باسم ‪ ، PHP‬ولعمل ذلك قم بكتابة األمر‬
‫التالي ‪:‬‬
‫;‪Create database PHP‬‬
‫أول هذه االوامر بعد انشاء قاعدة البيانات هو أمر انشاء جدول في قاعدة البيانات ‪ ،‬وهذا األمر يحتاج الى تفصيل‬
‫دقيق لبعض الخصائص مثل اسماء الحقول وانواع البيانات فيها كما تم توضيح في الجدول اعاله ‪:‬‬
‫( ‪Create table users‬‬
‫‪User_id Int not null auto_increment Primary Key,‬‬
‫‪f-name Varchar(20) not null,‬‬
‫‪l-name Varchar(20) not null,‬‬
‫‪email Varchar(20) not null,‬‬
‫‪password char(15) not null,‬‬
‫;)‪Registration_date DATE TIME not null‬‬
‫لغة ‪ PHP‬و‪MYSQL‬‬
‫عا‬
‫باستخدام ‪ ، PHP‬يمكننا االتصال بقواعد البيانات ومعالجتها‪MySQL .‬هو أكثر أنظمة قواعد البيانات شيو ً‬
‫المستخدمة مع ‪ PHP‬ويتميز‪ MySQL‬باالتي‪:‬‬
‫نظام قاعدة بيانات يُستخدم على الويب‬ ‫•‬
‫نظام قاعدة بيانات يعمل على الخادم‬ ‫•‬
‫مثالي لكل من التطبيقات الصغيرة والكبيرة‬ ‫•‬
‫سريع جدًا وموثوق به وسهل االستخدام مجاني للتنزيل واالستخدام ويستخدم معيار‪SQL‬‬ ‫•‬
‫تم تطوير وتوزيعه ودعمه بواسطة‪Oracle Corporation‬‬ ‫•‬

‫تمت تسمية ‪ MySQL‬على اسم ابنة المؤسس المشارك‪Monty Widenius: My‬‬

‫‪75‬‬ ‫اعداد د‪.‬عايض الشباطي ‪2019‬‬


‫‪Basic concepts in PHP‬‬ ‫‪V1.01IPCSIT‬‬

‫يتم تخزين البيانات الموجودة في قاعدة بيانات ‪ MySQL‬في جداول‪ .‬الجدول عبارة عن مجموعة من البيانات ذات‬
‫الصلة ‪ ،‬ويتكون من أعمدة وصفوف‪ .‬تعد ‪ PHP‬المدمجة مع ‪ MySQL‬مشتركة بين األنظمة األساسية (يمكنك‬
‫تطويرها في ‪ Windows‬والعمل على نظام أساسي‪ ) Unix‬يمكن تنزيل قاعدة بيانات ‪MySQL‬عبر الموقع‬
‫‪MySQL .http://www.mysql.com‬هو نظام قاعدة البيانات القياسي الواقعي لمواقع الويب التي تحتوي على‬
‫كميات هائلة من البيانات والمستخدمين النهائيين (مثل ‪ Facebook‬و ‪ Twitter‬و‪ . (Wikipedia‬نقدم الخيارات‬
‫المتاحة عند تطوير تطبيق ‪ PHP‬الذي يحتاج إلى التفاعل مع قاعدة بيانات‪ MySQL.‬من خالل تحديد واجهة‬
‫برمجة التطبيقات ‪ ،‬أوبما يسمى ‪ ، API‬الفئات والطرق والوظائف والمتغيرات التي سيحتاج التطبيق الخاص إلى‬
‫االتصال بها من أجل تنفيذ المهمة المطلوبة‪ .‬في حالة تطبيقات ‪ PHP‬التي تحتاج إلى التواصل مع قواعد البيانات ‪،‬‬
‫عادة ً ما يتم الكشف عن واجهات برمجة التطبيقات الضرورية عبر ملحقات‪.PHP‬‬
‫يمكن أن تكون واجهات برمجة التطبيقات )‪ (API‬إجرائية أو موجهة بالكائنات‪ .‬باستخدام واجهة برمجة التطبيقات‬
‫اإلجرائية ‪ ،‬يمكننا استدعاء الوظائف لتنفيذ المهام ‪ ،‬باستخدام واجهة برمجة التطبيقات )‪ (API‬الموجهة للكائنات ‪،‬‬
‫يمكنك إنشاء الفئات ثم استدعاء الطرق على الكائنات الناتجة‪ .‬من بين االثنين ‪ ،‬عادة ما تكون األخيرة هي الواجهة‬
‫المفضلة ‪ ،‬ألنها أكثر حداثة وتؤدي إلى رمز منظم بشكل أفضل‪.‬‬
‫إذا كان تطبيق ‪ PHP‬يحتاج إلى االتصال بخادم قاعدة البيانات ‪ ،‬فستحتاج إلى كتابة كود ‪ PHP‬ألداء أنشطة مثل‬
‫االتصال بخادم قاعدة البيانات ‪ ،‬واالستعالم عن قاعدة البيانات والوظائف األخرى المتعلقة بقاعدة البيانات‪ .‬البرنامج‬
‫مطلوب لتوفير واجهة برمجة التطبيقات التي سيستخدمها التطبيق ‪ ،‬وكذلك التعامل مع االتصال بين التطبيق الخاص‬
‫وخادم قاعدة البيانات ‪ ،‬وربما باستخدام مكتبات وسيطة أخرى عند الضرورة‪ .‬يُعرف هذا البرنامج بشكل عام باسم‬
‫الموصل ‪ ،‬ألنه يسمح لتطبيقك باالتصال بخادم قاعدة البيانات‪.‬‬
‫هناك ثالثة خيارات رئيسية لواجهة برمجة التطبيقات‪ API‬عند التفكير في االتصال بخادم قاعدة بيانات‪:MySQL‬‬
‫)‪• MySQLi (object-oriented‬‬
‫)‪• MySQLi (procedural‬‬
‫‪• PDO‬‬

‫لكل منها مزاياه وعيوبه‪ .‬يمكن الرجووع الى موقع ‪ MYSQL‬للتعرف على الجوانب الرئيسية لكل واجهة برمجة‬
‫تطبيقات‪.‬‬

‫ملحق ‪ MySQL‬الخاص بـ‪PHP‬‬


‫هذا هو االمتداد األصلي المصمم للسماح لك بتطوير تطبيقات ‪ PHP‬التي تتفاعل مع قاعدة بيانات ‪ MySQL.‬يوفر‬
‫امتداد ‪ mysql‬واجهة إجرائية وهو مخصص لالستخدام فقط مع إصدارات ‪ MySQL‬األقدم من ‪ .4.1.3‬يمكن‬
‫استخدام هذا االمتداد مع إصدارات ‪ MySQL 4.1.3‬أو أحدث ‪ ،‬ولكن لن تكون جميع ميزات خادم ‪MySQL‬‬
‫األحدث متاحة‪.‬‬

‫‪76‬‬ ‫اعداد د‪.‬عايض الشباطي ‪2019‬‬


‫‪Basic concepts in PHP‬‬ ‫‪V1.01IPCSIT‬‬

‫ملحوظة‪:‬إذا كنت تستخدم إصدارات ‪ MySQL 4.1.3‬أو أحدث ‪ ،‬فمن المستحسن استخدام امتداد ‪ mysqli‬بد ً‬
‫ال من ذلك‪.‬‬

‫امتداد ‪ mysqli‬في‪PHP‬‬
‫تم تطوير امتداد ‪ ، mysqli‬أو كما يُعرف أحيانًا ‪ ،‬االمتداد المحسن ‪ ، MySQL‬لالستفادة من الميزات الجديدة‬
‫الموجودة في إصدارات أنظمة ‪ MySQL 4.1.3‬واإلصدارات األحدث‪ ,‬تم تضمين ملحق ‪ mysqli‬في اإلصدار ‪5‬‬
‫من ‪ PHP‬واإلصدارات األحدث‪.‬‬
‫يحتوي االمتداد ‪ mysqli‬على عدد من الفوائد ‪ ،‬والتحسينات الرئيسية على امتداد ‪ Mysql‬هي‪:‬‬
‫• الواجهات الموجهة بالكائنات‪.‬‬
‫• دعم الصياغات المعدة والمتعددة‪.‬‬
‫• قدرات التصحيح المحسنة‪.‬‬

‫ملحوظة‪ :‬إذا كنت تستخدم إصدارات ‪ MySQL 4.1.3‬أو أحدث ‪ ،‬فمن المستحسن استخدام هذا االمتداد‪.‬‬
‫‪PDO MYSQL‬‬
‫‪ PHP Data Objects‬أو ‪ PDO‬هي طبقة تجريدية لقاعدة البيانات مخصصة لتطبيقات ‪ PHP‬توفر ‪ PDO‬واجهة‬
‫برمجة تطبيقات متسقة لتطبيق ‪ PHP‬بغض النظر عن نوع خادم قاعدة البيانات الذي سيتصل به التطبيق‪ .‬من‬
‫الناحية النظرية ‪ ،‬إذا كنت تستخدم ‪ ، PDO API‬فيمكنك تبديل خادم قاعدة البيانات الذي استخدمته ‪ ،‬من ‪Firebird‬‬
‫إلى ‪ ، MySQL‬وتحتاج فقط إلى إجراء تغييرات طفيفة على كود‪ PHP‬في حين أن ‪ PDO‬لها مزاياها ‪ ،‬مثل‬
‫الترتيب والسهولة وواجهة برمجة التطبيقات المحمولة ‪ ،‬فإن عيبها الرئيسي هو أنها ال تسمح لك باستخدام جميع‬
‫الميزات المتقدمة المتوفرة في أحدث إصدارات خادم ‪ MySQL‬على سبيل المثال ‪ ،‬ال تسمح ‪ PDO‬لك باستخدام‬
‫دعم ‪ MySQL‬لبيانات متعددة‪.‬‬
‫برنامج التشغيل االساسي ‪ MySQL‬الخاص بـ‪PHP‬‬
‫للتواصل مع خادم قاعدة بيانات ‪ ، MySQL‬يستخدم كل من ملحق ‪ mysql‬و ‪ mysqli‬و ‪ PDO MYSQL‬مكتبة‬
‫منخفضة المستوى تنفذ البروتوكول المطلوب‪ .‬في الماضي ‪ ،‬كانت المكتبة الوحيدة المتاحة هي مكتبة عميل‬
‫‪ ،MySQL‬والمعروفة باسم‪ . libmysqlient.‬ملحق ‪ MySQLi‬الحرف "‪ "i‬يعني محسنًا‬
‫هل يجب عليا استخدام ‪ MySQLi‬أو‪ PDO‬؟ إذا كنت بحاجة إلى إجابة قصيرة ‪ ،‬فستكون "أيًا ما تريد‪ ".‬لكل من‬
‫‪MySQLi‬و ‪ PDO‬مزاياها‪,‬ستعمل ‪ PDO‬على ‪ 12‬نظام قاعدة بيانات مختلف ‪ ،‬بينما ‪ MySQLi‬ستعمل فقط مع‬
‫قواعد بيانات ‪ MySQL.‬لذلك ‪ ،‬إذا كان عليك تبديل مشروعك الستخدام قاعدة بيانات أخرى ‪ ،‬فإن ‪ PDO‬تجعل‬
‫العملية سهلة‪ .‬ما عليك سوى تغيير سلسلة االتصال وبعض االستعالمات‪ .‬باستخدام ‪ ، MySQLi‬ستحتاج إلى إعادة‬
‫ضا واجهة برمجة‬
‫كتابة الكود بالكامل ‪ -‬االستعالمات المضمنة‪ .‬كالهما موجه للكائنات ‪ ،‬لكن ‪ MySQLi‬تقدم أي ً‬
‫تطبيقات إجرائية‪ .‬أمثلة على ‪ MySQL‬في بناء جملة ‪ MySQLi‬و‪ PDO‬نوضح ثالث طرق للعمل مع ‪ PHP‬و‬
‫‪.MySQL‬‬
‫)‪• MySQLi (object-oriented‬‬

‫‪77‬‬ ‫اعداد د‪.‬عايض الشباطي ‪2019‬‬


Basic concepts in PHP V1.01IPCSIT

• MySQLi (procedural)
• PDO
‫ عند‬، ‫ تلقائيًا في معظم الحاالت‬MySQLi ‫ يتم تثبيت ملحق‬Windows: ‫ و‬Linux ‫ لنظامي‬MySQLi‫تثبيت‬
. php5 mysql.‫تثبيت حزمة‬
http://php.net/manual/en/mysqli.installation.php‫ انتقل إلى‬، ‫للحصول على تفاصيل التثبيت‬
http://php.net/manual/en/pdo.installation.phP:‫ انتقل إلى‬، ‫ للحصول على تفاصيل التثبيت‬PDO‫تنزيل‬

MySQL‫االتصال بـ‬
‫ نحتاج إلى أن نكون قادرين على االتصال‬، MySQL ‫قبل أن نتمكن من الوصول إلى البيانات في قاعدة بيانات‬
:SERVER‫بـ‬
Example (MySQLi Object-Oriented)
<?php
$servername = "localhost";
$username = "username";
$password = "password";
// Create connection
$conn = new mysqli($servername, $username, $password);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully";
?>
‫ إذا كنت تريد التأكد‬.PHP 5.2.9 ‫ حتى‬$connect_error ‫ تم تعطيل‬:‫مالحظة حول المثال الموجه للكائنات أعاله‬
:‫ فاستخدم الكود التالي بدالً من ذلك‬، 5.3.0 ‫ و‬5.2.9 ‫ السابقة لإلصدارات‬PHP ‫من التوافق مع إصدارات‬
/ Check connection
if (mysqli_connect_error()) {
die("Database connection failed: " . mysqli_connect_error());
}
Example (MySQLi Procedural)
<?php
$servername = "localhost";
$username = "username";
$password = "password";
// Create connection
$conn = mysqli_connect($servername, $username, $password);
// Check connection
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
echo "Connected successfully";
?>

78 2019 ‫عايض الشباطي‬.‫اعداد د‬


‫‪Basic concepts in PHP‬‬ ‫‪V1.01IPCSIT‬‬

‫االتصال بال‪PDO‬‬
‫)‪Example (PDO‬‬
‫‪<?php‬‬
‫;"‪$servername = "localhost‬‬
‫;"‪$username = "username‬‬
‫;"‪$password = "password‬‬

‫{ ‪try‬‬
‫;)‪$conn = new PDO("mysql:host=$servername;dbname=myDB", $username, $password‬‬
‫‪// set the PDO error mode to exception‬‬
‫;)‪$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION‬‬
‫;"‪echo "Connected successfully‬‬
‫{ )‪} catch(PDOException $e‬‬
‫;)(‪echo "Connection failed: " . $e->getMessage‬‬
‫}‬
‫>?‬

‫في مثال ‪ PDO‬السابق‪ ،‬حددنا قاعدة بيانات )‪ (myDB‬تتطلب ان تكون قاعدة بيانات ‪ PDO‬جاهزة لالتصال بها‪.‬‬
‫إذا لم يتم تحديد قاعدة بيانات ‪ ،‬فسيتم استدعاء االستثناء‪ .‬تتمثل إحدى الفوائد لـ ‪ PDO‬في أنها تحتوي على فئة‬
‫استثناء للتعامل مع أي مشاكل قد تحدث في استعالمات قاعدة البيانات‪ .‬إذا تم طرح استثناء داخل كتلة }{ ‪، try‬‬
‫فسيتوقف البرنامج النصي عن التنفيذ ويتدفق مباشرة إلى كتلة } { )( ‪ catch‬األولى‪.‬‬
‫;)‪ setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION‬واستخدمت‬
‫الدالة )(‪ setAttribute‬لتعين خصائص على مرجع(متغير االتصال) قاعدة البيانات‪.‬يوجد الكثيرمن الخصائض‬
‫العامة المتاحة التي قد تستفيد بعض برامج التشغيل من الخصائض االضافية الخاصة بالتعريفات االخرى لقاعدة‬
‫البيانات ‪.‬مثال عندنا في المثال ‪ATTR_ERRMODE‬اإلبالغ عن األخطاء‪ERRMODE_EXCEPTION,‬‬
‫يمثل خطأ يتم بواسطة ‪ PDO‬ويفضل بل ويجب استخدامه بشكل دائم ‪.‬لالطالع على كثير من الخصائص يرجى‬
‫‪https://www.php.net/manual/en/pdo.setattribute.php‬‬ ‫زيارة الموقع االتي‪:‬‬

‫أغلق االتصال‬
‫سيتم إغالق االتصال تلقائيًا عند انتهاء البرنامج النصي‪ .‬إلغالق االتصال من قبل ‪ ،‬استخدم ما يلي‪:‬‬
‫‪MySQLi Object-Oriented:‬‬
‫;)(‪$conn->close‬‬
‫‪MySQLi Procedural:‬‬
‫;)‪mysqli_close($conn‬‬
‫‪PDO:‬‬
‫;‪$conn = null‬‬

‫األمثلة التالية تنشئ قاعدة بيانات باسم "‪ "myDB‬بالطرق الثالث ‪:‬‬

‫)‪Example (MySQLi Object-oriented‬‬

‫‪79‬‬ ‫اعداد د‪.‬عايض الشباطي ‪2019‬‬


Basic concepts in PHP V1.01IPCSIT

<?php
$servername = "localhost";
$username = "username";
$password = "password";
// Create connection
$conn = new mysqli($servername, $username, $password);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// Create database
$sql = "CREATE DATABASE myDB";
if ($conn->query($sql) === TRUE) {
echo "Database created successfully";
} else {
echo "Error creating database: " . $conn->error;
}
$conn->close();
?>
‫ يجب عليك فقط تحديد المعامالت الثالث األولى للكائن‬، ‫ عند إنشاء قاعدة بيانات جديدة‬:‫مالحظة‬
mysqli (servername, username and password)
:‫ مثل هذا‬، ‫ فقم بإضافة سلسلة فارغة إلى معامل اسم قاعدة البيانات‬، ‫إذا كان عليك استخدام منفذ معين‬
new mysqli("localhost", "username", "password", " ", port)
Example (MySQLi Procedural)
<?php
$servername = "localhost";
$username = "username";
$password = "password";
// Create connection
$conn = mysqli_connect($servername, $username, $password);
// Check connection
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
// Create database
$sql = "CREATE DATABASE myDB";
if (mysqli_query($conn, $sql)) {
echo "Database created successfully";
} else {
echo "Error creating database: " . mysqli_error($conn);
}

80 2019 ‫عايض الشباطي‬.‫اعداد د‬


Basic concepts in PHP V1.01IPCSIT

mysqli_close($conn);
?>
"myDBPDO":‫ التالي إلنشاء قاعدة بيانات باسم‬PDO ‫ مثال‬:‫مالحظة‬
Example (PDO)
<?php
$servername = "localhost";
$username = "username";
$password = "password";
try {
$conn = new PDO("mysql:host=$servername", $username, $password);
// set the PDO error mode to exception
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "CREATE DATABASE myDBPDO";
// use exec() because no results are returned
$conn->exec($sql);
echo "Database created successfully<br>";
} catch(PDOException $e) {
echo $sql . "<br>" . $e->getMessage();
}
$conn = null;
?>

‫يتم استخدام عبارة‬, ‫ كما تم انشاء قاعدة البيانات‬PDO‫ و‬MySQLi ‫ باستخدام‬MySQL ‫انشاء الجدول‬
‫" و‬id" :‫ بخمسة أعمدة‬، "MyGuests" ‫ سننشئ جدوالً باسم‬MySQL.‫إلنشاء جدول في‬CREATE TABLE
:"reg_date" ‫" و‬email" ‫" و‬lastname" ‫" و‬firstname"
:PHP ‫توضح األمثلة التالية كيفية إنشاء الجدول في‬

Example (MySQLi Object-oriented)


<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// sql to create table
$sql = "CREATE TABLE MyGuests (

81 2019 ‫عايض الشباطي‬.‫اعداد د‬


Basic concepts in PHP V1.01IPCSIT

id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,


firstname VARCHAR(30) NOT NULL,
lastname VARCHAR(30) NOT NULL,
email VARCHAR(50),
reg_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE
CURRENT_TIMESTAMP)";
if ($conn->query($sql) === TRUE) {
echo "Table MyGuests created successfully";
} else {
echo "Error creating table: " . $conn->error;
}
$conn->close();
?>
Insert ‫ادخال البيانات‬
‫ فيما يلي بعض قواعد بناء الجملة التي يجب‬.‫ يمكننا البدء في إضافة البيانات عليها‬، ‫بعد إنشاء قاعدة بيانات وجدول‬
:‫اتباعها‬
PHP‫ بلغة‬SQL ‫• يجب أن يتم اقتباس استعالم‬
SQL‫• يجب أن يتم اقتباس قيم السلسلة داخل استعالم‬
‫ بين عالمة اقتباس‬NULL ‫• يجب أال تكون القيم الرقمية والقيمة‬
MySQL:‫ إلضافة سجالت جديدة إلى جدول‬INSERT INTO ‫تُستخدم عبارة‬
INSERT INTO table_name (column1, column2, column3,...)
VALUES (value1, value2, value3,...)
‫" و‬firstname" ‫و‬: "id" ‫" بخمسة أعمدة‬MyGuests" ‫غا باسم‬ ً
ً ‫جدوال فار‬ ‫في االستعالم السابق أنشأنا‬
.‫ دعونا نمأل الجدول بالبيانات‬، ‫" اآلن‬reg_date" ‫" و‬email" ‫"و‬lastname"
‫ مع التحديث‬TIMESTAMP ‫"( أو‬id") ‫ مثل عمود‬AUTO_INCREMENT ‫ إذا كان العمود هو‬:‫مالحظة‬
‫ فال داعي ألن يتم تحديده في استعالم‬، ("reg_date") ‫ مثل عمود‬current_timesamp ‫االفتراضي الحالي لـ‬
"MyGuests" ‫ تضيف األمثلة التالية سجالً جديدًا إلى جدول‬.‫ القيمة تلقائيًا‬MySQL ‫؛ ستضيف‬SQL
Example (MySQLi Object-oriented)
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);

82 2019 ‫عايض الشباطي‬.‫اعداد د‬


Basic concepts in PHP V1.01IPCSIT

}
$sql = "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('John', 'Doe', 'john@example.com')";
if ($conn->query($sql) === TRUE) {
echo "New record created successfully";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
$conn->close();
?>

‫ المتعددة باستخدام‬SQL ‫ يجب تنفيذ عبارات‬PDO‫ او‬MySQLi ‫ باستخدام‬MySQL ‫أدخال سجالت متعددة في‬
:"MyGuests" ‫تضيف األمثلة التالية ثالثة سجالت جديدة إلى جدول‬, mysqli_multi_query ().‫دالة‬
Example (MySQLi Object-oriented)
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('John', 'Doe', 'john@example.com');";
$sql .= "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('Mary', 'Moe', 'mary@example.com');";
$sql .= "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('Julie', 'Dooley', 'julie@example.com')";
if ($conn->multi_query($sql) === TRUE) {
echo "New records created successfully";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
$conn->close();
?>
.‫ بفاصلة منقوطة‬SQL ‫الحظ أنه يجب فصل كل جملة‬

83 2019 ‫عايض الشباطي‬.‫اعداد د‬


‫‪Basic concepts in PHP‬‬ ‫‪V1.01IPCSIT‬‬

‫تحديد‪ Select‬البيانات باستخدام‪MySQLi‬‬


‫يحدد المثال التالي أعمدة المعرف‪ Id‬واالسم األول واالسم األخير من جدول ‪ MyGuests‬ويعرضها على‬
‫الصفحة‪:‬‬
‫)‪Example (MySQLi Object-oriented‬‬
‫‪<?php‬‬
‫;"‪$servername = "localhost‬‬
‫;"‪$username = "username‬‬
‫;"‪$password = "password‬‬
‫;"‪$dbname = "myDB‬‬
‫‪// Create connection‬‬
‫;)‪$conn = new mysqli($servername, $username, $password, $dbname‬‬
‫‪// Check connection‬‬
‫{ )‪if ($conn->connect_error‬‬
‫;)‪die("Connection failed: " . $conn->connect_error‬‬
‫}‬
‫;"‪$sql = "SELECT id, firstname, lastname FROM MyGuests‬‬
‫;)‪$result = $conn->query($sql‬‬
‫{ )‪if ($result->num_rows > 0‬‬
‫‪// output data of each row‬‬
‫{ ))(‪while($row = $result->fetch_assoc‬‬
‫;">‪echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br‬‬
‫}‬
‫{ ‪} else‬‬
‫;"‪echo "0 results‬‬
‫}‬
‫;)(‪$conn->close‬‬
‫>?‬
‫توضيح المثال السابق كاالتي‪:‬‬
‫أوالً ‪ :‬قمنا بإعداد استعالم ‪ SQL‬الذي يحدد أعمدة المعرف واالسم األول واالسم األخير من جدول ‪MyGuests.‬‬
‫يقوم السطر التالي من الكود بتشغيل االستعالم ويضع البيانات الناتجة في متغير يسمى‪$ result.‬‬
‫ثانيا‪:‬بعد ذلك ‪ ،‬تتحقق الدالة )( ‪ num_rows‬مما إذا كان هناك أكثر من صفر من الصفوف التي تم إرجاعها‪.‬‬
‫ثالثا‪:‬إذا تم إرجاع أكثر من صفر من الصفوف ‪ ،‬فإن الدالة )( ‪ fetch_assoc‬تضع جميع النتائج في مصفوفة‬
‫ترابطية يمكننا تكرارها‪ .‬تتكرر حلقة )( ‪ while‬خالل مجموعة النتائج واستخراج البيانات من االعمدة االتية‪، id :‬‬
‫‪.firstname,lastname.‬‬

‫مالحظة‪:‬‬
‫تجلب الدالة )( ‪ fetch_array () / mysqli_fetch_array‬صف نتيجة كمصفوفة ترابطية أو مصفوفة رقمية أو كليهما‪ .‬ونشير الى ان أسماء‬
‫الحقول التي يتم إرجاعها من هذه الدالة حساسة لحالة األحرف‪.‬‬
‫‪Syntax‬‬
‫‪Object oriented style:‬‬
‫)‪$mysqli_result -> fetch_array(resulttype‬‬

‫‪84‬‬ ‫اعداد د‪.‬عايض الشباطي ‪2019‬‬


Basic concepts in PHP V1.01IPCSIT

Procedural style:
mysqli_fetch_array(result,resulttype)
‫ أو‬mysqli_store_result () ‫ أو‬mysqli_query () ‫ يحدد معامل مجموعة النتائج الذي تم إرجاعه بواسطة‬.‫ مطلوبة‬:Result
mysqli_use_result ()
:‫ يمكن أن تكون إحدى القيم التالية‬.‫ يحدد نوع المصفوفة التي يجب ارجاعها‬.‫اختيارية‬:Resulttype
MYSQLI_ASSOC
MYSQLI_NUM
MYSQLI_BOTH)‫(هذا افتراضي‬
.‫ () صف نتيجة كمصفوفة ترابطية‬fetch_assoc () / mysqli_fetch_assoc ‫ايضا تجلب الدالة‬
Syntax
Object oriented style:
$mysqli_result -> fetch_assoc()
Procedural style:
mysqli_fetch_assoc(result)

mysqli_use_result)( ‫ () أو‬mysqli_store_result ‫ أو‬mysqli_query)( ‫ يحدد متغير مجموعة النتائج الذي تم إرجاعه بواسطة‬:Result
.‫ونشير الى ان أسماء الحقول التي يتم إرجاعها من هذه الدالة حساسة لحالة األحرف‬
https://www.php.net/manual/en/mysqli-result.fetch-assoc.php

‫ ويعرضها في‬MyGuests ‫ من جدول‬firstname,lastname ، Id :‫يقوم بتحديد االعمدة االتية‬: ‫المثال التالي‬


:HTML ‫جدول‬

Example (MySQLi Object-oriented)


<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "SELECT id, firstname, lastname FROM MyGuests";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
echo "<table><tr><th>ID</th><th>Name</th></tr>";
// output data of each row
while($row = $result->fetch_assoc()) {
echo "<tr><td>".$row["id"]."</td><td>".$row["firstname"]." ".$row["lastname"]."</td></tr>";
}
echo "</table>";

85 2019 ‫عايض الشباطي‬.‫اعداد د‬


Basic concepts in PHP V1.01IPCSIT

} else {
echo "0 results";
}
$conn->close();
?>
:‫ لحذف السجالت من جدول‬DELETE ‫حذف البيانات تُستخدم عبارة‬
DELETE FROM table_name
WHERE some_column = some_value
.‫ السجل أو السجالت التي يجب حذفها‬WHERE ‫ تحدد جملة‬DELETE: ‫ في بناء جملة‬WHERE ‫الحظ عبارة‬
‫ في جدول‬3 ‫ فسيتم حذف جميع السجالت! المثال التالي تحذف السجل رقم‬، WHERE ‫إذا حذفت جملة‬
:"MyGuests"

Example (MySQLi Object-oriented)


<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// sql to delete a record
$sql = "DELETE FROM MyGuests WHERE id=3";

if ($conn->query($sql) === TRUE) {


echo "Record deleted successfully";
} else {
echo "Error deleting record: " . $conn->error;
}
$conn->close();
?>

:‫بعد عملية الحذف سوف يظهر الجدول على النحو التالي‬

86 2019 ‫عايض الشباطي‬.‫اعداد د‬


Basic concepts in PHP V1.01IPCSIT

Update ‫تحديث البيانات‬


:‫ لتحديث السجالت الموجودة في جدول‬UPDATE ‫يتم استخدام عبارة‬
UPDATE table_name
SET column1=value, column2=value2,...
WHERE some_column=some_value
‫ السجل أو السجالت التي يجب‬WHERE ‫ تحدد جملة‬UPDATE: ‫ في بناء جملة‬WHERE ‫الحظ عبارة‬
Id=2 ‫ فسيتم تحديث جميع السجالت! المثال التالي لتحديث السجل الرقم‬،WHERE ‫ إذا حذفت‬.‫تحديثها‬
Example (MySQLi Object-oriented)
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "UPDATE MyGuests SET lastname='Doe' WHERE id=2";
if ($conn->query($sql) === TRUE) {
echo "Record updated successfully";
} else {
echo "Error updating record: " . $conn->error;
}
$conn->close();
?>

‫قيود االستعالم‬
Mysql ‫نورد بعض من القيود على استعالمات قواعد البيانات‬
‫ تُستخدم لتحديد عدد السجالت المراد‬LIMIT ‫ تحديد مجموعة سجالت بيانات من قاعدة بيانات باستخدام جملة‬:‫اوال‬
‫ افترض‬.‫ يمكن أن يؤثر إرجاع عدد كبير من السجالت على األداء‬.‫ وهي مفيدة جدًا في الجداول الكبيرة‬.‫إرجاعها‬
‫ بعد‬SQL ‫ سيبدو استعالم‬."order" ‫ (ضمناً) من جدول يسمى‬30 ‫ إلى‬1 ‫أننا نرغب في تحديد جميع السجالت من‬
:‫ذلك بالشكل التالي‬

87 2019 ‫عايض الشباطي‬.‫اعداد د‬


‫‪Basic concepts in PHP‬‬ ‫‪V1.01IPCSIT‬‬

‫;"‪$sql = "SELECT * FROM Orders LIMIT 30‬‬


‫ً‬
‫سجال‪ .‬ماذا لو أردنا تحديد السجالت من ‪ 16‬إلى ‪ 25‬يوفر ‪Mysql‬‬ ‫عند تنفيذ استعالم ‪ SQL‬السابق‪ ،‬سيعيد أول ‪30‬‬
‫ضا طريقة للتعامل مع هذا‪ :‬باستخدام‪ OFFSET.‬يقوم استعالم ‪ SQL‬االتي "إرجاع ‪ 10‬سجالت فقط ‪ ،‬بدأ من‬
‫أي ً‬
‫السجل ‪(OFFSET 15):"16‬‬
‫;"‪$sql = "SELECT * FROM Orders LIMIT 10 OFFSET 15‬‬
‫ضا استخدام صيغة أقصر لتحقيق نفس النتيجة‪:‬‬
‫يمكن أي ً‬
‫;"‪$sql = "SELECT * FROM Orders LIMIT 15, 10‬‬
‫الحظ أنه يتم عكس األرقام عند استخدام فاصلة‪.‬‬
‫ثانيا ‪ :‬الكثير من قواعد البيانات اليوم هي نظم إدارة قواعد بيانات عالئقية ( ‪Relational Database‬‬
‫‪ ) Management Systems‬تختصر في ‪ , RDBMS‬قواعد البيانات العالئقية هذه عبارة عن مجموعة من‬
‫الجداول أو نموذج من الجداول النموذجية المتعددة التي تحتوي على معلومات مترابطة ‪ .‬ربما تسمع ايضا ً الكثير‬
‫عن ‪ SQL‬وهي اختصار ل(‪ ) Structured Query Language‬وهي تسمح لك أن توحد هذه المعلومات من‬
‫الجداول المترابطة وبذالك تسمح لك بإنشاء وتحليل العالقات الجديدة ‪ .‬ونظرا الن قواعد البيانات العالئقية ذات بنية‬
‫معقدة فهي تحتاج احيانا الى عبارات استعالم خاصة السترداد المعلومات التي تحتاجها ‪,‬تستخدم اداوات الربط‬
‫‪ joins‬وهي استعالمات ‪ sql‬تستخدم على الجداول ذات المرجعية العامة الستخالص بيانات اكثر قابلية لالستخدام‬
‫من قواعد البياتاات العالئقية وتدعى اداة الربط االكثر استخدام ‪.,inner‬‬
‫;‪Select *from product ,cart where product.product_id=cart. product_id‬‬
‫اوممكن تكتب بالطريقة التالية‪:‬‬
‫;‪Select *from product left join cart on product.product_id=cart. product_id‬‬
‫الحظ انه تم استبدال الفاصلة بالكلمتين ‪ Left Join‬كما تم استبدال ‪ Where‬بالكلمة ‪, On‬ويجب مراعاة اي‬
‫الجداول سترد اوال عند عملية االستبدال بالكلمتين ‪.Left Join‬‬
‫واذا كان الجدولين في ‪ Left Join‬يمكن كتابة االستعالم كاالتي‪:‬‬
‫;)‪Select *from product left join cart using( product_id‬‬
‫ويمكن استخدام كلمة ‪ AS‬ليصبح االستعالم كالتالي‪:‬‬
‫;‪Select *from product AS P , cart AS C where P.product_id=C. product_id‬‬
‫ويوجد الكثير من الدوال واالدوات التي يمكن استخدامها على الجداول واالعمدة واالستعالمات الخاصة بالوقت‬
‫والتاريخ والتجميع والترتيب والحماية وغيرها‪ ,‬لالطالع علي بعضها يرجى زيارة موقع ‪.MYSQL‬‬
‫ثالثا ‪:‬معالجة االخطاء في ‪MYSQL‬‬
‫تعتبر معالجة االخطاء هامة للغاية عند التعامل مع قواعد البيانات ومن بين االخطاء نذكر منها‪:‬‬

‫‪88‬‬ ‫اعداد د‪.‬عايض الشباطي ‪2019‬‬


‫‪Basic concepts in PHP‬‬ ‫‪V1.01IPCSIT‬‬

‫فشل االتصال مع قاعدة البيانات ‪.‬‬ ‫•‬


‫فشل تحديد قاعدة البيانات‪.‬‬ ‫•‬
‫عدم القدرة على تنفيذ استعالم‬ ‫•‬
‫عدم استعادة اي نتيجة من االستعالم‬ ‫•‬
‫تعلمك الخبرة االسباب الكامنة وحتى تجعل برامجك النصية تقدم لك تقارير جيدة عن االخطاء حال وقوعها‬ ‫سوف‬
‫‪,‬يجب ان تستخدم الدالة ‪ mysqli_connect_error() ,connect_error, mysqli_error‬سوف يطبع رسالة‬
‫نصية عن الخطاء الذي اعادته ‪ . Mysql‬يوجد مصطلحان خاصة خاصان بلغة ‪ PHP‬يمكن استخدامهما وهما‬
‫)(‪ die‬و @‪.‬‬
‫شفرة االتصال ;))(‪ $dbc=mysqli_connect(" "," "," ") die(mysqli_connect_error‬كقاعدة عامة‬
‫استخدام )(‪ die‬مع اي دالة يعتبر نجاحه الزاميا التمام تنفيذ البرنامج النصي مثل االتصال مع ‪ Mysql‬وتحديد‬
‫قاعدة البيانات وتستخدم @ مع الدوال التي قد تسبب مشكلة ال تستلزم ايقاف البرنامج النصي الستخدام معالجة‬
‫االخطاء افتح الملف االتصال مع قواعد البيانات واضف كال من )(‪or die() mysqli_connect_error‬‬
‫‪$dbc=@mysql_connect(" "," "," ") or die(mysqli_connect_error() ('could not connect to‬‬
‫))(‪mysql:'. mysqli_connect_error‬‬
‫نظرا الن التابع يمكن ان ياخذ سلسلة نصية وقد استخدمنا المعامل @ لحذف رسالة الخطاء التي قد تطبعها ‪php‬‬
‫تلقائيا ‪.‬يمثل الدالة )(‪ exit‬بديال عن )(‪die‬‬

‫انشاء تطبيقات الويب باستخدام ‪PHP and MYSQL‬‬


‫ان العصر الحالي عصر االنظمة الحاسوبية التي احدثت ثورة معلوماتية في عالم الحوسبة قللت التكاليف والوقت‬
‫والجهد ونتج عن استخدامها دقة في النتائج وجودة المنتج وتميز في االعمال ‪,‬حيث كانت االنظمة تعمل على نظام‬
‫الويندوز كتطبيق سطح مكتب ‪,‬اال انه مع ظهور الويب اصبحت االنظمة تتحول الى انظمة شبكية عبر االنترنت مما‬
‫يزيد االنظمة سهولة التعامل معها عن بعد النجاز االعمال وادراتها ومازالت الدراسات الى وقتنا الحالي تبحث عن‬
‫امكانية تحويل االنظمة الكبيرة الى العمل على شبكات االنترنت وهذا يتطلب الى انشاء تطبيقات الويب لبعض المهام‬
‫واالعمال التي يحتاجها سوق العمل واصحاب الشركات والمؤسسات باستخدام تقنيات ولغات وادوات تصميم‬
‫صفحات الويب ‪,‬حيث وقد تطرقنا سابقا الى لغة ‪ PHP‬ونظام ادارة قواعد البيانات ‪ MYSQL‬لمعالجات البيانات‬
‫النصية وسنتطرق في هذا الجزء توضيح في انشاء صفحات ويب بلغة ‪ PHP‬لمعالجة مدخالت نماذج هذه‬
‫الصفحات لتخزينها وادارتها بقواعد البيانات ‪,MYSQL‬وقبل البدء بانشاء اي تطبيق البد من تحديد ماهو المطلوب‬
‫من التطبيق؟ وماذا يريد والمقصود منه وتوضيح المهام واالعمال بوضوح تام ويجب وضع تحليل وتصميم‬
‫للتطبيق كفكرة اولية كما يتطلب ت حديد الخطوات االولية لتجنب الوقوع بالخطاء وال بد من وضع هذه االسئلة‬
‫واالستفسارات حتى يكون الهدف واضح من انشاء التطبيق وتكون الفكرة والعمل واضح وهي من اهم االعمال في‬

‫‪89‬‬ ‫اعداد د‪.‬عايض الشباطي ‪2019‬‬


‫‪Basic concepts in PHP‬‬ ‫‪V1.01IPCSIT‬‬

‫بناء تطبيقات الويب‪ .‬مثال تطبيق تسجيل الدخول ‪,‬نحن كل يوم نستخدم االنترنت ونرى الكثير من الصفحات ومنها‬
‫نموذج تسجيل الدخول(تسجيل المستخدم) والذي معظم تطبيقات تسجيل الموقع تم االنشاء باستخدام ‪PHP‬و‬
‫‪ MYSQL‬مثل ‪FACEBOOK ,TWETTER‬وغيره من النماذج‪.‬‬
‫فيما يلي خطوات انشاء صفحة تسجيل الدخول باستخدام تحوي صفحة تسجيل الدخول وتتضمن صفحات اخرى‪:‬‬
‫صفحة التسج يل ‪,‬الخروج ‪,‬لوحة التحكم تحوي بيانات التسجيل باالضافة الى عملية الحذف والتعديل ‪,‬ونذكر‬
‫بااختصاربانشاء صفحات التسجيل مع الشفرة المصدرية كاالتي‪:‬‬

‫انشاء قاعدة بيانات باسم ‪ Register‬بالدخول الى ‪ phpmyadmin‬وانشاءها‬

‫او الضغط على رابط ‪ SQL Command‬وكتابة استعالم االنشاء ‪ ,‬بعد إنشاء قاعدة البيانات بنجاح ‪ ،‬االن إنشاء‬
‫جدوال قاعدة البيانات ‪ ،‬يمكنك إنشاء الجدول يدويًا او من خالل ‪ .SQL Command‬جدولي المستخدمين وسجل‬
‫جديد وشفرة ‪ SQL‬النشاء الجدولين هي‪:‬‬
‫جدول المستخدمين‬
‫( `‪CREATE TABLE IF NOT EXISTS `users‬‬
‫‪`id` int(11) NOT NULL AUTO_INCREMENT,‬‬
‫‪`username` varchar(50) NOT NULL,‬‬
‫‪`email` varchar(50) NOT NULL,‬‬
‫‪`password` varchar(50) NOT NULL,‬‬
‫‪`trn_date` datetime NOT NULL,‬‬
‫)`‪PRIMARY KEY (`id‬‬
‫;)‬
‫جدول سجل جديد‬
‫( `‪CREATE TABLE `new_record‬‬
‫‪`id` int(11) NOT NULL AUTO_INCREMENT,‬‬
‫‪`trn_date` datetime NOT NULL,‬‬
‫‪`name` varchar(50) NOT NULL,‬‬
‫‪`age` int(11) NOT NULL,‬‬
‫‪`submittedby` varchar(50) NOT NULL,‬‬
‫;))`‪PRIMARY KEY (`id‬‬

‫االتصال بقاعدة البيانات‬


‫انشاء ملف اتصال بقاعدة بيانات باسم ‪ connect.php‬يحوي على الشفرة التالية ‪:‬‬
‫‪connect.php‬‬

‫‪<?php‬‬

‫‪90‬‬ ‫اعداد د‪.‬عايض الشباطي ‪2019‬‬


Basic concepts in PHP V1.01IPCSIT

$con = mysqli_connect("localhost","root","","register");
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
?>
‫إنشاء ملف التحقق من الدخول‬
.‫لألمان‬ session ‫ ينشئ هذا الملف مع استخدام‬.‫" ويكتب الشفرة التالية‬auth.php" ‫انشاء ملفًا باسم‬
auth.php
<?php
session_start();
if(!isset($_SESSION["username"])){
header("Location: login.php");
exit(); }
?>
‫إنشاء صفحة التسجيل‬
‫ استمارة التسجيل موضحة‬PHP‫ ودوال الـ‬HTML & CSS ‫ بشكل أساسي باستخدام‬.‫إنشاء استمارة التسجيل‬
:‫التالي‬ ‫بالشكل‬

‫” لمعالجة بيانات النموذج‬registration.php“ ‫ باسم‬Php ‫بعد انشاء نموذج استمارة التسجيل البد من انشاء ملف‬
:‫بحيث تكون شفرة المعالجة كاالتي‬

registration.php
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>‫<تسجيل جديد‬/title>
<link rel="stylesheet" href="style.css" />
</head>
<body>
<?php

91 2019 ‫عايض الشباطي‬.‫اعداد د‬


Basic concepts in PHP V1.01IPCSIT

require('db.php');
if (isset($_REQUEST['username'])){
$username = stripslashes($_REQUEST['username']);
$email = stripslashes($_REQUEST['email']);
$password = stripslashes($_REQUEST['password']);
$trn_date = date("Y-m-d H:i:s");
$query = "INSERT into `users` (username, password, email, trn_date)
VALUES ('$username', '".md5($password)."', '$email', '$trn_date')";
$result = mysqli_query($con,$query);
if($result){
echo "<div class='form'>
<h3>‫ تم تسجيلك بنجاح‬.</h3>
<br/>‫< اضعط هنا‬a href='login.php'>‫<للدخول‬/a></div>";
}
}else{
?>
<form class="login" action="" method="post">
<h1 class="login-title">‫<تسجيل جديد‬/h1>
<input type="text" class="login-input" name="username" placeholder="Username" required />
<input type="text" class="login-input" name="email" placeholder="Email Adress">
<input type="password" class="login-input" name="password" placeholder="Password">
<input type="submit" name="submit" value="‫ "تسجيل‬class="login-button">
<p class="login-lost">‫< انت مسجل بالفعل اضغط هنا‬a href="login.php">‫<للدخول‬/a></p>
</form>
<?php } ?>
</body>
</html>
.
‫وتحوي ايضا رابط تسجيل جديد‬, ‫صفحة الدخول تتطلب اسم المستخدم وكلمة المرور في حال كان التسجيل سابقا‬
‫اذا كانت الزيارة االولى للصفحة لتسجيل الدخول كمستخدم جديد يجب الضغط على رابط تسجيل جديد وادخال‬
‫البيانات كما وضحنا بالشكل السابق النموذج التسجيل والشكل التالي نموذج دخول الصفحة او التطبيق للدخول الى‬
.‫لتوضيح الية الدخول واضافة بيانات وتحديث وحذفها‬. dashboard ‫لوحة تحكم‬

92 2019 ‫عايض الشباطي‬.‫اعداد د‬


Basic concepts in PHP V1.01IPCSIT

‫ لمعالجة البيانات والتاكد منها وتكتب‬login.php ‫بالشكل السابق كما هو واضح نموذج دخول يتطلب انشاء ملف‬
:‫ في الملف المذكور كاالتي‬PHP ‫شفرة‬

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>‫<تسجيل الدخول‬/title>
<link rel="stylesheet" href="style.css" />
</head>
<body dir=rtl>
<?php
require('db.php');
session_start();
if (isset($_POST['username'])){
$username = stripslashes($_REQUEST['username']);
$password = stripslashes($_REQUEST['password']);
$query = "SELECT * FROM `users` WHERE username='$username'
and password='".md5($password)."'";
$result = mysqli_query($con,$query) or die(mysql_error());
$rows = mysqli_num_rows($result);
if($rows==1){
$_SESSION['username'] = $username;
header("Location: index.php");
}else{
echo "<div class='form'>
<h3>Username/password ‫غير صحيح‬.</h3>

93 2019 ‫عايض الشباطي‬.‫اعداد د‬


Basic concepts in PHP V1.01IPCSIT

<br/>‫< اضغط هنا لتسجيل‬a href='login.php'>‫<الدخول‬/a></div>";


}
}else{
?>
<form class="login" action="" method="post" name="login">
<h1 class="login-title">www.tssy.com |‫< تسجيل‬/h1>
<input type="text" class="login-input" name="username" placeholder="Username"
autofocus>
<input type="password" class="login-input" name="password"
placeholder="Password">
<input type="submit" value="‫ "دخول‬name="submit" class="login-button">
<p class="login-lost">‫<اضغط هنا‬a href="registration.php">‫<تسجيل جديد‬/a></p>
</form>
<?php } ?>
</body>
</html>

‫وتمتلك خصائص اخرى يمكن الرجوع اليها من خالل الرابط‬,‫ توجيه المتصفح لموقع آخر او صفحة اخرى في نفس الموقع‬header()
https://www.php.net/manual/en/function.header.php

‫ للصفحة االساسية للدخول او الوصول الى الصفحات‬php ‫ وتكتب شفرة‬index.php ‫انشاء صفحة البدء االساسية‬
:‫االخرى كاالتي‬

index.php
<?php
include("auth.php");
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>‫< اهال وسهال‬/title>
<link rel="stylesheet" href="style.css" />
</head>
<body>
<div class="form">
<h1 > ‫?< اهال‬php echo $_SESSION['username']; ?>!</h1>
<p >This is your secured index.</p>
<p><a href="dashboard.php">‫< لوحة تحكم‬/a></p>
<a href="logout.php">‫<خروج‬/a>
</div>
</body>
</html>

94 2019 ‫عايض الشباطي‬.‫اعداد د‬


Basic concepts in PHP V1.01IPCSIT

‫ عرض السجالت ورابط الخروج حيث‬,‫ التي تحتوي على روابط اضافة سجل جديد‬Dashboard.php ‫صفحة‬
:‫شفرة الصفحة تبدو كاالتي‬
Dashboard.php
<?php
require('db.php');
include("auth.php");
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>‫<لوحة تحكم‬/title>
<link rel="stylesheet" href="style.css" />
</head>
<body>
<div class="form">
<p>‫<لوحة تحكم‬/p>
<p><a href="index.php">‫<الصفحة الرئيسية‬/a><p>
<p><a href="insert.php">‫<اضافة سجل جديد‬/a></p>
<p><a href="view.php">‫<عرض السجالت‬/a><p>
<p><a href="logout.php">‫<خروج‬/a></p>
</div>
</body>
</html>

‫ لمعالجة النموذج وتكتب‬php ‫ تتطلب اوال تصميم نموذج االدخال وشفرة‬insert.php ‫صفحة ادخال البيانات‬
:‫الشفرة مع التصميم في ملف كاالتي‬
insert.php
<?php
require('db.php');
include("auth.php");
$status = "";
if(isset($_POST['new']) && $_POST['new']==1)
{
$trn_date = date("Y-m-d H:i:s");
$name =$_REQUEST['name'];
$age = $_REQUEST['age'];
$submittedby = $_SESSION["username"];
$ins_query="insert into new_record (`trn_date`,`name`,`age`,`submittedby`) values
('$trn_date','$name','$age','$submittedby')";
mysqli_query($con,$ins_query) or die(mysql_error());
$status = "‫تمت االضافة بنجاح‬.</br></br><a href='view.php'>‫< عرض السجالت‬/a>";
}?>

95 2019 ‫عايض الشباطي‬.‫اعداد د‬


Basic concepts in PHP V1.01IPCSIT

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Insert New Record</title>
<link rel="stylesheet" href="css/style.css" />
</head>
<body>
<div class="form">
<p><a href="dashboard.php">‫<لوحة تحكم‬/a> | <a href="view.php">‫<عرض السجالت‬/a> | <a
href="logout.php">‫<خروج‬/a></p>
<div>
<h1>‫<اضف سجل جديد‬/h1>
<form name="form" method="post" action="">
<input type="hidden" name="new" value="1" />
<p><input type="text" name="name" placeholder="Enter Name" required /></p>
<p><input type="text" name="age" placeholder="Enter Age" required /></p>
<p><input name="submit" type="submit" value="‫ "ارسال‬/></p>
</form>
<p style="color:#FF0000;"><?php echo $status; ?></p>
<br /><br /><br /><br />
</div>
</div>
</body>
</html>

:‫ لعرض السجالت المضافة تكتب شفرة عرض السجالت في ملف كاالتي‬view.php ‫صفحة عرض السجالت‬
view.php
<?php
require('db.php');
include("auth.php");
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>‫<عرض السجالت‬/title>
<link rel="stylesheet" href="css/style.css" />
</head>
<body>
<div class="form">
<p><a href="index.php">‫<الصفحة الرئيسية‬/a> | <a href="insert.php">‫<اضف سجل جديد‬/a> |
<a href="logout.php">‫<خروج‬/a></p>

96 2019 ‫عايض الشباطي‬.‫اعداد د‬


Basic concepts in PHP V1.01IPCSIT

<h2>‫<عرض السجالت‬/h2>
<table width="100%" border="1" style="border-collapse:collapse;">
<thead><tr><th><strong>S.No</strong></th><th><strong>Name</strong></th>
<th><strong>Age</strong></th><th><strong>Edit</strong></th><th><strong>Delete<
/strong></th></tr>
</thead>
<tbody>
<?php
$count=1;
$sel_query="Select * from new_record ORDER BY id desc;";
$result = mysqli_query($con,$sel_query);
while($row = mysqli_fetch_assoc($result)) { ?>
<tr><td align="center"><?php echo $count; ?></td>
<td align="center"><?php echo $row["name"]; ?></td>
<td align="center"><?php echo $row["age"]; ?></td>
<td align="center"><a href="edit.php?id=<?php echo $row["id"]; ?>">‫<تحديث‬/a></td>
<td align="center"><a href="delete.php?id=<?php echo $row["id"];
?>">‫<حذف‬/a></td></tr>
<?php $count++; } ?>
</tbody>
</table>
<br /><br /><br /><br />
</div>
</body>
</html>

:‫وتبدو صفحة عرض السجالت بالشكل التالي‬

:‫ لتحديث السجالت وتكتب شفرة التحديث في ملف كاالتي‬edit.php ‫صفحة تحديث السجالت‬
edit.php
<?php
require('db.php');
include("auth.php");
$id=$_REQUEST['id'];
$query = "SELECT * from new_record where id='".$id."'";
$result = mysqli_query($con, $query) or die ( mysqli_error());
$row = mysqli_fetch_assoc($result);?>

97 2019 ‫عايض الشباطي‬.‫اعداد د‬


Basic concepts in PHP V1.01IPCSIT

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>‫<تحديث‬/title>
<link rel="stylesheet" href="css/style.css" />
</head>
<body>
<div class="form">
<p><a href="dashboard.php">‫<لوحة تحكم‬/a> | <a href="insert.php">‫<اضف سجل جديد‬/a> |
<a href="logout.php">‫<خروج‬/a></p>
<h1>‫<تحديث سجل‬/h1>
<?php
$status = "";
if(isset($_POST['new']) && $_POST['new']==1)
{
$id=$_REQUEST['id'];
$trn_date = date("Y-m-d H:i:s");
$name =$_REQUEST['name'];
$age =$_REQUEST['age'];
$submittedby = $_SESSION["username"];
$update="update new_record set trn_date='".$trn_date."', name='".$name."',
age='".$age."', submittedby='".$submittedby."' where id='".$id."'";
mysqli_query($con, $update) or die(mysqli_error());
$status = "‫تم التحديث بنجاح‬. </br></br><a href='view.php'>‫<عرض السجل المحدث‬/a>";
echo '<p style="color:#FF0000;">'.$status.'</p>';
}else {
?>
<div>
<form name="form" method="post" action="">
<input type="hidden" name="new" value="1" />
<input name="id" type="hidden" value="<?php echo $row['id'];?>" />
<p><input type="text" name="name" placeholder="Enter Name" required
value="<?php echo $row['name'];?>" /></p>
<p><input type="text" name="age" placeholder="Enter Age" required value="<?php
echo $row['age'];?>" /></p>
<p><input name="submit" type="submit" value="‫ "تحديث‬/></p>
</form>
<?php } ?>
<br /><br /><br /><br />
</div>
</div>
</body>

98 2019 ‫عايض الشباطي‬.‫اعداد د‬


Basic concepts in PHP V1.01IPCSIT

</html>
‫ الى استعالم حذف‬update ‫ملف الحذف والذي يشبه عملية التحديث فقط يحتاج الى تغير من استعالم تحديث‬
:‫ وتبدو شفرة الملف على النحو االتي‬delete
<?php
require('db.php');
$id=$_REQUEST['id'];
$query = "DELETE FROM new_record WHERE id=$id";
$result = mysqli_query($con,$query) or die ( mysqli_error());
header("Location: view.php");
?>

:‫ وتبدو شفرة ملف الخروج على النحو االتي‬logout.php ‫ملف الخروج‬


logout.php
<?php
session_start();
if(session_destroy())
{
header("Location: login.php");
}
?>
:‫ النحو التالي‬style.css ‫ ويكتب الملف‬,‫ على الصفحات المذكورة سابقا‬css ‫واخيرا نضيف ملف‬

style.css
body {
background: #2d343d;
}
.login {
margin: 20px auto;
width: 300px;
padding: 30px 25px;
background: white;
border: 1px solid #c4c4c4;
}
h1.login-title {
margin: -28px -25px 25px;
padding: 15px 25px;
line-height: 30px;
font-size: 25px;
font-weight: 300;
color: #ADADAD;
text-align:center;
background: #f7f7f7;
}
.login-input {

99 2019 ‫عايض الشباطي‬.‫اعداد د‬


Basic concepts in PHP V1.01IPCSIT

width: 285px;
height: 50px;
margin-bottom: 25px;
padding-left:10px;
font-size: 15px;
background: #fff;
border: 1px solid #ccc;
border-radius: 4px;
}
.login-input:focus {
border-color:#6e8095;
outline: none;
}
.login-button {
width: 100%;
height: 50px;
padding: 0;
font-size: 20px;
color: #fff;
text-align: center;
background: #f0776c;
border: 0;
border-radius: 5px;
cursor: pointer;
outline:0;
}
.login-lost
{
text-align:center;
margin-bottom:0px;
}
.login-lost a
{
color:#666;
text-decoration:none;
font-size:13px;
}
.form{
text-align: center;
color: white;
}
.form a {
text-decoration: none;

100 2019 ‫عايض الشباطي‬.‫اعداد د‬


‫‪Basic concepts in PHP‬‬ ‫‪V1.01IPCSIT‬‬

‫;‪color: red‬‬
‫}‬
‫{ ‪.form a:hover‬‬
‫;‪font-size: 20px‬‬
‫;‪color: aqua‬‬
‫}‬
‫انشاء صفحة بحث على قاعدة بيانات‬
‫وجود ميزة بحث على موقع الويب مفيدًا لمساعدة المستخدمين في العثور على ما يبحثون عنه بالضبط‪ .‬يمكن أن‬
‫تتراوح محركات البحث من البسيط إلى المعقد‪ , .‬فمحرك البحث يعتبر األداة المثالية للوصول السريع لما يبحث عنه‬
‫زائر موقع‪ .‬ولعل أهم شىء فى برمجة أي موقع ويب هو سهولة االستخدام من قبل الزائر‪.‬‬
‫يفترض أن جميع البيانات التي تريد أن تكون قابلة للبحث مخزنة في قاعدة بيانات ‪.MySQL‬عملية البحث في‬
‫الصفحة التي سوف ننشأها ال تحتوي على أي خوارزميات معقدة – بل انه مجرد استعالم بسيط ‪ ،‬ولكنه يعمل من‬
‫أجل البحث األساسي ويعتبر بمثابة نقطة انطالق إلنشاء نظام بحث أكثر تعقيدًا‪ .‬هذه الصفحة تتطلب اتباع الخطوات‬
‫التالية‪:‬‬
‫اوال‪ :‬انشاء قاعدة بيانات يُنشئ الكود أدناه قاعدة بيانات الستخدامها أثناء العمل من خالل الصفحة‪:‬‬

‫‪CREATE DATABASE IF NOT EXISTS `shikin` DEFAULT CHARACTER SET utf8 COLLATE‬‬
‫;‪utf8_bin‬‬
‫;`‪USE `shikin‬‬
‫`‪-- Table structure for table `data‬‬
‫‪--‬‬
‫( `‪CREATE TABLE IF NOT EXISTS `data‬‬
‫‪`id` int(11) NOT NULL,‬‬
‫‪`name` varchar(30) DEFAULT NULL‬‬
‫;‪) ENGINE=InnoDB AUTO_INCREMENT=111 DEFAULT CHARSET=latin1‬‬

‫ثانيا‪:‬نموذج بحث ‪HTML‬‬


‫ينشئ كود ‪ HTML‬هذا النموذج الذي سيستخدمه المستخدمون للبحث‪ .‬يوفر مساحة إلدخال ما يبحثون عنه ‪ ،‬وقائمة‬
‫منسدلة حيث يمكنهم اختيار الحقل الذي يبحثون فيه (االسم األول أو االسم األخير أو الملف الشخصي‪ ).‬يرسل‬
‫النموذج البيانات مرة أخرى إلى نفسه باستخدام ‪ ) ( PHP_SELF‬وظيفة‪ .‬هذا الرمز ال يدخل داخل العالمات ‪ ،‬بل‬
‫باألحرى فوقها أو تحتها‪.‬‬
‫>‪<html‬‬
‫>‪<title>PHP MYSQL SEARCH ENGINE</title‬‬
‫>‪<head‬‬
‫>‪</head‬‬
‫>‪<body‬‬

‫‪101‬‬ ‫اعداد د‪.‬عايض الشباطي ‪2019‬‬


Basic concepts in PHP V1.01IPCSIT

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


<center><h3>Search Mysql Database</h3></center>
<center><table>
<tr>
<td>Search</td>
<td><input type="text" name="name" size="50"></td>
<td><input type="submit" name="submit"></td>
</tr>
</table></center>
</form>
</body>
</html>

PHP ‫ كود‬:‫ثالثا‬
‫ يظهر تفصيل الكود مع‬.‫ في الملف حسب تفضيالتك‬HTML ‫يمكن وضع هذا الشفرة إما أعلى أو أسفل نموذج‬
.html

<?php
// Establish mysql connection
$con = @new mysqli('localhost', 'root', '', 'shik'); //Please change the server credential
if ($con->connect_error) {
echo "Error: " . $con->connect_error;
exit();
}
echo 'Connected to MySQL';
echo '<br />';

// Run Query
if($_REQUEST['submit']){
$name = $_POST['name'];
if(empty($name)){
$make = '<h4>You must type a word to search!</h4>';
}else{
$make = '<h4>No match found!</h4>';
$select = "SELECT * FROM data WHERE name LIKE '%$name%'";
$result = mysqli_query($con, $select);
while ($row = mysqli_fetch_array($result))
{
echo $row['name'];
echo '<br />';
}}
// Close mysql connection
mysqli_close($con);
}
?>

102 2019 ‫عايض الشباطي‬.‫اعداد د‬

You might also like