بسم الله الرحمن الرحيم

سنتعلم ان شاء الله فى هذا الدرس كيفية عمل منتدى باستخدام php و mysql من الألف للياء
هذا الدرس مفيد جدا جدا للراغبين فى احتراف لغة php و طرق تعاملها مع قواعد البيانات .
متطلبات الدرس :
  • - فهم اللغات التالية ( html - css - php - mysql )
  • - فهم التعامل مع phpmyadmin .
  • - خبرة بسيطة بالتصميم لاضافة لمسات جمالية . ( اختيارى )
  • - مستوى الدرس : المستوى المتوسط – اصحاب الخبرة .
و سوف يتم العمل على هذا المنتدى كأنة مشروع متكامل بداية من تصميم قواعد البيانات الى كتابة ملفات Html و تنسيقها بلغة css و اخيرا البرمجة باستخدام php .

نبدأ على بركة الله


أولا : تكوين قاعدة البيانات و الجداول المطلوبة بها .

من الأفضل دائما تكوين و اعداد مخطط لقاعدة البيانات او مايسمى data modal . و الآن دعنا نصف المشروع الذى نقوم ببرمجتة بمنتهى البساطة و هو عبارة عن منتدى يحتوى على مستخدمين بامكانهم اضافة الموضوعات فى داخل الأقسام المختلفة من المنتدى و بامكانهم اضافة التعليقات .

لاحظ من الفقرة السابقة قمنا بتمييز الاسماء التالية ( المستخدمين – التعليقات – الموضوعات – الأقسام ) .
و هى عبارة عن الجداول الرئيسية التى سوف نستخدمها ان شاء الله .
تابع الصورة التالية جيدا لتفهم العلاقة بين جداول قاعدة البيانات و بعضها .



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

سيتم شرح الجداول من خلال شرح أوامر mysql اللازمة لتكوين تلك الجداول . مع العلم انه بامكان اى من برامج تصميم قواعد البيانات مثل wordbench الذى استخدمناه هنا ان يقوم بعمل ملف قاعدة البيانات بالكامل بامتداد .sql بامكانك رفعه مباشرة باستخدام phpmyadmin و لكن الأفضل هو كتابة الاكواد يدويا .لسرعة التمرين و الاتقان .

تكوين جدول المستخدمين :

كود PHP:
CREATE TABLE users (
user_id     INT(8NOT NULL AUTO_INCREMENT,
user_name    VARCHAR(30NOT NULL,
user_pass      VARCHAR(255NOT NULL,
user_email    VARCHAR(255NOT NULL,
user_date    DATETIME NOT NULL,
user_level    INT(8NOT NULL,
UNIQUE INDEX user_name_unique (user_name),
PRIMARY KEY (user_id)
TYPE=INNODB
كما تعلمنا فى دروس mysql فان الجملة (الأمر) CREATE TABLE يقوم بتكوين جدول جديد و اسم الجدول يكتب بعد الجملة السابقة و يصبح الشكل النهائى CREATE TABLE users و بعدها يتم وضع كل الأعمدة الموجودة داخل الجدول بين قوسين .

و جدول المستخدمين يتكون من الأعمدة التالية ( مع شرحها ) :


user_id : نوع هذا الحقل هو INT و هى اختصار INTEGER اى ان نوع البيانات التى يتم تخزينها هنا هو ارقام صحيحة فقط . و تم اضافة الخاصية NOT NULL حيث لا يمكن ترك هذا الحقل فارغ . و الخاصية AUTO_INCREMENT لكى يتم زيادة قيمة الحقل بمقدار 1 عند قيام عضو جديد بالتسجيل .


نلاحظ فى الكود السابق انه تم تعريف الحقل user_id على انه primary key و يتم استخدام primary key ليتم التعرف على كل صف فى الجدول بمفردة بمعنى اخر لمنع تكرار البيانات .
و اليكم مثال بسيط للتعرف على عمل primary key : عند قيام عضو بالتسجيل باسم ahmed مثلا و قيام عضو اخر بمحاولة التسجيل بنفس الاسم بالتالى هناك مشكلة فكيف يمكن لقاعدة البيانات التعرف على المستخدمين حيث ان لكل منهم كلمة السر الخاصة به و البيانات الخاصة به . و بالتالى يأتى هنا دور primary key حيث يكون لكل عضو رقم ( كود) خاص يمكن قاعدة البيانات من التعرف عليه بسهولة .
ملحوظة : كل الجداول تحتوى على primary key ايضا لمنع تكرار البيانات . user_name : نوع هذا الحقل هو VARCHAR و هو عبارة عن متغير نصى . و الرقم الموجود بين القوسين يحدد اقصى عدد حروف مسموح به لكتابة اسم المستخدم . و فى الكود السابق بامكان المستخدم التسجيل باسم عدد حروفه 30 حرف . و استخدمنا NOT NULL بحيث لا يمكن تركه فارغا . اى يجب على المستخدم كتابة اسمه .
ستلاحظ فى اخر الكود ان هذا الحقل تم تعريفة على انه UNIQUE و هذا لمنع تكرار اسماء الأعضاء اى انه لكل عضو اسم خاص به لا يمكن تكراره . حيث يقوم الجزء UNIQUE INDEX باخبار قاعدة البيانات اننا نريد عمل كود مميز لكل اسم . و من ثم نقوم بتعريف الكود المنفرد و هو فى الكود السابق user_name_unique و نضع اسم الحقل الذى نريد عمل كود منفرد له داخل القوسين .

user_ pass : هذا الحقل مطابق تمام للحقل user_name باستثناء طول الحروف تم وضعه 255 كرقم افتراضى و ذلك لآن هذا الحقل سنقوم بتشفيره لدواعى امنية باستخدام الدالة ()sh1 و بالتالى سيكون الطول الحقيقى لكلمة السر المشفرة ثابت و هو 40 حرف.

user_email : هذا الحقل لتخزين بريد المستخدم داخل قاعدة البيانات و هو مطابق للحقل
السابق user_pass user_date : يستخدم هذا الحقل لتخزين تاريخ تسجيل العضو و الوقت . و هنا هو عبارة عن دالة DATETIME الموجودة فى mysql و لا يمكن تركه فارغا . NOT NULL .

user_level: يستخدم هذا الحقل لتخزين وظيفة العضو . مثلا اذا كان عضو عادى نخصص له القيمة 0 و اذا كان admin او مدير الموقع نخصص له القيمة 1و سيتم شرحها لاحقا .
جاااااااااااارى اكمال الشرح .انتظرونا