القائمة الرئيسية

الصفحات

 منصة تحفيظ القران الكريم اون لاين 

https://quranmo.com

دورة بناء منصة متكاملة لتقديم الطلبات الكترونيا بلغة php

 


عنوان الدورة : دورة بناء منصة متكاملة  لتقديم الطلبات الكترونيا بلغة php 

التقنيات المستخدمة : html , php , sql ,css

مقدم الدورة : فيصل عسيري


نبذه عن مقدم الدورة : مؤسس مدونة فاب ومهتم باثراء المحتوى العربي في مجالات علوم الحاسب المختلفة قدمت عدة دروس الكترونية في تطوير وبناء مواقع الويب بالاضافة الى لغات البرمجة الاخرى المختلفة ومجالات الامن السيبراني وتحليل البيانات - حاصل على عدة شهادات اخرى الى جانب الشهادة الاكاديمية واهمها والتي تدّعم الموثوقية لتقديم هذه الدورة في مجال قواعد البيانات  ( شهادة - تحليل البيانات - باستخدام لغة sql من مبادرة صاحب السمو الشيخ محمد بن راشد آل مكتوم (مليون مبرمج عربي) 

التخصص الجامعي :  نظم المعلومات 

رسوم الدورة : مجانية - مدفوعة 

انت الان تتصفح النسخة المجانية والتي تغطي جميع جوانب بناء الموقع باستثناء بعض الميزات الاضافية والتصميم

تعرف على مزايا النسخة المدفوعة من هنا 

متطلبات الدورة : جميع متطلبات الدورة مفتوحة المصدر ويمكن تحميلها مجانا 

* تم تطبيق الدورة على بيئة windows
هل تحتاج الدروة الى خبره سابقة في البرمجة ؟ 
تمت مراعاة جميع مستويات المتقدمين وخصوصا المبتدئين وتدعيم نهاية كل جزء باتاحة الاكواد المستخدمة بشكل كامل 

محتويات الدورة : 
  • تعريف بالتقنيات المستخدمة 
  • الفصل  الاول - بناء قاعدة البيانات
  • الفصل الثاني - برمجة الموقع
  • الفصل الاخير - تصميم الموقع
بعد اتمامك هذه الدورة ستكون قادرا على بناء موقع متكامل مثل الموضح في المثال التالي تماما


تعريف بالتقنيات المستخدمة 



تقنية ترميز النص الفائق html : 

لغة ترميز النص الفائق (أو لغة ترميز النص التشعبي) (بالإنجليزية: HyperText Markup Language)‏ (إختصار إتش تي إم إل HTML)، هي لغة ترميز تستخدم في إنشاء وتصميم صفحات ومواقع الويب، وتعتبر هذه اللّغة من أقدم اللّغات وأوسعها استخداما في تصميم صفحات الويب. HTML هيكل صفحة الويب وتعطي متصفّح الإنترنت وصفا لكيفيّة عرضه لمحتوياتها، يمكن أن تساعده تقنيات مثل أوراق الأنماط المتتالية (CSS) ولغات البرمجة النصية مثل جافا سكريبت تستقبل متصفحات الويب مستندات HTML من خادم الويب أو من نظام الملفات وتعرضها، ووظيفة لغة HTML هي وصف بنية صفحات الويب هيكليًا.

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

يمكن للغة HTML أن تُضمِّن برامجَ مكتوبةٍ بلغات مثل جافا سكريبت لتعديل سلوك ومحتوى صفحات الويب؛ وإضافة شيفرات أوراق الأنماط المتتالية CSS تؤدي إلى تعريف شكل وتخطيط المحتوى.

لغة البرمجة php : بي إتش بي (PHP: Hypertext Preprocessor، 'الصفحة الرئيسية الشخصية كانت مجموعة من التطبيقات التي كتبت باستخدام لغة بيرل أطلق راسموس اسم Personal Home Page Tools ("المعالج المسبق للنصوص الفائقة") هي لغة برمجة نصية صممت أساسًا من أجل استخدامها لتطوير وبرمجة تطبيقات الويب. كما يمكن استخدامها لإنتاج برامج قائمة بذاتها وليس لها علاقة بالويب فقط.

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

لغة التصميم css : Cascading Style Sheets)‏ اختصارًا: سي إس إس (بالإنجليزية: CSS)‏؛ هي لغة تنسيق لصفحات الويب تهتم بشكل وتصميم المواقع، صممت خصيصا لعزل التنسيق (الألوان - الخطوط - الأزرار....) عن محتوى المستند المكتوب (بلغة مثلا إتش تي إم إل) وينطبق ذلك على الألوان والخطوط والصور والخلفيات التي تستخدم في الصفحات، بمرونة وسهولة تامة.

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

أطلقها مجلس وب رابطة الشبكة العالمية، كمواصفة قياسية لتوصيف مظهر وثائق وب من محددات للخطوط والألوان والتنسيق.

لغة قواعد البيانات mysql : ماي إس كيو إل وتلفظ أحيانا ماي سيكويل (بالإنجليزية: MySQL)‏ هو نظام إدارة قواعد البيانات علائقي يعتمد التعامل معه على لغة إس كيو إل. وسمي بهذا الاسم تبعا لابنة مبرمجه الأصلي Michael Widenius، والتي اسمها My. ماي إس كيو إل هو من المنتجات مفتوحة المصدر ينشر كوده المصدري تحت رخصة جنو العمومية بالإضافة إلى بعض الاتفاقيات الاحتكارية. كانت تملكه وترعاه الشركة الربحية السويدية MySQL AB، لكن تملكه الآن صن ميكروسيستمز (والتي هي حاليا فرع من أوراكل)

السيرفر المحلي : هو خادم يتم تثبيته على جهاز الكمبيوتر ليتم تشغيل اللغات البرمجية التي تتطلب خادم serverside مثل php ويوفر للمبرمج او مطور الويب خادم يتيح استعراض واختبار الموقع قبل نشره على الانترنت 


الفصل الاول - بناء قاعدة البيانات

بعد تثبيت السيرفر المحلي والذي لا يحتاج الى شرح فكل الخطوات عباره عن next حتى انتهاء التنصيب قم بالدخول الى مسار قاعدة البيانات على السيرفر المحلي من خلال المتصفح كما في (المثال-رقم1) بعد ذلك قم بإدخال اسم المستخدم وكلمة المرور لقاعد البيانات التي قمت بتسجيلها سابقا اثناء تنصيب السيرفر المحلي





بعد دخولك على واجهة قاعدة البيانات توجة الى القائمة المنسدلة اليسرى اعلى الصفحة وقم بالنقر على new لإنشاء قاعدة بيانات جديدة كما في (المثال -رقم2) ومن ثم سيظهر امامك نموذج انشاء القاعدة قم بتسميتها order ومن ثم انقر على create لإتمام العملية كما في (المثال-رقم3) وستلاحظ رسالة تفيد بأنشاء قاعدة البيانات


بنجاح وسيتم فتح نموذج جديد لإدراج جداول البيانات للقاعدة في هذه المرحلة سنقوم بتجاهل الواجهات الرسومية لإنشاء الجداول وسنقوم بإدخالها بطريقة الزراعة داخل القاعدة وهي عبارة عن كتابة اكواد انشاء الجدول بلغة mysql ولتنفيذ هذه العملية اولا دعنا نحدد ما هو الجدول الذي نريد انشائه

انشاء جدول بيانات لتخزين بيانات العملاء

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

وقبل التوغل في عملية بناء جداول البيانات دعنا نتفق على الية تطبيق الدروس في هذه الدورة ستلاحظ انني اقوم بكتابة الاكواد دفعة واحدة قبل شرحها لسببين الاول لرغبتي في حفظ وقتك والاختصار عليك والسبب الاخر اني افضل شرح الاكواد بعد كتابتها لعدم تشتيتك ولتلافي الاخطاء التي من الممكن ان تقع فيها عند كتابة الاكواد رغم ان كتابتك يدويا للاكواد سيساعدك في التعلم الذاتي وعلى اية حال يشرح مقدم الدورة جميع الاكواد بالتفصيل حتى تتمكن باذن الله من اتقان برمجة المواقع وقواعد البيانات الخاصة بها بشكل احترافي بنفسك

اما الان توجه من اعلى القائمة الى ايقونة sql وقم بالنقر عليها بعد ذلك قم بكتابة الكود الموضح ادناه  بعد ذلك قم بالنقر على ايقونة go





كود sql: 

CREATE TABLE `login` ( 

`id` int(11) NOT NULL, 

`username` varchar(255) NOT NULL, 

`email` varchar(255) NOT NULL, 

`password` varchar(255) NOT NULL 

) ENGINE=InnoDB DEFAULT CHARSET=latin1; 





ALTER TABLE `login` 

ADD PRIMARY KEY (`id`), 

ADD UNIQUE KEY `username` (`username`), 

ADD UNIQUE KEY `email` (`email`); 



ALTER TABLE `login` 

T NULL AUTO_INCMODIFY `id` int(11) NOREMENT;
الية كتابة الاكواد في لغة sql عند انشاء اي جدول في قاعدة البيانات نقوم بكتابة الامر creat table متبوعا بعلامتي التنصيص ' ' من ثم نقوم بكتابة اسم الجدول باداخلها وكما تلاحظ في الكود السابق استخدمنا login كاسم للجدول للدلالة على "تسجيل الدخول" وبامكانك استبدالها باي اسم ترغب به ولكن قمت بتسميته كذلك لاني ساستخدم هذا الجدول اولا لتخزين بيانات العميل وثانيا لعمل استعلامات برمجية لاحقا وربطها مع هذا الجدول لتسجيل دخول العملاء .
وبالعودة للنص البرمجي لأكوادsql  نقوم بعد تحديد اسم الجدول بفتح  قوس ( ونكتب بداخله بنية جدول البيانات مثل خلايا الجدول ونوعها وطولها الخ .. حيث طلبنا من قاعدة البيانات ادراج خلايا بداخل الجدول واول خلية خلية هي معرف العميل ورمزت له بـ id بين علامتي التنصيص '' متبوعا  بنوع الخلية وهنا حددت النوع int وهذا الاخير في قواعد بيانات sql - يعني ان نوع الحقل رقمي ولا يقبل المدخلات الاخرى- متبوعا بقوسين تحدد الحجم الاقصى للخلية وفي الكود السابق حددنا الطول الاقصى 11 خانة رقمية بمعنا اذا كان العدد اطول من 00000000001 لن يتم تخزينه في الخلية ،وطلبنا من قاعدة البيانات ان لا يكون الحقل فارغ بالعبارة البرمجية  not nullحيث نجبر قاعدة البيانات على ضرورة ادراج رقم تعريفي للعميل ولا يمكن ترك الخانة فارغة ،وبين كل خلية والاخرى نضع الفاصلة , للفصل بين الخلايا ، ونقوم بتكرار الخطوات على جميع الخلايا باستثناء النوع وبعض الشروط المطلوب من القاعدة تنفيذها لبناء الجدول فعلى سبيل المثال الحقل password  وهو الحقل المسؤول عن تخزين الارقام السرية لحسابات العملاء حددنا نوعه varchar وهذا يعني ان الحقل يقبل تخزين ارقام ونصوص ورموز وحجمه الاقصى 255 خانة وبالمناسبة في قواعد بيانات sql  هذا اطول حجم ممكن لتخزين البيانات في خلية واحدة فهنا لانلزم العميل بطول كلمة مرور معينة بل على العكس نتيح له الخيار لتخزين كلمة مرور قد تحتوي على رموز وبطول غير محدود نسبيا والملاحظة المهمة هنا اننا نطلب من قاعدة البيانات عدم قبول اية بيانات فارغه في هذا الجدول لأهمية جميع الحقول ومن ثم نقوم بإغلاق قوس انشاء الحقول)  وبعد ذلك نضيف بعض الشروط الهامة 
كود تعديل الجدول ALTER TABLE `login قمنا بالطلب من قاعدة البيانات بتعديل الجدول الذي قمنا بتسميته login  لاجراء بعض الشروط الهامة على بعض الحقول وهي   ADD PRIMARY KEY (`id`),  في هذا الشرط طلبنا من قاعدة  البيانات اعطاء الحقل id خاصية المفتاح الاساسي للجدول بحيث يكون هو الاساس في الاستعلامات التي قد نجريها لاحقا على الجدول بالاضافة الى اعطاء الحقول الهامة التي يجب ان تخزن قيمة فريدة وغير متكررة مثل اسم المستخدم والبريد الالكتروني بحيث لا يمكن لاي عميل بالتسجيل باسم مستخدم وبريد الكتروني مسجل مسبقا بالنص الشرطي ADD UNIQUE KEY `username` (`username`),
  ADD UNIQUE KEY `email` (`email`); واخيرا في السطر الاخير طلبنا كذلك من قاعدة البيانات تعديل الحقل id  بحيث يقوم بتخزين معرف بشكل تلقائي وغير يدوي بشكل متسلسل دون تدخل العميل في اختيارقيمة هذا الحقل بالشرط البرمجي AUTO_INCREMENT; بحيث اذا قام بالتسجيل سيتم اعطاء اول عميل يسجل في قاعدة البيانات المعرف 1 والعميل الذي يليه المعرف 2 وهكذا .
والان بعد ان تعرفت على طريقة بناء قاعدة بيانات باسلوب الزراعة سنستكمل بناء الجداول الاخرى بطرقة الواجهة الرسومية
جدول تخزين بيانات العملاء 
في الجدول السابق قمنا بأنشاء جدول يخزن بيانات العملاء اعلاه ولكن في هذا الجدول سنقوم بتخزين البيانات المتبقيه مثل الاسم الاول واسم العائلة والجنس وتاريخ الميلاد ورقم الجوال وسنقوم بربطها بالجدول السابق من خلال خلية اسم المستخدم وستم شرح الهدف من هذا الجدول لاحقا اثناء بناء صفحات الموقع 
نقوم بإنشاء جدول باسم userinformation لتخزين معلومات العملاء بالضغط على اسم قاعدة البيانات من ثم انشاء جدول جديد يضم 8 حقول كما في الامثلة التالية


وقمنا هنا بإضافة الحقول جميع الحقول تاخذ انواع تم شرحها في الجدول السابق باستثناء حقل تاريخ الميلاد للعميل dateofbirth  ياخذ نوع date وهذا النوع لتخزين التواريخ 
والحقول المضافة كالآتي حقل id  لاضافة معرف غير متكرر للجدول 
Username سيتم جلبه لاحقا من الجدول الاول للتعريف بالعميل 
Firstname لتخزين اسم العميل الاول 
Middlename لتخزين اسم العميل الثاني 
Lastname لتخزين الاسم الاخير للعميل او اسم العائلة 
Gender لتخزين جنس العميل ( ذكر-انثى )
Dateofbirth  لتخزين تاريخ الميلاد للعميل وسيتم الاستفادة منه برمجيا في حساب عمر العميل 
Phonenumber لتخزين رقم العميل للتواصل 
بعد كتابتك لجميع الحقول اعلاه  لاتنسى حفظ التغييرات 
جدول تخزين طلبات العملاء 
نقوم بانشاء جدول جديد لتخزين طلبات العملاء افترض عند وصولك لهذه النقطة انك تستطيع انشاء جداول بكفائة عالية كل ما تحتاجه الان بعد مراجة الخطوات السابقة انشاء جدول يضم الحقول التالية الموضحة في المثال مع ملاحظة انه بامكانك تسجيل اسم الجدول والحقول بما يناسبك وليست شرطا اساسيا في بناء البيانات 
هذا الجدول قمت بتسميته mycase
وقمنا هنا بإضافة الحقول جميع الحقول تاخذ انواع تم شرحها في الجدول السابق باستثناء حقل تاريخ الميلاد للعميل dateofbirth  ياخذ نوع date وهذا النوع لتخزين التواريخ 
والحقول المضافة كالآتي حقل id  لاضافة معرف غير متكرر للجدول 
Username سيتم جلبه لاحقا من الجدول الاول للتعريف بالعميل 
Firstname لتخزين اسم العميل الاول 
Middlename لتخزين اسم العميل الثاني 
Lastname لتخزين الاسم الاخير للعميل او اسم العائلة 
Gender لتخزين جنس العميل ( ذكر-انثى )
Dateofbirth  لتخزين تاريخ الميلاد للعميل وسيتم الاستفادة منه برمجيا في حساب عمر العميل 
Phonenumber لتخزين رقم العميل للتواصل 
بعد كتابتك لجميع الحقول اعلاه  لاتنسى حفظ التغييرات 
جدول تخزين طلبات العملاء 
نقوم بانشاء جدول جديد لتخزين طلبات العملاء افترض عند وصولك لهذه النقطة انك تستطيع انشاء جداول بكفائة عالية كل ما تحتاجه الان بعد مراجة الخطوات السابقة انشاء جدول يضم الحقول التالية الموضحة في المثال مع ملاحظة انه بامكانك تسجيل اسم الجدول والحقول بما يناسبك وليست شرطا اساسيا في بناء البيانات 
هذا الجدول قمت بتسميته mycase

مع الاخذ بعين الاعتبار ان العميل لن يضطر لإعادة ملئ جميع هذه الخلايا ولكن سنقوم بجلبها من الجدول السابق بعد ان يكلمه العميل فقط سيقوم العميل بملىء بعض الخلايا مثل الطلب والخانة المخصصة له في الجدول اعلاه mycase وحالة الطلب stateofcase سيقوم بتعديلها لاحقا مدير الموقع من خلال لوحة تحكم خاصة سنتطرق لها لاحقا وبالعودة الى شرح هذا الجدول ساشرح الخلية timeofcase باعتبارها حقلا جديدا ونوعه time هذا الحقل سنقوم بتخزين وقت ارسال الطلب اليا من خلال برمجة الموقع مثل الساعة والدقيقة 

جدول مدير الموقع 
في هذا الجدول سنقوم بتخزين بيانات مدير الموقع اسم المستخدم ، الايميل والرقم السري ورقم المعرف id
وسيتم ربطه لاحقا بلوحة تحكم ادارة الموقع هذا الجدول يشبه تماما اول جدول قمنا بإنشائه مع بعص التغييرات الطفيفة مثل اسم الجدول adminlogin والحقل adminusernameمع ملاحظة ان اسم المستخدم للمدير يجب ان يكون فريد وغير متكرر باختيار مفتاح unique من خلال تحديد الحقل بعد انشاء الجدول والنقر على الايقونة المخصصة اسفل الجدول كما يظهر في المثال التالي 
جدول السماح بتسجيل مدراء جدد 
هذا اخر جدول في شرحنا لهذا اليوم والهدف منه فتح واغلاق صفحة تسجيل مدراء جدد سيتم ربطه برمجيا من خلال درس برمجة لوحة تحكم ادارة الموقع 
يتكون هذا الجدول من حقلين فقط id وحالة التسجيل ( مغلق- مفتوح) وسيتم شرح الية عمله بالتفصيل في الجزء المخصص له
قمت بتسميته allow





الفصل الثاني - برمجة الموقع


اولا ربط الموقع بقاعدة البيانات 
افترض بانك قمت بتحميل جميع متطلبات الدورة المدونة اعلى هذه التدوينة 
اولا قم بفتح المسار التالي من خلال القرص c://
C:\AppServ\www
هذا المسار سيقوم بتوصيلك مباشرة الى ملفات مواقعك الالكترونية على السيرفر المحلي وكل ما يهمنا تحديدا هو المجلد      
www  
حيث ستقوم بفتح مجلد جديد داخل هذا المجلد باسم موقعك الالكتروني وفي هذه الدورة سنقوم بتسمية المجلد orders


الان انتقل الى محرر الاكواد البرمجية notepad++ وقم بفتح مساحة عمل جديدة من خلال القائمة ملف < فتح المجلد كمساحة عمل وقم باختيار مجلد orders الذي قمنا بانشائة داخل المسار السابق بحيث يكون مسار مساحة العمل كالاتي
C:\AppServ\www\orders

قم بانشاء ملف جديد من قائمة ملف < جديد
ومن قائمة عرض اختر اتجاه النص من اليسار لليمين 
ومن قائمة الترميز اختر الترميز التالي : 


ومن قائمة لغة اختر لغة البرمجة 
p>php
الان انت جاهز لكتابة اكواد موقعك 
لنعود الى صفحة ربط الموقع بقاعدة البيانات التي قمنا ببنائها سابقا 
قم بلصق الكود التالي مع تغيير بعض المتغيرات التي ساشير اليها بعد شرح الكود 

<?php

$connection = mysqli_connect('localhost', 'root', ' ');

if(!$connection){

                die("Database Connection Failed" . mysqli_error($connection));

}

$select_db = mysqli_select_db($connection, 'order');

if(!$select_db){

                die("Database Selection Failed" . mysqli_error($connection));

}

?>

اولا اكواد لغة الphp دائما تتم كتابتها على النحو التالي :<?PHP?> قوس يليه علامة استفهام يليه كلمة php ثم يتم اغلاق الكود بعلامة استقهام ثم القوس ويتم كتابة التعليمات البرمجية في المنطقة المحددة في المثال التالي

<?PHP

تتم كتابة الاكواد هنا

?>

وبالعودة الى كود ربط الموقع بقاعدة البيانات نقوم بكتابة متغير اتصال بعد علامة $ وعلامة الدولار دائما تشير الى المتغيرات في لغة php 


$connection = mysqli_connect('localhost', 'root', ' ');


متغير الاتصال = mysqli_connect كود ربط الاتصال حيث localhost اسم السيرفر ,  root اسم المستخدم لقاعدة البيانات وغالبا مايكون root المستخدم الافتراضي يليها كلمة المرور التي قمت باشنائها عند عن تنصيب السيرفر المحلي قم بكتابتها بين علامتي التنصيص " مع مراعاة عدم اضافة اي مسافات اثناء الكتابة 
ثم اغلق الاتصلال باغلاق الاقواس مع علامة الفاصلة المنقوطة وهي مهمه دائما في اغلاق الاستعلامات في لغة php  ; 
بعد ذلك نقوم باضافة شرط برمجي if() بمعنا في حالة عدم حدوث اتصال نقوم بتحديد الاجراء بين القوسين {} حيث ان علامة ! تعني not في اغلب لغات البرمجة وهي حرف نفي برمجي 
die("Database Connection Failed" . mysqli_error($connection));
ستقوم الصفحة بطباعة الجملة التالية (فشل الاتصال) Database Connection Failed وفي حال ضهرت لك هذه الجملة التحذيرية تاكد من المعلومات المدخلة في الاتصال 
بعد اغلاق قوس الشرط }
نقوم بكتابة استعلام قاعدة البيانات في حال كان الاتصال بالسيرفر ناجح 
$select_db = mysqli_select_db($connection, 'order');



$select_db
اسم متغير الاتصال بقاعدة البيانات  


mysqli_select_db($connection, 'order');
وهذه الجملة البرمجية هي وظيفة المتغير السابق في حالة الاتصال الناجح نطلب منه الاتصال بقاعدة البيانات التي قمنا ببنائها وتحمل اسم order
مرة اخرى نقوم باضافة شرط للتحقق من ان القاعدة المختاره صحيحه في حال كانت صحيحة لن تتم طباعة اي جملة تحذير ولكن في حالة كان الاختيار خاطئ سيتم طباعة جملة التخذير التالية Database Selection Failed
والكائنة داخل جملة الشرط التالية 
if(!$select_db){
die("Database Selection Failed" . mysqli_error($connection));
}
مثال مصور للكود داخل برنامج notepad++



تهانينا قمت بكتابة صفحتك الاولى قم بحفظ الملف باسم connect.php
يتبقى التاكد من عمل الكود البرمجي قم بفتح متصفح الويب وقم بكتابة مسار موقعك كالاتي 
http://localhost/orders/ connect.php
مثال مصور للتحقق من اتصال قاعدة البيانات ونلاحظ النتيجة صفحة فارغة وهذا يدل على نجاح الاتصال وعدم طباقة جملة تحذيرية


بناء صفحة تسجيل دخول العملاء 
لبناء صفحة تسجيل الدخول مزيج بين لغتي برمجة المواقع html وphp ففي الاولي نقوم ببناء هيكل الصفحة الأساسي والثانية نقوم فيها بتنفيذ الديناميكية للصفحة بالإضافة الى تنفيذ الاستعلامات والربط مع قاعدة البيانات بلغة قواعد البيانات sql 
أولا بناء هيكلة الموقع بواسطة html 
لا يكاد أي موقع على الانترنت ان يخلوا من اكواد هذه اللغة ولكن كذلك لا يمكن في عصرنا الحالي بناء موقع بهذه اللغة فقط لأنها تفتقد الى الديناميكية وفي السابق كانت تستخدم لتصميم صفحات الويب الثابتة فقط اما في مشروعنا الحالي فكما ذكرت سابقا اننا سنحتاجها في بناء الهيكلة الأساسية للموقع واضافة بعض نماذج الادخال ولهذه اللغة بنية أساسية تتكون من رأس الصفحة <head> ومحتوى الصفحة <body> ولا ننسى كودي فتح وسم <html> واغلاقه <html/>
بالإضافة الى وسم النماذج الالكترونية <form> ويرجى ملاحظة ان جميع وسوم هذه اللغة تعمل بنفس المبدأ نبدا بوسم لفتح الكود واخر لا غلاقة مع إضافة العلامة / ومع المثال التالي ستتضح الصورة لديك اكثر 
<html>
<head>
<title></title>
</head>
<body>
<form method="post">
</form>
</body>
</html>


ودأما ما نستخدم بداخل وسم head التعليمات البرمجية لكامل الصفحة والتي غالبا ما تكون غير ظاهرة للمتصفح على سبيل المثال تعليمات تصميم الموقع والوصلات المهمة الأخرى ولكن بداخل هذا الوسم نضع وسم مهم وهو وسم عنوان الصفحة <title> ويظهره المتصفح بهذا الشكل 
ضع هنا مثال 


اما ما نكتبه بداخل وسم <   body<         
هو ما يهمنا حاليا فلو لاحظت ان وسم النموذج قمنا بكتابته بداخل وسم body
وهو الوسم form وحددنا نوع هذا النموذج بpost وهذا الأخير سنحتاجه لاحقها في عملية الربط بلغة php 
الان بعد ان كتبنا الوسم نقوم بكتابة حقول الادخال والتي دئما نبنيها باستخدام الوسم <input> 
مثال على حقل ادخال لكتابة اسم المستخدم بداخله 
     <input type="text" name="username">
ونلاحظ اننا حددنا نوع الادخال "نصي" وحددنا اسمه  username هذا الأخير سنستفيد منه لاحقا اثناء عملية الربط   
ونقوم بكتابة نفس الكود مع الاختلاف البسيط في نوع الادخال واسم الادخال
<input type="email" name="email">
ونلاحظ هنا حقل الادخال مخصص للبريد الإلكتروني 
<input type="password" name="password">   
وهذا الحقل مخصص للرقم السري وسنضع بعد كل حقل ادخال وسم  <br>  ليكون كل حقل ادخال في سطر 
الان قم بحفظ الملف باسم reg بصيغة   php  كما شرحت سابقا وفي حال واجهت أي مشاكل لا تقلق سأقوم بوضع الكود بالكامل عند الانتهاء من بناء الصفحة بالكامل نهاية هذا الجزء

يتبقى الان إضافة زر تسجيل 
وزر تسجيل دخول سنقوم بربطه لاحقا مع صفحة تسجيل الدخول عموما سنقوم بإنشاء زر بنفس طريقة الادخال السابقة ولكن سنقوم بتغيير نوع الادخال واسم المدخل 
<input type="submit" name ="reg" value="سجل حسابك الان"><br>
<input type="submit" name ="login" value="سجل دخول">
كما تلاحظ استخدمنا نفس كود الادخال ولكن غيرنا النوع الى  , submit وهذا الأخير نوع ازرار النقر في لغة html وعادة ما يستخدم مع النماذج فقط 
لنشاهد مثال مصور لنتيجة النموذج بعد إضافة الازرار 

ربط الفورم بقاعدة البيانات باستخدام php  و mysql
أولا نقم بفتح وسم php فوق الفورم 
وقوم باستدعاء ملف الربط مع قاعدة البيانات الذي قمنا ببرمجته سابقا باستخدام الكود التالي 
require_once('connect.php');
وبعد ذلك نقوم بكتابة دالة شرطية في حالة ضغط المستخدم على زر التسجيل لإجراء بعض الوظائف والاستعلامات البرمجية 
if(isset($_POST) & !empty($_POST)){{
بمعنى اذا قام المستخدم بإدخال البيانات وكان النموذج غير فارغ قم بأجراء بعض الوظائف التي سنكتبها باخل قوسي الدالة الشرطية {}
اول وظيفة سنقوم بعملها هي الربط بين حقول الادخال وحقول جدول قاعدة البيانات المخصص للمستخدمين وهو login
وعملية الربط كالاتي :
نقوم بكتابة متغير للمستخدم وهو يمثل نفس الاسم الموجود في حقل قاعدة البيانات بعد ذلك نحدد نوع النموذج post ثم ما يقابله من اسم الادخال في كود html وتلافيا للأخطاء قمت بتعريف المدخل بنفس الاسم الموجود في قاعدة البيانات ليكون كالاتي 
$username = mysqli_real_escape_string($connection, $_POST['username']);
ونقوم كذلك بتطبيق نفس الطريقة لحقل البريد وكلمة المرور مع تغيير الأسماء كما سجلناها سبقا 
$email = mysqli_real_escape_string($connection, $_POST['email']);
$password = md5($_POST['password']);
مع تغيير كود الربط مع الرقم السري مع إضافة التشفير md5 كما في المثال السابق ليتم تخزينها بشكل مشفر في قاعدة البيانات لزيادة خصوصية كلمة المرور للمستخدم 
الان بعد عملية ربط الخلايا 
نقوم بعمل استعلام لقاعدة البيانات نطلب منه ارسال البيانات المدخلة وتخزينها في قاعدة البيانات 
$sql = "INSERT INTO `login` (username, email, password) VALUES ('$username', '$email', '$password')";
نلاحظ امر الادخال في كود sql السابق هو INSERT INTO `login` بمعنى ادخال البيانات الى جدول محدد وهو login والقيم هي اسم المستخدم وكلمة المرور والبريد بما يقابلنها من أسماء حقول في قاعدة البيانات
مع إضافة كود تحقق ارسال النتائج مع كود الاتصال 
$result = mysqli_query($connection, $sql);
مع إضافة دالة شريطة في حالة الاتصال تقوم بطباعة رسالة " تم التسجيل بنجاح وفي حالة الفشل تطبع رسالة فشل التسجيل حاول مرة أخرى"
if($result){
$smsg = "تم التسجيل بنجاح";
}else{
$fmsg = "فشل التسجيل حاول مرة اخرى";
}
وقوم بتحديد موقع كتابة رسائل نجاح التسجيل وفشله في اعلى كود النموذج داخل html ليكون كالاتي 
<?php if(isset($smsg)){ ?><div class="alert alert-success" role="alert"> <?php echo $smsg; ?> </div><?php } ?>
      <?php if(isset($fmsg)){ ?><div class="alert alert-danger" role="alert"> <?php echo $fmsg; ?> </div><?php } ?>
لنقم بتجربة النموذج بعد الانتهاء من الربط في مثال مصور 


ونلاحظ نجاح رفع البيانات الى قاعدة البيانات 
صورة من جدول البيانات :


نلاحظ تشفير كلمة المرور بشكل تلقائي وذلك بفضل دالة md5
نقوم الان بتجربة فعالية الكود نقوم أولا بالتسجيل بنفس المستخدم لتحقق من فعالية المفتاح الفريد الذي حددناه سابقا ومره أخرى بمستخدم اخر للتحقق من فعالية النموذج 


  نلاحظ ارسال البيانات بشكل ناجح وتسجيل عضو جديد وتخزينه في الجدول

الان بعد اكتسابك خبره لابأس بها في عملية الربط بين صفحات موقعك و قاعدة البيانات سننتقل الان لصفحة تسجيل الدخول ولكن قبل ذلك سأضع لك كود صفحة التسجيل لتجربته او التعديل عليه او أي كان هدفك من حضور هذه الدورة 

<html>
<head>
<title></title>
</head>
<body>
<?php
require_once('connect.php');
if(isset($_POST) & !empty($_POST)){
$username = mysqli_real_escape_string($connection, $_POST['username']);
$email = mysqli_real_escape_string($connection, $_POST['email']);
$password = md5($_POST['password']);

$sql = "INSERT INTO `login` (username, email, password) VALUES ('$username', '$email', '$password')";
$result = mysqli_query($connection, $sql);
if($result){
$smsg = "تم التسجيل بنجاح";
}else{
$fmsg = "فشل التسجيل حاول مرة اخرى";
}
}


?>
 <?php if(isset($smsg)){ ?><div class="alert alert-success" role="alert"> <?php echo $smsg; ?> </div><?php } ?>
      <?php if(isset($fmsg)){ ?><div class="alert alert-danger" role="alert"> <?php echo $fmsg; ?> </div><?php } ?>
<form method="post">
<input type="text" name="username"><br>
<input type="email" name="email"><br>
<input type="password" name="password"><br>
<input type="submit" name ="reg" value="سجل حسابك الان"><br>

</form>
</body>
</html>
صفحة تسجيل الدخول 
نقوم بعمل نموذج html  يحتوي على حقلي ادخال لاسم المستخدم وكلمة المرور وزر تسجيل الدخول بعد ذلك نقوم بعمل نفس عملية الربط السابقة مع بعض الاختلافات التي سأشرحها في هذه المرحلة 
بعد عمل النموذج واضافة كود ربط صفحة الاتصال بقاعدة البيانات نقوم بفتح وسم php اعلى النموذج ونقوم  بعمل الاتي : 
عمل كود بدء الجلسة في حالة كان الاتصال ناجح وغالبا ما يفضل ان يكون اعلى الصفحة 
session_start();?>
وفي كود php منفصل 
بعد ذلك نقوم بعمل دالة شرطية لربط حقول النموذج بحقول القاعدة وقد تم شرح الالية سابقا 
ولكن الاختلاف في استعلام كود sql بحيث يكون عبارة عن جلب للبيانات وليس تخزين للبيانات كما شرحنا في الشرح السابق فهنا ستستخدم الاستعلام select بحيث يكون كالاتي : 
sql = "SELECT * FROM `login` WHERE username='$username' AND password='$password'";
$result = mysqli_query($connection, $sql);
$count = mysqli_num_rows($result);
بحيث نقوم بجلب البيانات المخزنة في حال كانت البيانات المدخلة مطابقه للبيانات المخزنة في قاعدة البيانات 
ونقوم بعمل دالة شرطية أخرى اذا كانت البيانات مطابقة ==1 أي يوجد نتيجة نطلب من الكود عمل الاتي : 
نقوم بعمل جلسة بناء على اسم المستخدم 
if($count == 1){
$_SESSION['username'] = $username;
}
وفي حال كانت البيانات غير مخزنة على القاعدة نطلب طباعة جملة خطأ 
else{

$fmsg = "<div class='fmsg fmg'>دخول فاشل تاكد من اسم المستخدم او كلمة المرور</div>";

ملاحظة ستلاحظ ان الكود يحتوي على وسم <div> والهدف من ذلك استدعائها في مرحلة التصميم لاحقا وهي ليست إضافة ضرورية للكود في الوقت الحالي لذا وجيب التوضيح 
وبعد ذلك نقوم بعمل عملية إعادة توجيه في حال حصلة عملية الاتصال وانشاء الجلسة ونطلب من الصفحة تحويل المستخدم الى صفحة ترحيب وهي حاليا لم يتم انشائه ولكن قمت بعمل هذا الاجراء من باب اختصار الوقت والانتهاء من صفحة تسجيل الدخول بشكل كامل 
f(isset($_SESSION['username'])){
$smsg = "<div class='smsg'>دخول ناجح</div>";
echo "
<meta HTTP-EQUIV='REFRESH' content='0; url=welcome.php'/>";
ويعني هذا الكود اذا تم انشاء الجلسة نقوم بطباعة جملة دخول ناجح بالإضافة الى إعادة توجيه المستخدم بشكل تلقائي الى صفحة الترحيب 

الان قم بإضافة الكود المصدري كاملا وقم بحفظ الصفحة باسم login.php
<?php
session_start();?>

<?php


require_once('connect.php');
if(isset($_POST) & !empty($_POST)){
$username = mysqli_real_escape_string($connection, $_POST['username']);
$password = md5($_POST['password']);

$sql = "SELECT * FROM `login` WHERE username='$username' AND password='$password'";
$result = mysqli_query($connection, $sql);
$count = mysqli_num_rows($result);
if($count == 1){
$_SESSION['username'] = $username;
}else{

$fmsg = "<div class='fmsg fmg'>دخول فاشل تاكد من اسم المستخدم او كلمة المرور</div>";

}
}
if(isset($_SESSION['username'])){
$smsg = "<div class='smsg'>دخول ناجح</div>";
echo "
<meta HTTP-EQUIV='REFRESH' content='0; url=welcome.php'/>";
}


?>
<html>
<?php if(isset($smsg)){ ?><div class="alert alert-success" role="alert"> <?php echo $smsg; ?> </div><?php } ?>
      <?php if(isset($fmsg)){ ?><div class="alert alert-danger" role="alert"> <?php echo $fmsg; ?> </div><?php } ?>
<form method="post">
<input type="text" name="username" placeholder="username"><br>
<input type="password" name="password" placeholder="password"><br>
<input type="submit" name="submit" value="سجل دخول">

</form>
</html>

الرسالة التي ستظهر في حالة ادخال بيانات غير مسجلة من قبل

اما اذا ظهرت هذه الصفحة فالدخول ناجح ولكنه قام بتحويلنا بشكل مباشر الى صفحة الترحيب التي نم نقم ببنائها بعد 

صفحة الترحيب 
الهدف من هذه الصفحة الترحيب بالعضو وقد تكون الصفحة الرئيسية في صفحة بيانات العضو هنا سنقوم بوضع صفحات نماذج استكمال البيانات وبعض الميزات التي لا يمكن للزوار الحصول عليها 
أولا سنقوم بعمل صفحة جديدة باسم welcome.php ثم نربط بيانات الجلسة في هذه الصفحة 
<?php
 session_start();


 if (isset($_SESSION['username'])) {
 ?>
بعد ذلك سنقوم بطباعة جملة ترحيب بالعضو بالإضافة الى إضافة زر تسجيل الخروج 
$user = $_SESSION['username'];

echo"مرحبا  $user   ";
echo"<a href='logout.php'><img src='images/logout.png' width=20px height =20px ></a>";
سنلاحظ انه عند الضغط على زر الخروج في المرحلة الحالية لن يعمل بسبب اننا لم نقم ببرمجة زر الخروج بعد ولكن قمنا بتجهيز الرابط من الان وسنقوم باستكماله في المرحلة التالية لمرحلة الترحيب بالعضو 
بعد ذلك سنطلب من العضو استكمال بياناته مثل الاسم الأول والأخير وتاريخ الميلاد ورفعها في الجدول المخصص لها الذي قمنا ببنائه مسبقا 
ولكن لا نريد ان يظهر نموذج استكمال البيانات اذا كان المستخدم مسجل من قبل لذلك سنقوم أولا بأجراء استعلام بواسطة اسم العضو ومطابقته مع جدول معلومات المستخدم اذا كانت بيانته مكتملة فلن يظهر له النموذج اما اذا كان عكس ذلك سيتم عرضه لاستكمال البيانات فالحل الأفضل في هذه الحالة ان نجري الاستعلام أولا ثم اظهار النموذج 
ولكن قبل ذلك سنقوم بعمل صفحة اتصال جديده ونقوم بتسميتها db.php وسنضع بداخلها كود الاتصال التالي 
<?php 
$servername = "localhost";
$username = "root";
$password = "الرقم السري لقاعدة البيانات";
$dbname = "order";

// Create connection




$conn = new mysqli ($servername, $username, $password, $dbname  );

// Check connection
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error);
}?> 
وبعد حفظه نقوم باستدعائه لصفحة الترحيب باستخدام الكود التالي 
require("db.php");
بعد ذلك سنقوم بعمل استعلام اذا كان العضو قد قام بإدخال بياناته في صفحة استكمال البيانات من قبل بواسطة المقارنة باسم المستخدم في الجلسة واسم المستخدم في الجدول : 
$sql="select * from userinformation where username = '".$_SESSION['username']."'";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
وفي حالة كانت النتيجة اكبر من 0 في الجدول بمعنى توجد بيانات سنقوم بطباعة جملة تهنئة 
echo "<br>تهانينا بياناتك مكتملة   <img src='images/complete.png' width=30px height =30px >"
وسنقوم بفتح ايقونة جديدة تتيح له تقديم طلبه للمختصين 
echo "<a href='mycase.php'> قدم طلبك للمختصين  <img src='images/explane.png' width=30px height =30px > </a>";
اما اذا لم يقوم المستخدم باستكمال بياناته سنطلب منه تعبئة نموذج البيانات الشخصية أولا 
باستخدام دالة else
else{echo "<br>يرجى إستكمال بياناتك لخدمتك بشكل أفضل   <img src='images/Reg-online.png' width=30px height =30px >  ";
include 'insertuserdata.php';}
هنا الان انتيهنا من هذه الصفحة ولكن نلاحظ اننا ادرجنا روابط صفحات لم نقم ببنائها بعد لذلك قبل ان نقوم بتشغيل الصفحة يتوجيب علينا بناء هذا الصفحات أولا 

صفحة تسجيل الخروج 
قم بفتح ملف جديد وقم بتسميته logout.php
وقم بكتابة الاكواد التالية بداخله
<?php
session_start();
session_destroy();
header('location: login.php');
?>
بحيث نطلب من هذه الصفحة تدمير بيانات الجلسة وتحويل المستخدم مجددا الى صفحة تسجيل الدخول 

صفحة استكمال البيانات 
قم بانشاء صفحة جديدة باسم 
'insertuserdata.php
وهنا سنقوم ببناء نموذج كما شرحنا سابقا وكود ادخال البيانات الى القاعدة مع تغيير اسم الجدول فقط ولا يوجد ما ميميز هذا النموذج فقد تم شرح نماذج مشابهه في الأعلى 
<?php
 


 if (isset($_SESSION['username'])) {
 ?>
<form method="POST">
<label for="input FIRST NAME" class="sr-only" hidden="">username</label>
<input type="text" name="username" id="inputEmail" class="form-control" value="<?php echo $user;?>" required autofocus readonly="" hidden =""><br>
<label for="input FIRST NAME" class="sr-only">اسمك </label>
<input type="text" name="firstname" id="inputEmail" class="form-control" placeholder="الاسم الأول " required autofocus>
<label for="input FIRST NAME" class="sr-only">اسم الاب</label>
<input type="text" name="middlename" id="inputEmail" class="form-control" placeholder="اسم الاب" required autofocus>
<label for="input FIRST NAME" class="sr-only">اسم العائلة</label>
<input type="text" name="lastname" id="inputEmail" class="form-control" placeholder="اسم العائلة" required autofocus>
<br>
<label for="input FIRST NAME" class="sr-only">الجنس</label>
<select name="gender">
<option>ذكر</option>
<option>انثى</option>
</select><br>
<label for="input FIRST NAME" class="sr-only">تاريخ الميلاد</label>
<input type="date" name="dateofbirth" id="inputEmail" class="form-control"  required autofocus>
<br><label for="input FIRST NAME" class="sr-only">رقم الجوال</label>
<input type="number" name="phonenumber" id="inputEmail" class="form-control" placeholder="966555555555" required autofocus>
<input type="submit" name="submit" value="سجل بياناتك">
</form>
 <?php


require_once('connect.php');

if(isset($_POST) & !empty($_POST)){
$username = mysqli_real_escape_string($connection, $_POST['username']);
$firstname = mysqli_real_escape_string($connection, $_POST['firstname']);
$middlename = mysqli_real_escape_string($connection, $_POST['middlename']);
$lastname = mysqli_real_escape_string($connection, $_POST['lastname']);
$gender = mysqli_real_escape_string($connection, $_POST['gender']);
$dateofbirth = mysqli_real_escape_string($connection, $_POST['dateofbirth']);
$phonenumber = mysqli_real_escape_string($connection, $_POST['phonenumber']);

$sql = "INSERT INTO `userinformation` (username, firstname, middlename,lastname,gender,dateofbirth,phonenumber) VALUES ('$username', '$firstname', '$middlename','$lastname','$gender','$dateofbirth','$phonenumber')";
$result = mysqli_query($connection, $sql);
if($result){
echo  "تم حفظ بياناتك بنجاح  ";
$page = $_SERVER['PHP_SELF'];
$sec = "5";
echo "جاري رفع بياناتك خلال خمس ثواني";

}else{
echo  "يوجد مشكلة في رفع بياناتك حاول مره ارخرى";
}
   ?>
   <html>
    <head>
    <meta http-equiv="refresh" content="<?php echo $sec?>;URL='<?php echo $page?>'">
    </head>
    <body>
    <?php
        
    ?>
    </body>
</html>

<?php

 } else {
   ?>
   Not logged in HTML and code here
   <?php
 }?>

صفحة تقديم الطلبات :
قم بفتح صفحة جديده باسم mycase.php
وهنا سنقوم ببناء نموذج لتعبئة الطلب وسنقوم بربطه بالجدول المخصص مسبقا 
كذلك لا يوجد اكواد مميزه جميعها بنفس المبادئ السابقة باستثناء بعض الاكواد المهمة مثل رقم الطلب هنا نريد من الكود اجراء رقم طلب تلقائي بشكل عشوائي للمستخدم وتخزينه في خانه المخصصة في جدول البيانات لذا سنستخدم دالة انشاء الأرقام العشوائية التالية 
$randomNumber = rand(100000,999999);
وكذلك سنطلب من الصفحة بعد ادخال البيانات تحديث الصفحة خلال 5 ثواني وطابعة بيانات الطلب في نفس الصفحة كما ستلاحظ فأننا استخدمنا استعلامين مختلفين لنفس الجدول الأول insert  والأخر select  وستكون إجراءات الطلب للعميل اختياريه بحيث يمكنه تقديم اكثر من طلب ولكن سنقوم بتنبيهه بعدم ارسال طلب جديد في حال كان الطلب مفتوح او تحت الاجراء كذلك سنعرض له اخر طلب فقط في الصفحة باستخدام امر sql  التصنيفي التالي ORDER BY id DESC
LIMIT 1;
كذلك سنقوم بتخزين وقت الطلب والتاريخ بشكل تلقائي عند تعريف الربط بين نموذج الادخال وحقول قاعدة البيانات فهذه البيانات يجيب ان تكون تلقائية دون تدخل العميل 
$dateofcase=date('Y-m-d H:i:s');
  $timeofcase= date_default_timezone_set("Asia/Riyadh");
  $timeofcase=date("h:i:sa");
الكود المصدري للصفحة كاملا : 
<?php
 session_start();


 if (isset($_SESSION['username'])) {
 ?>



<?php

$user = $_SESSION['username'];

echo"مرحبا  $user   ";
echo"<a href='logout.php'><img src='images/logout.png' width=20px height =20px ></a>";

?>
<!DOCTYPE html>
<html lang="ar" dir="rtl">
<head>
<title></title>
</head>
<body>


<img src="images/undraw_medicine_b1ol.svg" height="200px">

<br>
<h4>هل تريد تسجيل طلب جديد ؟ </h4><br>
<h6>في حال كان طلبك "مفتوح" أو "تحت الإجراء" ينصح بعدم تقديم طلب جديد حتى تكون حالة طلبك "مغلق"</h6>
<form method="POST">
<label for="input FIRST NAME" class="sr-only" hidden="">username</label>
<input type="text" name="username" id="inputEmail" class="form-control" value="<?php echo $user;?>" required autofocus readonly="" hidden="">

<?php

require("db.php");
$sql="select * from userinformation where username = '".$_SESSION['username']."'";
$result = $conn->query($sql);
if ($result->num_rows > 0) {echo "<br>";

while($row = $result->fetch_assoc()) {

echo "<input type ='text' name='firstname' value=";
echo $row['firstname'];
echo " hidden=''>";

echo "<input type ='text' name='lastname' value=";
echo $row['lastname'];
echo " hidden=''>";

echo "<input type ='text' name='phonenumber' value=";
echo $row['phonenumber'];
echo " hidden='' >";
$randomNumber = rand(100000,999999);

}}else{echo "تشير سجلاتنا بانه لا يوجد لديك عنوان مسجل حاليا سجل واحدا من الاعلى ";
}





?>


<input type="text" name="statusofcase" id="inputEmail" class="form-control" value="مفتوح" required autofocus readonly=""hidden="" >
<input type="text" name="caseid" id="inputEmail" class="form-control" value="07<?php echo $randomNumber;?>" required autofocus readonly="" hidden=""><br>
<label for="input FIRST NAME" class="sr-only">قدم طلبك للمختصين</label><br>
<textarea name="mycase" required=""></textarea><br>
<input type="submit" name="submit" value="send">
<a href="welcome.php"> العودة لحسابك</a>
</form>
 <?php


require_once('connect.php');

if(isset($_POST) & !empty($_POST)){
$username = mysqli_real_escape_string($connection, $_POST['username']);
$firstname = mysqli_real_escape_string($connection, $_POST['firstname']);
$lastname = mysqli_real_escape_string($connection, $_POST['lastname']);
$dateofcase= date_default_timezone_set("Asia/Riyadh");
  $dateofcase=date('Y-m-d H:i:s');
  $timeofcase= date_default_timezone_set("Asia/Riyadh");
  $timeofcase=date("h:i:sa");
$statusofcase = mysqli_real_escape_string($connection, $_POST['statusofcase']);
$caseid = mysqli_real_escape_string($connection, $_POST['caseid']);
$mycase = mysqli_real_escape_string($connection, $_POST['mycase']);
$phonenumber = mysqli_real_escape_string($connection, $_POST['phonenumber']);

$sql = "INSERT INTO `cases` (username,firstname, lastname,dateofcase,timeofcase,statusofcase,caseid,mycase,phonenumber) VALUES ('$username', '$firstname', '$lastname','$dateofcase','$timeofcase','$statusofcase','$caseid','$mycase','$phonenumber')";
$result = mysqli_query($connection, $sql);
if($result){
echo  "تم ادخال طلبك بنجاح";
$page = $_SERVER['PHP_SELF'];
$sec = "5";
echo "Watch the page reload itself in 5 second!";

}else{
echo  "فشل ادخال طلبك عاود المحاولة مرة اخرى";
}
   ?>

   <html>
    <head>
    <meta http-equiv="refresh" content="<?php echo $sec?>;URL='<?php echo $page?>'">
    </head>
    <body>
    <?php
        
    ?>
    </body>
</html>

<h4>طلباتك ا الحالية: </h4>

<?php  


require("db.php");
$sql="select * from cases where username = '".$_SESSION['username']."' ORDER BY id DESC
LIMIT 1;";
$result = $conn->query($sql);
if ($result->num_rows > 0) {echo "<br>";

while($row = $result->fetch_assoc()) {
echo "نص الطلب   :" . $row["mycase"]. " -حالة الطلب:  " . $row["statusofcase"]. " -رقم الطلب: " . $row["caseid"]. "<br>";



}}else{echo "تشير سجلاتنا بانه لا يوجد لديك طلبات سابقة ";
}


بعد وصولك لهذه المرحلة تكون قد اختتمت المرحلة الثانية بالكامل وهي مرحلة برمجة منصة العميل 
وفيما يلي امثله مصورة لصفحة تحكم العميل : 



وفيما يلي صور من قاعدة البيانات تثبت ارسال البيانات بنجاح : 




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

أولا قم بإنشاء صفحات تسجيل دخول وتسجيل للمدراء وصفحة ترحيب مثل الخطوات السابقة مع بعض التعديلات ولكن سنقوم بأغلاق هذه الصفحة او إعادة فتحها بضغطة زر من مدير الموقع لتلافي أي ثغرات او محاولة تسجيل اشخاص لا يملكون صلاحية الوصول لهذا الصفحة الحساسة 
أولا صفحة تسجيل الإدارة 
قم بإنشاء مجلد منفصل باسم admincp داخل مجلد المشروع ثم قم  بإضافة صفحتي الاتصال السابقة في نفس المجلد ثم قم بإنشاء صفحة جديدة باسم register.php
الان سنقوم بعمل نموذج تسجيل وسنقوم بربط الاستعلامات بجدول تسجيل دخول الإدارة بنفس الخطوات السابقة مع تغيير اسم الجدول فقط ولكن سنقوم بتغيير ربط الحقول باسم الحقول الموجودة في جدول الإدارة 
اما الخطوة الجديدة في هذه الصفحة سنقوم بإنشاء استعلام في اعلى الصفحة في كود PHP منفصل مع جدول ALLOW اذا كانت قيمة القيمة المخزنة في الجدول = open  سيسمح بتسجيل عضوية إدارية جديدة اما اذا كانت فارغة او close  
فتظهر رسالة access denied الان سنتوجه لقاعدة البيانات وسنقوم بأدراج القيمة open حتى نستطيع بعد كتابة البرنامج تسجيل عضوية للمدير 


هذه الخطوة سنقوم بأجرائها مرة واحدة فقط وبعد ذلك ستتحدث حالة التسجيل في حالة قام المدير بفتح الصلاحية من لوحة التحكم وسنتطرق لها لاحقا 
الان قم بتنفيذ الاستعلام في صفحة التسجيل 
require("db.php");
$sql = "SELECT valuereg FROM allow WHERE valuereg='open'";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
  // output data of each row
  while($row = $result->fetch_assoc()) {


echo "التسجيل مفتوح";
وقم بحظ الملف


كما تلاحظ تم فتح التسجيل قم بتسجيل عضوية 

كود الصفحة كاملا : 




<div class="header">
  <h1>لوحة تحكم الإدارة</h1>
 
</div>

<?php  


require("db.php");
$sql = "SELECT valuereg FROM allow WHERE valuereg='open'";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
  // output data of each row
  while($row = $result->fetch_assoc()) {


echo "التسجيل مفتوح";
echo "<br>";
echo '<!DOCTYPE html>
<html>
<head>
<title>User Registration in PHP & MySQL</title>
<!-- Latest compiled and minified CSS -->

<!-- Latest compiled and minified JavaScript -->
<script src="" ></script>

<link rel="stylesheet" type="text/css" href="styles.css">
</head>
<body>
<div class="container">
      <?php if(isset($smsg)){ ?><div class="alert alert-success" role="alert"> <?php echo $smsg; ?> </div><?php } ?>
      <?php if(isset($fmsg)){ ?><div class="alert alert-danger" role="alert"> <?php echo $fmsg; ?> </div><?php } ?>
      <form class="form-signin" method="POST">
        <h2 class="form-signin-heading">تسجيل الاداريين</h2>
        <div class="input-group">
  <span class="input-group-addon" id="basic-addon1">@</span>
  <input type="text" name="adminusername" class="form-control" placeholder="adminUsername" required>
</div>
        <label for="inputEmail" class="sr-only">Email address</label>
        <input type="email" name="email" id="inputEmail" class="form-control" placeholder="Email address" required autofocus>
        <label for="inputPassword" class="sr-only">Password</label>
        <input type="password" name="password" id="inputPassword" class="form-control" placeholder="Password" required>
        
        <button class="btn btn-lg btn-primary btn-block" type="submit">سجل!</button>
        <a class="btn btn-lg btn-primary btn-block" href="login.php">دخول</a>
      </form>
</div>
</body>
</html>';

}}else{echo "<center><h2>ACCESS DENIED </h2>";
echo '<img src="images/undraw_access_denied_6w73.svg" height="300px">';
}



?>

<?php
require_once('connect.php');
if(isset($_POST) & !empty($_POST)){
$adminusername = mysqli_real_escape_string($connection, $_POST['adminusername']);
$email = mysqli_real_escape_string($connection, $_POST['email']);
$password = md5($_POST['password']);

$sql = "INSERT INTO `adminlogin` (adminusername, email, password) VALUES ('$adminusername', '$email', '$password')";
$result = mysqli_query($connection, $sql);
if($result){
echo  "User Registration successfull";
}else{
echo "User registration failed";
}
}


?>

صفحة تسجيل الدخول 
قم بانشاء صفحة جديدة باسم login.phpثم كتابة نموذج مثل الأمثلة السابقة في صفحة الأعضاء مع تغيير اسم الجلسة الى 
$_SESSION['adminusername'] وتغيير حقول الادخال بنفس الحقول المضافة في صفحة التسجيل


كود الصفحة :
<?php
session_start();
require_once('connect.php');
if(isset($_POST) & !empty($_POST)){
$adminusername = mysqli_real_escape_string($connection, $_POST['adminusername']);
$password = md5($_POST['password']);

$sql = "SELECT * FROM `adminlogin` WHERE adminusername='$adminusername' AND password='$password'";
$result = mysqli_query($connection, $sql);
$count = mysqli_num_rows($result);
if($count == 1){
$_SESSION['adminusername'] = $adminusername;
}else{

$fmsg = "<div class='fmsg fmg'>تم ضبط محاولة دخول فاشلة وغير مصرح بها </div>";

echo '

<embed src="style/police.mp3" autostart="true" loop="true" height ="0px">

';
}
}
if(isset($_SESSION['adminusername'])){
$smsg = "<div class='smsg'>دخول ناجح</div>";
echo "
<meta HTTP-EQUIV='REFRESH' content='0; url=welcome.php'/>";
}


?>

<div class="container">
      <?php if(isset($smsg)){ ?><div class="alert alert-success" role="alert"> <?php echo $smsg; ?> </div><?php } ?>
      <?php if(isset($fmsg)){ ?><div class="alert alert-danger" role="alert"> <?php echo $fmsg; ?> </div><?php } ?>
      <form class="form-signin" method="POST">
        <h2 class="form-signin-heading">منطقة الادارة - تسجيل الدخول</h2>
        <div class="input-group">
  <span >@</span>
  <input type="text" name="adminusername" placeholder="adminUsername" required>
</div>
        <label for="inputPassword" class="sr-only">Password</label>
        <input type="password" name="password"   placeholder="Password" required>
        <button class="btn btn-lg btn-primary btn-block" type="submit">دخول</button>
      
      </form>
</div>
</body>
</html>
صفحة الترحيب 
قم بانشاء صفحة جديدة باسم welcome.php
في هذه الصفحة لا يوجد أي كود جديد فقط ستكون صفحة ترحيب مع إضافة ايقونات لعرض العملاء وقائمة الطلبات وتسغيل وإيقاف صفحة تسجيل الإدارة وايقونة أخيرة لعرض المدراء المسجلين 
وأفترض عند وصولك لهذه المرحلة انك تستطيع عمل ازرار النقر وربطها بصفحاتها 

كود الصفحة : 
<!DOCTYPE html>
<html lang="ar" dir="rtl">
<head>

<title></title>
</head>
<div class="header">
  <h1>لوحة تحكم الإدارة</h1>
 <?php
 session_start();


 if (isset($_SESSION['adminusername'])) {
 ?>
<?php

$user = $_SESSION['adminusername'];

echo"مرحبا  $user";
echo"<a href='logout.php'>سجل خروج</a>";

?> 
</div>
<body><center>






<br>
<img src="images/undraw_dashboard_nklg.svg" height="300px">
<br>
<a href="customers.php">قائمة العملاء</a>

<a href="customerscases.php">قائمة الطلبات</a>
<a href="allowadmins.php">تشغيل /تعطيل تسجيل اداري جديد</a>
<a href="admins.php">الاداريين المسجلين واصحاب الصلاحيات</a>






 <?php

 } else {
   ?>
   Not logged in HTML and code here
   <?php
 }?>
 </html>


سأقوم الان بعرض اكواد الصفحات دفعة واحد ولكن ساشرح نقطة واحدة مهمه  صفحة التحكم بتسجيل المدراء لألية عمل الكود 
بما اننا سمحنا بتسجيل المدراء من القاعدة سابقا الان سنضيف استعلام يقوم بتحديث حالة الجدول باستخدام امر sql  لتحديثات الجداول update عند ضغط اداري الموقع على زر التشغيل او زر الإغلاق 
$sql="UPDATE allow 
                      SET valuereg =  '$valuereg'
                      WHERE id = '1'" ;

صفحة عرض العملاء customers.php
<!DOCTYPE html>
<html lang="ar" dir="rtl">
<head>
<title></title>
</head>
<body>

<div class="header">
  <h1>لوحة تحكم الإدارة</h1>
 <?php
 session_start();


 if (isset($_SESSION['adminusername'])) {
 ?>
<?php

$user = $_SESSION['adminusername'];

echo"مرحبا  $user";
echo"<a href='logout.php'>سجل خروج</a>";

?> 
</div>
<body><center><br>
  <img src="images/undraw_personal_info_0okl.svg" height="200px">
<br>
<a href="customerscases.php
">قائمة الطلبات</a>
<a href="welcome.php">العودة للوحة الادارة</a><br><br>




<table><tr><th>اسم المستخدم</th><th>الاسم الأول</th><th>اسم الأب</th><th>اسم العائلة</th><th>الجنس</th><th>تاريخ الميلاد</th><th>رقم الجوال </th><th>العمر</th></tr>

<?php  


require("db.php");
$sql="select * from userinformation  ORDER BY id DESC;";
$result = $conn->query($sql);

if ($result->num_rows > 0) {

while($row = $result->fetch_assoc()) {

  $dob="". $row["dateofbirth"]."";
    $diff = (date('Y') - date('Y',strtotime($dob)));
    
echo "<tr><td>" . $row["username"]. "</td><td>" . $row["firstname"]. "</td><td>" . $row["middlename"]. "</td><td>". $row["lastname"]."</td><td>". $row["gender"]."</td><td>". $row["dateofbirth"]."</td><td>" . $row["phonenumber"]. "</td>"
;
echo "<td>";
 echo $diff;
 echo "</td>";
echo "<tr>";

}}else{echo "تشير سجلاتنا بانه لا يوجد لديك عنوان مسجل حاليا سجل واحدا من الاعلى ";
}



?>




</table><meta http-equiv="refresh" content="<?php echo $sec?>;URL='<?php echo $page?>'">
 <?php

 } else {
   ?>
   Not logged in HTML and code here
   <?php
 }?>
 </html>
صفحة عرض الطلبات customerscases.php وتحتوي هذه الصفحة على ايقونة التواصل من خلال الواتساب بضغطة زر 
<!DOCTYPE html>
<html lang="ar" dir="rtl">
<head>
<title></title>

</head>
<body>


<div class="header">
  <h1>لوحة تحكم الإدارة</h1>
 <?php
 session_start();


 if (isset($_SESSION['adminusername'])) {
 ?>
<?php

$user = $_SESSION['adminusername'];

echo"مرحبا  $user";
echo"<a href='logout.php'>سجل خروج</a>";

?> 
</div>
<body><center><br>
  <img src="images/undraw_prioritise_tgdh.svg" height="200px">
<br>
<a href="customers.php
">قائمة العملاء</a>
<a href="welcome.php">العودة للوحة الادارة</a><br>
<div id="formadmin">
<form method='POST'>
<label>حدث حالة الطلب</label><select name='updatestatusofcase' required="">
<option>مفتوح</option>
<option>تحت الاجراء</option>
<option>مغلق</option>
</select>
<label>ادخل رقم الطلب </label><input type="text" name="updatecaseid" required="">


<input type='submit' name='update' value='تحديث'>
</form></div><br>


<table><tr><th>اسم المستخدم</th><th>الاسم الأول</th><th>اسم العائلة</th><th>تاريخ تقديم الطلب</th><th>الوقت</th><th>حالة الطلب</th><th>رقم الطلب</th><th>الحالة</th><th>رقم التواصل</th><th>whatsapp</th></tr>

<?php  


require("db.php");
$sql="select * from cases  ORDER BY id DESC;";
$result = $conn->query($sql);

if ($result->num_rows > 0) {

while($row = $result->fetch_assoc()) {
echo "<tr><td>" . $row["username"]. "</td><td>" . $row["firstname"]. "</td><td>" . $row["lastname"]. "</td><td>". $row["dateofcase"]."</td><td>". $row["timeofcase"]."</td><td>". $row["statusofcase"]."</td><td>" . $row["caseid"]. "</td><td>". $row["mycase"]. "</td><td>" . $row["phonenumber"]. "</td><td><a href='https://wa.me/". $row["phonenumber"]."'>whatsapp</td"
;

echo "<tr>";

}}else{echo "تشير السجلات بانه لا يوجد طلبات مسجلة حتى الان ";
}



?>


<?php 
require_once('connect.php');
if(isset($_POST['update'])){
$updatestatusofcase = mysqli_real_escape_string($connection, $_POST['updatestatusofcase']);
$updatecaseid = mysqli_real_escape_string($connection, $_POST['updatecaseid']);

$sql="UPDATE cases 
                      SET statusofcase =  '$updatestatusofcase'
                      WHERE caseid = '$updatecaseid'" ;
$result = mysqli_query($connection, $sql);
if($result){
$page = $_SERVER['PHP_SELF'];
$sec = "5";
echo "تم تحديث الطلب بنجاح  فضلا انتظر 5 ثوان";}else{echo "none";}}
 ?>

</table><meta http-equiv="refresh" content="<?php echo $sec?>;URL='<?php echo $page?>'">
 <?php

 } else {
   ?>
   Not logged in HTML and code here
   <?php
 }?>
 </html>
صفحة تشغيل واغلاق تسجيل الإداريين : 
Allowadmins.php
<!DOCTYPE html>
<html dir="rtl">



<div class="header">
  <h1>لوحة تحكم الإدارة</h1>
 <?php
 session_start();


 if (isset($_SESSION['adminusername'])) {
 ?>
<?php

$user = $_SESSION['adminusername'];

echo"مرحبا  $user";
echo"<a href='logout.php'>سجل خروج</a>";

?> 
</div><center>
<a href="welcome.php">العودة للوحة  الادارة الرئيسية</a><br>
<img src="images/undraw_warning_cyit.svg" height="200px">
<h3 id="waring">
عزيزي الإداري ان اتخاذك لهذا الاجراء يعتبر تحت مسؤليتك الشخصية فعند فتح التسجيل للإداريين او لاي شخص يمكنه الوصول لصفحة التسجيل فانك تمنحه الصلاحية الكاملة بالتحكم بالموقع ، لذا وجب التنويه  ويجب عليك كاداري التحقق دائما من اغلاق صفحة تسجيل الاداريين عند الانتهاء 
</h3>
<a href="register.php">يجب عليك التحقق من حالة التسجيل من هذا الرابط قبل  اتخاذ أي اجراء</a>
<div id="formadmin">
<form method='POST'>
<label>فتح / اغلاق تسجيل الاداريين</label><select name='valuereg' placeholder="select"  required="">
<option value="" disabled selected>Select your option</option>
<option value="open">open</option>
<option value="close">close</option>
</select>
<input type="submit" name="update" value="فتح / اغلاق">

<?php 
require_once('connect.php');
if(isset($_POST['update'])){
$valuereg = mysqli_real_escape_string($connection, $_POST['valuereg']);


$sql="UPDATE allow 
                      SET valuereg =  '$valuereg'
                      WHERE id = '1'" ;
$result = mysqli_query($connection, $sql);
if($result){
$page = $_SERVER['PHP_SELF'];
$sec = "5";
echo "تم التحديث انتظر 5 ثوان ";
}else{echo "لم يتم الاجراء لوجود مشكلة ما ";}}
 ?>

<meta http-equiv="refresh" content="<?php echo $sec?>;URL='<?php echo $page?>'">

<?php

 } else {
   ?>
   Not logged in HTML and code here
   <?php
 }?>
 </html>
صفحة الإداريين المسجلين وأصحاب الصلاحيات 
Admins.php
<!DOCTYPE html>
<html lang="ar" dir="rtl">
<head>
<title></title>
</head>
<body>

<div class="header">
  <h1>لوحة تحكم الإدارة</h1>

 <?php
 session_start();


 if (isset($_SESSION['adminusername'])) {
 ?>
<?php

$user = $_SESSION['adminusername'];

echo"مرحبا  $user";
echo"<a href='logout.php'>سجل خروج</a>";

?> 
</div>
<body><center><br>
  <img src="images/crown-pngrepo-com.png" height="200px">
<br>

<a href="welcome.php">العودة للوحة الادارة</a><br><br>




<table><tr><th>اسم المستخدم للإداري</th><th>البريد الإلكتروني</th></tr>

<?php  


require("db.php");
$sql="select * from adminlogin  ORDER BY id DESC;";
$result = $conn->query($sql);

if ($result->num_rows > 0) {

while($row = $result->fetch_assoc()) {

 
    
echo "<tr><td>" . $row["adminusername"]. "</td><td>" . $row["email"]. "</td>" ;
echo "<tr>";

}}else{echo "يوجد خطا في استخراج البيانات";
}



?>




</table>
 <?php

 } else {
   ?>
   Not logged in HTML and code here
   <?php
 }?>
 </html>
صور من صفحات لوحة الإدارة : 




الفصل الاخير - تصميم الموقع

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

تعليقات