Professional Documents
Culture Documents
01IPCSIT
المقدمة
عصر صفحات الويب االستاتيكية قد انتهت ,فقد كان الويب لسنوات عديدة خلت ال يعدو عن مجال ترتبط فيه
صفحات HTMLالبسيطة معا ً لتشكل موقعا ً .أما اليوم ،فقد بات المستخدمون يتوقعون صفحات مثيرة يتم تحديثها
بشكل متكرر ،وبحيث توفر تجربة مخصصة لكل مستخدم .وفي الوقت نفسه ،يريد مسؤولو مواقع الويب أن تكون
هذه األخيرة سهلة التحديث والصيانة لهذه األسباب مجتمعة وأخرى غيرها ،لم يعد بناء موقع بإستخدام ملفات
HTMLستاتيكية مقبوالً أبدا ً .لقد أصبح الويب اآلن موطنا ً لتطبيقات الويب الديناميكية المقادة بقواعد البيانات في
غالبيتها .
هناك نوعين من المواقع حاليا :-مواقع تابثة:وهي مواقع تعتمد في الغالب في برمجتها على لغة HTMLوتقنية
CSSوتتميز بكونها سهلة لقصور وظيفته التي تكمن في عرض محتوى ما فقط) صور ،نصوص ( ،وكما ان تغيير
محتوى هذه المواقع يتطلب عناءا ومشقة اكبر حيث يضطر مبرمجوا هذه المواقع الى اعادة فتح كود صفحات
الموقع والتعديل فيتم بعد ذلك رفع ملفات الموقع من جديد بعد الغاء الملفات السابقة طبعا او تحديثها.
-مواقع ديناميكية :مميزات عديدة وخصائص تحكم اكثر فاعلية وقوة ،وتعتمد هذه المواقع اضافة على HTMLو
CSSعلى لغات برمجة اخرى مثل PHPو MYSQLمما يجعلها متطورة حيث تسمح بخلق تواصل بين الزائر و
الموقع ،وايضا تسهيل عملية تغيير او اضافة او حذف محتوى.
ماهي مواقع الويب الديناميكية ؟
تمثل مواقع الويب الديناميكية كائنات مرنة وقوية ،ويمكننا وصفها كتطبيقات بدالً من مواقع فهي :ـ
ـ تستجيب لوسطاء مختلفين ( كالتوقيت والتاريخ وإصدار المستعرض الذي يستخدمه الزائر ).
ـ غالبا ً ما تمتلك واجهة يمكن للمسؤولين من خاللها إدارة المحتوى .
ـ تمتلك " ذاكرة " ،مما يسمع بانتساب المستخدمين وتسجيل دخولهم والتجارة اإللكترونية وما شابه من عمليات .
ـ سهلة الصيانة والترقية والبناء إعتمادا ً عليها .
توجد عدة تكنولوجيات إلنشاء مواقع الويب الديناميكية ،ولعل أكثرها رواجا ً PHPو Asp ,من Microsoft
هذا وال تعتمد مواقع الويب الديناميكية على قاعدة بيانات بالضرورة ،ولكن أغلبها كذلك خاصة وأن تطبيقات قواعد
البيانات ( مثل ) MySQLتتوفر بتكلفة بسيطة أو بدون تكلفة على اإلطالق .
االتصال بموقع عبر االنترنت :عادة حينما نريد زيارة موقع معين موجودة على الشبكة العنكبوتية ،فاننا نفتح
المتصفح الموجود لدينا ،مثل Opera ، Safari، Fierfox،Internet Explorerاو اي متصفح اخر ،ثم نقوم
بكتابة عنوان الموقع ،فيظهر الموقع إن كان موجودا.
ان عملية االتصال هذه اعتمدت باالساس على االنترنت ،حيث ان هذه االخيرة عبارة عن شبكة من اجهزة الكمبيوتر
تنقسم الى قسمين :-اجهزة كمبيوتر خاصة بالزوار ،يعني جهازك انت الذي سيمكنك من االتصال بالموقع الذي
تريده .-واجهزة كمبيوتر اخرى قوية عبارة عن خوادم )(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تضخما ً أسا ً في اإلستخدام منذ اختراعها ،وقد تغلبت حديثا ً على ASPكأكثر لغات البرمجة
النصية انتشارا ً واستخداما ً اليوم .
PHP
يختلف ذلك عن حالة موقع HTMLستاتيكي ،والذي عندما يتم فيه إنشاء طلب ،يرسل الملقم بيانات HTML
إلى مستعرض الويب ليس إال ،وبذلك ال يحدث أي تفسير من جهة الملقم لهذه البيانات ( الشكل . ) 3وعليه ال
يحلظ المستخدم النهائي ومستعرض الويب أي فرق بين الشكل الذي تبدو عليه الصفحة home . htmlوالصفحة
home .phpإذ إن الفرق يكمن في كيفية إنشاء محتوى الصفحة .
تعتبر www.mysql ، MYSQLقاعدة البيانات المفتوحة المصدر األكثر إنتشارا ً ،بل ويعتبرها البعض
األفضل على اإلطالق .في الواقع ،ومع إضافة اإلصدار 4منها لمميزات جديدة عديدة ويوجد حاليا اصدارات اكثر
حداثة ،فقد أصبحت MYSQLمنافسا ً قويا ً لقواعد البيانات القوية مثل SQL Server , Oracleوكما PHP
تقدم MYSQLأدا ًء مميزا ً وقابلية للنقل ووثوقية عالية ،وهي بدون تكلفة تقريبا ً .
تم تطوير MYSQLودعمها من قبل ، MYSQL ABوهي شركة سويدية ،تمثل MYSQLنظام إدارة
قواعد بيانات ( ) DBMSلقواعد البيانات العالئقية ،لذلك تعتبر ، RDBMSبحيث يمكن أن تستخدم قواعد بيانتها
مجموعة من البيانات غير المترابطة نصية كانت أم أعداد أم ملفات ثنائية ،والتي يتم تخزينها والحفاظ عليها منظمة
في . DBMS
مالحظة :
تلفظ MYSQLتقنيا ً بالشكل "" MyEss Que Ell
يوجد العديد من أنواع قواعد البيانات ،بدءا ً من قواعد بيانات الملف البسيطة ووصوالً إلى قواعد البيانات العالئقية
وتلك الموجهة بالكائنات .تستخدم قواعد البيانات العالئية عدة جداول لتخزين المعلومات في أجزائها المتميزة .
قبل أوائل ، 1970كانت قواعد البيانات تبدو كأوراق بيانات تتضمن جداول مفردة كبيرة تخزن كل شيء .ورغم
أن قواعد البيانات العالئقية تتطلب جهدا ً أكبر في مرحلتي التصميم والبرمجة ،إال أنها تقدم وثوقية أفضل وتكاملية
للبيانات تستحق معها الجهد المبذول ،ناهيك عن أن قواعد البيانات العالئقية قابلة للبحث فيها وتسمح بالتعامل مع
أكثر من مستخدم في نفس الوقت .
عند دمج قاعدة بيانات في تطبيق ويب ،يمكن استخالص بعض البيانات التي تولدها PHPمن ( MYSQLالشكل
،) 4األمر الذي ينقل محتوى الموقع من حالته الستاتيكية إلى حالته المرنة ،والتي تمثل المفتاح ألي موقع ويب
ديناميكي .
الشكل : 5كيف تعمل معظم تطبيقات الويب الديناميكية باستخدام . MYSQL PHP
PHP
تمثل MYSQLتطبيقا ً مفتوح المصدر ،مما يعني أنها مجانية االستخدام وحتى التعديل ،إذا إن الشيفرة المصدر
نفسها قابلة للتحميل .وقد يترتب أحيانا ً الدفع مقابل ترخيص ، MYSQLوخاصة إذا كنت تجني أمواالً من بيع أو
أستخدام منتجات . MYSQL
تستكون برمجيات MYSQLمن عدة أجزاء بما فيها ملقم ( MYSQLنقصد ) Mysqidالذي يشغل ويدير
قواعد البيانات ) وعميل ( MYSQLنقصد ، MysQLواألمر ينطبق بشكل أكبر على اإلصدارات الخدمية من
اللغة .
تستطيع MYSQLالتعامل مع قواعد بيانات بحجم 60000جدول وأكثر من 5مليارات صف ،كما ويمكنها
العمل مع جداول بحجم 8مليون تبرابايت ( منذ اإلصدار )3.32على بعض نظم التشغيل وعموما ً 4GBفي
الحاالت األخرى .
تتطلبه برامج 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إلى مكتبات مخصصة لتضاف
إلى المترجم ،ومنها حصلنا على جميع الميزات التي تحدثنا عنها مثل الوصول إلى قواعد البيانات ومعالجة ملفات
.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االعتيادي.
أفضل الطرق السابقة للتحويل إلى وضعية 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يمكن إرسال واستقبال ملفات تعريف االرتباط و إضافة أو حذف أو تعديل البيانات في قاعدة
البيانات الخاصة بك و للتحكم في وصول المستخدم ويمكن لـها تشفير البيانات
ضا
مع PHPال تقتصر على إخراج .HTMLيمكن إخراج الصور وملفات PDFوحتى أفالم فالش .يمكن أي ً
إخراج أي نص ،مثل XHTMLو .XMLوتعد PHP7أسرع بكثير من اإلصدار السابقة وتتميز بتحسين
معالجة األخطاء.
Example
><!DOCTYPE html
><html
><body
><h1>My first PHP page</h1
<?php
;"!echo "Hello World
>?
></body
></html
التعليقات في PHP
التعليق في كود PHPهو سطر ال يتم تنفيذه كجزء من البرنامج .والغرض منه هو أن يقرأه شخص يبحث في الكود
وكتابة التوثيق لوظائف الشفرات وفهمه مستقبال .يمكن استخدام التعليقات من أجل:
اآلخرين يفهمون التعليمات البرمجية الخاصة بك
توثيق لما كتبته من شفرات وتذكير بعمل الشفرات -لقد جرب معظم المبرمجين العودة إلى عملهم بعد عام أو
عامين واضطرارهم إلى إعادة اكتشاف ما فعلوه .يمكن أن تذكرك التعليقات بما كنت تفكر فيه عندما كتبت الكود
تدعم PHPعدة طرق للتعليق:
Example
Syntax for single-line comments:
><!DOCTYPE html
><html
><body
<?php
// This is a single-line comment
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
Example:
<?php
;"$txt = "tssy.com
;"!echo "I love $txt
>?
سينتج المثال التالي نفس اإلخراج كما في المثال أعاله:
Example
<?php
;"$txt = "tssy.com
;"!" echo "I love " . $txt .
>?
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
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 في.نطاق المتغير هو جزء من البرنامج النصي حيث يمكن اإلشارة اواالستخدام للمتغير
.المتغيرات في أي مكان في البرنامج النصي
:يوجد ثالثة مجاالت متغيرة مختلفة
• Local
• Global
• Static
: وال يمكن الوصول إليه إال من خارج الدالة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();
:النتيجة
Example
Variable with local scope:
<?php
function myTest() {
$x = 5; // local scope
echo "<p>Variable x inside function is: $x</p>";
}
myTest();
يمكن أن يكون لدينا متغيرات محلية بنفس االسم في دوال مختلفة ،ألن المتغيرات المحلية يتم التعرف عليها فقط من
خالل الدالة التي يتم التصريح بها.
ضا بتخزين جميع المتغيرات العامة في مصفوفة تسمى] .$GLOBALS [indexالفهرس يحمل تقوم PHPأي ً
ضا من داخل الدوال ويمكن استخدامها لتحديث المتغيرات العامة
اسم المتغير .يمكن الوصول إلى هذه المصفوفة أي ً
globalمباشرةً.
يمكن إعادة كتابة المثال أعاله على النحو التالي:
Example
<?php
;$x = 5
;$y = 10
{ )(function myTest
;]'$GLOBALS['y'] = $GLOBALS['x'] + $GLOBALS['y
}
;)(myTest
echo $y; // outputs 15
>?
النتيجة15 :
><html
><body
<?php
{ )(function myTest
;static $x = 0
;echo $x
;$x++
}
;)(myTest
;">echo "<br
;)(myTest
;">echo "<br
;)(myTest
>?
></body
></html
النتيجة
0
1
2
بعد ذلك ،في كل مرة يتم استدعاء الدالة ،سيظل هذا المتغير يحتوي على المعلومات التي يحتويها منذ آخر مرة تم
استدعاء الدالة.
الثوابت Constant
الثابت هو معرف (اسم) لقيمة بسيطة .ال يمكن تغيير القيمة أثناء تنفيذ البرنامج النصي .يبدأ اسم ثابت بحرف أو
شرطة سفلية (ال توجد عالمة $قبل االسم الثابت).
تشبه الثوابت المتغيرات باستثناء أنه بمجرد تعريفها ال يمكن تغييرها
Example
Create an Array constant:
<?php
;)]"define("com", [ "acer", "hp", "dell
;]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إلنشاء مصفوفة.
Example
<?php
;)"$NAM = array("AH", "AS", "AB
;"echo "I like " . $NAM[0] . ", " . $NAM[1] . " and " . $NAM[2] . ".
>?
النتيجة
I like AH, AS and AB.
;"$com[0] = "HP
;"$com[1] = "DELL
;"$com[2] = "TOSHIBA
Example
<?php
;)"$com = array("HP", "DELL", "TOSHIBA
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>";
}
?>
:)المصفوفات المتصلة (الترابطية
.المصفوفات الترابطية عبارة عن مصفوفة تستخدم مفاتيح مسماة تقوم بتعيينها
:هناك طريقتان إلنشاء مصفوفة ترابطية
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>";
}
>?
المصفوفات متعددة األبعاد
المصفوفة متعددة األبعاد هي مصفوفة تحتوي على مصفوفة واحدة أو أكثر.تدعم PHPالمصفوفات متعددة األبعاد
التي تتكون من اعمدة وصفوف .ومع ذلك ،يصعب على معظم األشخاص إدارة المصفوفات التي يزيد عمقها عن
ثالثة صفوف .كما يشير بُعد المصفوفة إلى عدد الفهارس التي تحتاجها لتحديد عنصر .المصفوفة ثنائية األبعاد ،
تحتاج إلى مؤشرين لتحديد عنصر ,اما بالنسبة للمصفوفة ثالثية األبعاد ،تحتاج إلى ثالثة مؤشرات لتحديد عنصر
-المصفوفات ثنائية األبعاد
المصفوفة ثنائية األبعاد هي مصفوفة من المصفوفات (المصفوفة ثالثية األبعاد هي مجموعة من مصفوفات
المصفوفات).
يمكننا تخزين البيانات من الجدول أعاله في مصفوفة ثنائية األبعاد كما يلي:
( $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
>?
:النتيجة
(ال يزال يتعين علينا$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(دوال الترتيب
. تنازليًا أو تصاعديًا، يمكن ترتيب او فرز العناصر الموجودة في المصفوفة بترتيب أبجدي أو رقمي
:دوال ترتيب او فرز المصفوفة
ترتيب المصفوفة بترتيب تصاعدي)( - Sortيفرز المثال التالي عناصر مصفوفة $comبترتيب أبجدي تصاعدي:
Example
<?php
;)"$com = array("ACER", "TOSHIBA", "DELL
;)sort($com
>?
النتيجة:
ACER
DELL
TOSHIBA
Example
<?php
>?
ترتيب المصفوفة بترتيب تنازلي )( rsortيرتب المثال التالي عناصر مصفوفة $comبترتيب أبجدي تنازلي:
<?php
;)rsort($com
$clength = count($com);
echo $com[$x];
echo "<br>";
?>
:النتيجة
TOSHIBA
DELL
ACER
يرتب المثال التالي المصفوفة الترابطيةasort() حسب القيمة نستخدم، )مصفوفة الفرز (ترتيب تصاعدي
: وفقًا للقيمة، بترتيب تصاعدي
<?php
asort($age);
echo "<br>";
?>
:النتيجة
Key=Peter, Value=35
Key=Ben, Value=37
Key=Joe, Value=43
يقوم المثال التالي بترتيب المصفوفة الترابطية- ksort () Key وفقًا لـ، )ترتيب المصفوفة (ترتيب تصاعدي
: وفقًا للمفتاح، بترتيب تصاعدي
<?php
ksort($age);
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
مصفوفة الفرز (ترتيب تنازلي) ،وفقًا لـ 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
• $GLOBALS
• $_SERVER
• $_REQUEST
• $_POST
• $_GET
• $_FILES
• $_ENV
• $_COOKIE
• $_SESSION
$ GLOBALS
هو متغير عام يستخدم للوصول إلى المتغيرات من أي مكان في نص PHPمن داخل الدوال ,تخزن PHPجميع
المتغيرات العامة في مصفوفة تسمى $ GLOBALS [index].الفهرس يحمل اسم المتغير ,ويعتبر مصفوفة
أسماء المتغيرات هي مفاتيح.ترابطية تحتوي على مراجع لجميع المتغيرات المحددة حاليًا في النطاق العام للنص
.المصفوفة
خارج الدالة مسند له$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();
?>
$ _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
إرجاع سلسلة تعريف الخادم (مثل )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آخر لمعالجة بيانات النموذج ،
فاستبدل ذلك باسم الملف الذي تختاره .بعد ذلك ،يمكننا استخدام المتغير العام (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أي ً
يوضح المثال أدناه نموذ ًجا يحتوي على حقل إدخال وزر إرسال .عندما يرسل المستخدم البيانات بالنقر فوق
"إرسال" ،يتم إرسال بيانات النموذج إلى الملف المحدد في سمة اإلجراء لعالمة < .>formفي هذا المثال ،نشير
إلى الملف نفسه لمعالجة بيانات النموذج .إذا كنت ترغب في استخدام ملف PHPآخر لمعالجة بيانات النموذج ،
فاستبدل ذلك باسم الملف الذي تختاره .بعد ذلك ،يمكننا استخدام المتغير العام الفائق $_ POSTلتجميع قيمة حقل
اإلدخال:
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 = $_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>
<?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هو رمز يجعل البحث غير حساس لحالة
األحرف.
يمكن أن يكون المحدِّد أي رمزا ليس فقط حرفًا أو رق ًما أو شرطة مائلة للخلف أو مسافة ,المحدد األكثر شيو ً
عا هو
الشرطة المائلة لألمام ( ، )/ولكن عندما يحتوي النمط الخاص بك على خطوط مائلة لألمام ،فمن االفضل اختيار
المحددات األخرى مثل #أو ~.
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
<?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في سلسلة:
ً مثال:استخدم
<?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-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.
في الواقع تحتاج إلى تعبئة استمارة ببياناتك ورقم بطاقة االئتمان وغير ذلك من المعلومات ويتم ذلك عن طريق
نموذج (فورم).في الواقع أنت تقوم باختيار الكتاب الذي تريد وتكتب اسمك ورقم هاتفك وصندوق بريدك (ربما) في
فراغات أو عن طريق اإلشارة الى مجموعة من الخيارات .يتم تخزين هذه القيم في المتغيرات التي يتم كتابتها في
الخاصية 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
><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
الكود أعاله بسيط للغاية .ومع ذلك ،يحتاج إلى التحقق من صحة بيانات النموذج لحماية البرنامج النصي من
التعليمات البرمجية الضارة.
GETمقابل POST
ينشئ كل من GETو POSTمصفوفة (على سبيل المثال مصفوفة (،key2 => value2 ،key1 => value1
.))... ، key3 => value3تحتوي هذه المصفوفة على أزواج من المفاتيح /القيمة ،حيث تكون المفاتيح هي أسماء
عناصر تحكم النموذج والقيم هي بيانات اإلدخال من المستخدم ,يتم التعامل مع كل من GETو POSTكـ GET
_ $و $ _POSTوتعتبر ، Superglobalsمما يعني أنه يمكن الوصول إليها دائ ًما ،بغض النظر عن النطاق
او المجال -ويمكننا الوصول إليها من أي دالة أو فئة أو ملف دون الحاجة إلى القيام بأي شيء اخر.
$ _POSTعبارة عن مجموعة من المتغيرات التي يتم تمريرها إلى النص عبر طريقة .HTTP POST
$ _ GETعبارة عن مجموعة من المتغيرات التي يتم تمريرها إلى النص عبر معامالت .URL
نظرا لعرض المتغيرات في عنوان ، URLفمن الممكن وضع إشارة مرجعية على الصفحة .يمكن أن يكون
ذلك ً ،
هذا مفيدًا في بعض الحاالت.يمكن استخدام GETإلرسال بيانات غير حساسة.
مالحظة :يجب عدم استخدام GETمطل ًقا إلرسال كلمات المرور أو غيرها من المعلومات الحساسة!
Comment:
Your Input:
قواعد التحقق من صحة النموذج أعاله هي كما يلي:
:Usernameيجب أن يحتوي فقط على أحرف ومسافات بيضاء
:E-mailيجب أن يحتوي على عنوان بريد إلكتروني صالح (@ )with
( :Websiteاختياري ,إذا كان موجودًا ،يجب أن يحتوي على عنوان URLصالح
إذا تم استخدام PHP_SELFفي صفحة ،فيمكن للمستخدم إدخال شرطة مائلة ( )/ثم بعض أوامر )Cross Site
) Scripting XSSليتم تنفيذها .كيف تتجنب مآثر ]"$_SERVER ["PHP_SELF؟ يمكن تجنب عمليات
استغالل ]"$_SERVER ["PHP_SELFباستخدام دالة ().htmlspecialchars
><form method="post" action="test_form.php/"><script>alert('hacked')</script
بحيث يجب أن يبدو شفرة النموذج كما يلي:
أصبح الرمز اآلن آمنًا ليتم عرضه على صفحة أو داخل بريد إلكتروني.
ثانيا :عندما يرسل المستخدم النموذج:
.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
}
{ )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
}
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"]);
}
}
?>
الخطوة التالية هي التحقق من صحة بيانات اإلدخال ،وهي "هل يحتوي حقل االسم فقط على أحرف ومسافات
بيضاء؟" ،و "هل يحتوي حقل البريد اإللكتروني على بنية صحيحة لعنوان البريد اإللكتروني؟" ،وإذا تم ملؤه " ،
هل يحتوي حقل موقع الويب على عنوان URLصالح؟ ".
اوال:التحقق من االسم
يوضح الكود أدناه طريقة بسيطة للتحقق مما إذا كان حقل االسم يحتوي فقط على أحرف ومسافات .إذا كانت قيمة
حقل االسم غير صالحة ،يتم ارسال سالة خطأ تبحث الدالة () preg_matchفي سلسلة عن النمط ،وتعيد القيمة
trueإذا كان النمط موجودًا ،والخطأ في الحاالت األخرى.
ثانيا :التحقق من صحة البريد اإللكتروني
الطريقة األسهل واألكثر أمانًا للتحقق من صحة عنوان البريد اإللكتروني هي استخدام دالة () filter_varللتحقق
من البريد االلكتروني .في الكود أدناه ،إذا لم يكن عنوان البريد اإللكتروني منسقًا حسب المطلوب ،يتم ارسال
رسالة خطأ.
;)]"$email = test_input($_POST["email
{ ))if (!filter_var($email, FILTER_VALIDATE_EMAIL
;"$emailErr = "Invalid email format
}
{
$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 {
$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
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) {
$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>
Syntax
;'include 'filename
or
;'require 'filename
مثال 1
افرض أن لدينا ملف تذييل ثابت يسمى " ، "footer.phpيبدو كاالتي:
<?php
;">echo "<p>Copyright © 2020-" . date("Y") . "tssy.com</p
>?
><html
><body
><h1>Welcome to my home page!</h1
><p>Some text.</p
><p>Some more text.</p
>?;'<?php include 'footer.php
</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مثال
><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عندما ال يكون الملف مطلوبًا ويجب أن يستمر التطبيق في حالة عدم العثور على الملف.
معالجة الملفات:
كل مبرمج يجب أن يتعامل مع الملفات والمجلدات في بعض النقاط ،اغلب البرامج تستخدم الملفات لكي يقوم
بتخزين معلومات اإلعداد للكود ،أو يقوم بتخزين البيانات لقراءتها وكتابتها ،أو لكي يقوم بحفظ البيانات المؤقتة ،
وكمثال فإن ابسط برنامج يحتاج إلي ملف يقوم بتخزين آخر قيمة تم الوصول إليه ..
الملف :ليس عبارة عن أكثر من بايتات متسلسلة يتم تخزينها على القرص الصلب أو أي ماده تخزينية أخرى .
والمجلد :هو عبارة عن نوع محدد من الملفات يحتفظ بأسماء ملفات أخري ومجلدات أخري ( تسمي بالمجلدات
الفرعية ) ،كل ما تحتاجه لتتعامل مع الملفات والمجلدات هو كيف يمكن ربط الشفرة بهم ..
مالحظة :
قبل أن نبدأ دعنا ننبه أن التعامل مع الملفات يختلف من نظام تشغيل إلي آخر ففي أنظمة اليونكس تستخدم المسارات العالمة المائلة
لألمام
مثال:
/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
Example
<?php
;)"echo readfile("webdictionary.txt
>?
دالة () readfileمفيدة إذا كان كل ما تريد فعله هو فتح ملف وقراءة محتوياته.
يحتوي المعامل األول لـ () fopenعلى اسم الملف الذي سيتم فتحه والمعامل الثاني يحدد الوضع الذي يجب فتح
ضا رسالة إذا كانت الدالة () fopenغير قادرة على فتح الملف
الملف فيه(للقراءه او الكتابة,يظهر المثال التالي أي ً
المحدد:
Example
<?php
;)"!$myfile = fopen("webdictionary.txt", "r") or die("Unable to open file
;))"echo fread($myfile,filesize("webdictionary.txt
;)fclose($myfile
>?
ان حالة الملف ( للقراءة ،للكتابة ،لإلضافة إليه) يحدد وضعية الملف حال فتحه إذا كان للقراءة فقط أو للكتابة فقط
أو لالثنين معا ً أو لإلضافة ،الجدول التالي يوضح حالة الملف اعتمادا على القيم ..
الوصف القيمة
افتح ملفًا للقراءة فقط .يبدأ مؤشر الملف في بداية الملف 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
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
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")
إذا كنت تواجه أخطاء عند محاولة تشغيل الشفرة ،فتحقق من صالحيات حق الوصول إلى ملف الـ PHPلكتابة
المعلومات على القرص الصلب.
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
;)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نتيجة الخطأ اذا كان هناك خطأ في الكود أو الملف المرفوع. •
<!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
$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;
}
}
>?
شرح الكود:
" - $ target_dir = "uploads /يحدد الدليل حيث الملف الذي با يوضع
$ target_fileيحدد مسار الملف المراد تحميله.
;)]" basename($_FILES["fileToUpload"]["nameتعمل هذه الدالة على عرض اسم الملف فقط بينما
الدالة )( dirnameتعرض لنا مسار المجلد الذى يحتوى على الملف
$ imageFileTypeيحتفظ بامتداد الملف (بأحرف صغيرة)
بعد ذلك ،تحقق مما إذا كان ملف الصورة صورة فعلية أم صورة مزيفة.
مالحظة :سوف تحتاج إلى إنشاء دليل جديد يسمى " "uploadsفي الدليل حيث يوجد ملف " ."upload.phpسيتم
حفظ الملفات التي تم تحميلها فيه.
دالة)( strtolowerتحويل السلسلة إلى أحرف صغيرة.
وتعيد الدالة )( pathinfoمعلومات عن مسار الملف.
)(getimagesizeيتم استخدام الدالة للحصول على حجم الصورة والمعلومات ذات الصلة .تقوم بإرجاع مصفوفة
إذا تم التنفيذ ،أو إرجاعها إذا فشلتFALSEوتنتجE_WARNINGمستوى معلومات الخطأ.
حيث تكون ناتج استخدام الشفرة للخرج للمتغير ]" $check["mimeكالتاليFile is an image - image/jpeg :
{
echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
$uploadOk = 0;
}
<?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;
}
}
// 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.
الكوكيز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و هو قيمة حرفية يتم تخزينها كاسم للمتغير.
: 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صحيحة أو خاطئة.
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
< وقيمة ملف تعريف االرتباط يتم ترميزهاhtml> قبل عالمةsetcookie () يجب أن تظهر الدالة:مالحظة
استخدم، URL ويتم فك تشفيرها تلقائيًا عند استالمها (لمنع تشفير عنوان، تلقائيًا عند إرسال ملف تعريف االرتباط
.) بدالً من ذلكsetrawcookie)(
<?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
<?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؟ أول تلك النقاط أن عملية تسجيل المتغير على جهاز المستخدم له
مدة معينة تنتهي بانتهاء الجلسة ،ومن هنا جاءت التسمية ،أما ما نعنيه الجلسة فهي مصطلح لقيامك بالتصفح من
الموقع ومن ثم اغالق الموقع ،ببساطة كل مرة تقوم بزيارة الموقع تبدأ جلسة أو 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ال يحافظ على حالته.
تعمل متغيرات الجلسة على حل هذه المشكلة عن طريق تخزين معلومات المستخدم الستخدامها عبر صفحات
متعددة (مثل اسم المستخدم واللون المفضل وما إلى ذلك) .بشكل افتراضي ،تستمر متغيرات الجلسة حتى يغلق
المستخدم المتصفح .وبالتالي؛ تحتوي متغيرات الجلسة على معلومات حول مستخدم واحد ،وهي متاحة لجميع
الصفحات في تطبيق واحد.
-1الخيار : Session.auto_start
ً
بداية تلقائية للـ ( Sessionدون الحاجة لعمل ذلك يدويا عن طريق . ) Session_start
-2الخيـار : Session.cache_expire
-4الخيـار : Session_name
إسم الـ Sessionالتي ستستخدم كـ cookieوافتراضيا ً ستكون . PHPSESSID
-5الخيـار : session.save_path
هذا يعني مكان تخزين ملفات الـ Sessionفي جهازك باعتباره سيرفر ،وهنا
تستطيع أن تضع أي عنوان في جهازك ،أما تركه فارغا ً فيعني عدم تفعيل الـ Session
لديك .
مالحظة مهمة حول عملية بداية الـ Sessionوهي أن تتأكد من أن هذا السطر ال يسبقه عملية اخراج مخرجات ،
بمعنى أخرى أي استخدام للدوال مثل echoأو ، printوكذلك ال يسبق هذا السطر أي فراغ وتأكد من هذه النقطة
جيدا ً النها كثيرة الحدوث
-تخزين متغيرات الجلسات :
وهي ما نسميها بالـ ، Session Variablesولعمل ذلك يوجد لدينا الدالة الواردة في المثال التالي :
?<
;"$user = "AYEDH
;]"$_SESSION["user
>?
ما قمنا بعمله هو التالي :
-1عرفنا متغيرا ً userيحتوي على قيمة حرفية .
-2قمنا بتسجيل هذا المتغير في متغير جلسة ( ) Session Variableوبنفس االسم userولكن بدون عالمة . $
-التعامل مع متغيرات الجلسة :
بعد تسجيل المتغير ،يمكن الرجوع اليه بعدة طرق تعتمد على الخيار register_globalsفي ملف الـ php.ini
،اذا كان 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وضع الكود التالي فيها :
<?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
<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 ( )
:تقوم معظم الجلسات بتعيين مفتاح مستخدم على كمبيوتر المستخدم يبدو كالتالي
فإنها تفحص، عندما يتم فتح جلسة على صفحة أخرى، بعد ذلك.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.
كما تالحظ ,الجدول قسم البيانات إلى صفوف ...مع كل إضافة عميل جديد سوف يكون هناك صف (سجل) جديد ...
ربما لو تطلق لخيالك العنان سوف تالحظ أن هذا الجدول مشابه للدوالب والصفوف رفوف فإذا أردت أن تضيف
كتب أو مالبس أو أي كان سوف تضيفها في رف جديد ..كما يحصل في إضافة عميل جديد سوف تضيفه في صف
(سجل) جديد .
البيانات في كل صف قسمت إلى مدى أبعد في الخاليا ( أو الحقول) ,كل من هذه البيانات تحتوي على قيمة محددة
وصفة محددة ,على سبيل المثال محمد خالد سوف ترى أن هذا العميل انقسمت بياناته في الحقل إلى 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العامة التي يمكن استخدامها لتعريف االعمدة توضح عند انشاء الجدول التالي.
يجب عند ادحال نص بطول 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في جداول .الجدول عبارة عن مجموعة من البيانات ذات
الصلة ،ويتكون من أعمدة وصفوف .تعد 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 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
• 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";
?>
االتصال بال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بالطرق الثالث :
<?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);
}
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 توضح األمثلة التالية كيفية إنشاء الجدول في
}
$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 الحظ أنه يجب فصل كل جملة
مالحظة:
تجلب الدالة )( fetch_array () / mysqli_fetch_arrayصف نتيجة كمصفوفة ترابطية أو مصفوفة رقمية أو كليهما .ونشير الى ان أسماء
الحقول التي يتم إرجاعها من هذه الدالة حساسة لحالة األحرف.
Syntax
Object oriented style:
)$mysqli_result -> fetch_array(resulttype
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
} else {
echo "0 results";
}
$conn->close();
?>
: لحذف السجالت من جدولDELETE حذف البيانات تُستخدم عبارة
DELETE FROM table_name
WHERE some_column = some_value
. السجل أو السجالت التي يجب حذفهاWHERE تحدد جملةDELETE: في بناء جملةWHERE الحظ عبارة
في جدول3 فسيتم حذف جميع السجالت! المثال التالي تحذف السجل رقم، WHERE إذا حذفت جملة
:"MyGuests"
قيود االستعالم
Mysql نورد بعض من القيود على استعالمات قواعد البيانات
تُستخدم لتحديد عدد السجالت المرادLIMIT تحديد مجموعة سجالت بيانات من قاعدة بيانات باستخدام جملة:اوال
افترض. يمكن أن يؤثر إرجاع عدد كبير من السجالت على األداء. وهي مفيدة جدًا في الجداول الكبيرة.إرجاعها
بعدSQL سيبدو استعالم."order" (ضمناً) من جدول يسمى30 إلى1 أننا نرغب في تحديد جميع السجالت من
:ذلك بالشكل التالي
بناء تطبيقات الويب .مثال تطبيق تسجيل الدخول ,نحن كل يوم نستخدم االنترنت ونرى الكثير من الصفحات ومنها
نموذج تسجيل الدخول(تسجيل المستخدم) والذي معظم تطبيقات تسجيل الموقع تم االنشاء باستخدام PHPو
MYSQLمثل FACEBOOK ,TWETTERوغيره من النماذج.
فيما يلي خطوات انشاء صفحة تسجيل الدخول باستخدام تحوي صفحة تسجيل الدخول وتتضمن صفحات اخرى:
صفحة التسج يل ,الخروج ,لوحة التحكم تحوي بيانات التسجيل باالضافة الى عملية الحذف والتعديل ,ونذكر
بااختصاربانشاء صفحات التسجيل مع الشفرة المصدرية كاالتي:
او الضغط على رابط 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
<?php
$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
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 لوحة تحكم
لمعالجة البيانات والتاكد منها وتكتب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>
وتمتلك خصائص اخرى يمكن الرجوع اليها من خالل الرابط, توجيه المتصفح لموقع آخر او صفحة اخرى في نفس الموقع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>
عرض السجالت ورابط الخروج حيث, التي تحتوي على روابط اضافة سجل جديد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>";
}?>
<!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>
<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);?>
<!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>
</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");
?>
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 {
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;
;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
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);
}
?>