php MySql إنشاء فضاء للأعضاء

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

آخر تحيين: 13-12-2015

إنشاء الملف الشخصي للعضو php طرق تفعيل العضوية


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

تعديل استمارات المواضيع و التعاليق

كنا أضفنا في الإستمارات حقل "author" لإضافة إسم الكاتب

<form>
...
  <label> الكاتب : </label><input type="text" name="author"><br> <!-- إحذف هذا الحقل -->
...
</form>

لن نحتاج بعد الآن لحقل "author" لهذا أدعوكم لحذفه من إستمارات الصفحات التالية :
add-blog.php, edit-blog.php, show.php, edit-comment.php
لتخزين صاحب الموضوع أو التعليق في قاعدة البيانات سنعتمد على معرف ID العضو الذي سنحصل عليه من خلال جلسته .

تعديل جدولي "blog" و "blog_comments"

بما أن معرف ID من نوع INT . و كنا أنشأنا حقل "author" في كلا الجدولين بنوع varchar . لهذا أدعوكم لفتح phpMyAdmin و تغيير نوع الحقل إلى INT بدل varchar .

صفحة index.php

قوموا بتعديل الإستعلام . للحصول على إسم كاتب الموضوع يجب ربط جدول blog_users . لأن جدول blog لا يضم إسم الكاتب ، بل معرف ID فقط

SELECT id, title, content, author, creation_date, user_name
FROM blog 
LEFT JOIN blog_users ON blog.author = blog_users.user_id
ORDER BY id DESC

لعرض إسم الكاتب :

$author = $blog['user_name'];

صفحة show.php

التعديل الأول يخص الإستعلام لأخذ إسم الكاتب ، إذ لدينا إسم كاتب الموضوع و أسماء كتاب التعاليق . لهذا يجب ربط جدول "blog_users" بجدول "blog" و أيضا بجدول "blog_comments".

LEFT JOIN blog_users u1 ON b.author = u1.user_id
LEFT JOIN blog_users u2 ON c.author = u2.user_id

يجب إعطاء إسم خيالي مختلف لجدول blog_users في الحالتين مثلا "u1" و "u2" و إلا لن تحصلوا على شيء في الإستعلام .
سيصبح الإستعلام كاملا كالتالي :

SELECT b.id AS blogId, title, b.content AS blog_content, b.creation_date AS blog_date,  
       c.id AS com_id, c.content AS com_content, c.creation_date AS com_date,
       u1.user_name AS blog_author, u2.user_name AS com_author
FROM blog b 
LEFT JOIN blog_comments c ON b.id = c.blog_id 
LEFT JOIN blog_users u1 ON b.author = u1.user_id
LEFT JOIN blog_users u2 ON c.author = u2.user_id
WHERE b.id = :bid
ORDER BY c.id DESC

التعديل الثاني يخص عدم عرض استمارة التعاليق للغير المتصلين . أفسح لكم المجال لتفعيل ذلك .

صفحة add-blog.php

أول شيء يجب فعله هو حضر الولوج لهذه الصفحة للأعضاء الغير المتصلين .

require 'includes/header.php';
require 'includes/db-connection.php';

if($session_id == 0)
{
   header('location:members/login.php'); exit;
}
// ...

ثانيا يجب حذف كل ما يتعلق بحقل إسم الكاتب $_POST['author']. لأنه لم يعد لدينا هذا الحقل

ثالثا : أثناء تخزين البيانات في القاعدة ، سنخزن معرف ID الكاتب اعتمادا على الجلسة

// ...
$stmt->bindValue(':auth', $session_id, PDO::PARAM_INT);
// ...
ملحوظة : بالنسبة للتعليمة session_start() و المتغير $session_id قد تم تعيينهما سابقا في صفحة "header.php" . إن لم تفعل بعد ، أنت مدعو لإضافتهما . أنضر header.php

صفحة add-comment.php

نفس الشيء ، تقريبا نفس التعديلات التي قمنا بها في صفحة "show.php" . أترك لكم المجال لتفعيلها


بالنسبة للصفحات الأخرى : "edit-blog, edit-comment, delete-blog, delete-comment" . لا أشك في قدرة تفعيل التعديلات اللازمة لوحدكم .
لاحقا لن نعتمد فقط على جلسة العضو ، ستنتظرون قليلا إلى حين أن نتعرف على أدوار المجموعات ، لتعيين من يمكنه إضافة أو تعديل أو حذف هذا أو ذاك .