الدرس : بنـاء لوحة تحكم بالـ Session
مقدمة
بسم الله الرحمن الرحيم والصلاة والسلام على اشرف الانبياء والمرسلين أما بعد ، حديثنـا اليوم هو عبـارة عن دارسة لمشروع بناء لوحة تحكم عن طريق الـ Session أو الجلسـات ، إن لم تكن قرأت الدرس الأول فأتمنى قراءته قبل هذه الدرس لتكتمل الصورة ، يمكن أن تجد الدرس الأول من هنا ..
قبل أن أبدأ في شرج الطريقة ، فسافترض بعض الافتراضـات التي سـاقوم بشرح الطريقة بناءً عليها :
1- لدينا قــاعدة بيانات إسمها Loign تحتوي على جدول الأعضـاء authers ، وهذا الجدول يحتوي على حقلين ، الأول هو user وهو خاص باسم المستخدم والآخر هو password وهو بطبيعة الحال خاص بكلمة المرور ، وسنقوم باضافة اسم مستخدم وكلمة مرور مبدئيه وسافترض أن الاسم هو php وكلمة المرور هي 123 ، يمكنك انشاء هذا الجدول واضافة هذه البيانات اليه بسهولة باستخدم الكود التالي :
Code ..
CREATE TABLE authers (
id int(11) NOT NULL auto_increment,
user text NOT NULL,
password text NOT NULL,
email text NOT NULL,
UNIQUE id (id)
);
INSERT INTO authers VALUES ( '1', 'php', '123', 'a@phpvillage.com');
2- اسماء الملفات التي سنستخدمها في هذا الدرس كالتالي :
- login.php لعرض النموذج أو الـ Fourm الخاص بادخال اسم المستخدم وكلمة المرور .
- edit.php لتعديل البيانات الخاصة بالعضو .
والهدف من اقحام ملف لتعديل بيانات العضو هو معرفة طريقة حماية الملفات بحيث لا يقوم باستعراضها الا من قام بعملية الدخول الصحيحة .
في البداية سنتحدث عن الملف login.php ، الذي سيحتوي على النموذج الخاص بادخال إسم المستخدم وكلمة المرور وسيحتوي على عملية المعالجة لتلك البيانات المدخلة ، ولكي نختصر الوقت والجهد في الشرح سأقوم بوضع الكود الخاص بنموذج الإدخال الذي ساستخدمه :
Code ..
<table width=100% dir=rtl border=1 align=center>
<form method=post action=$PHP_SELF>
<tr><td colspan=2><font size=2>المستخدم</font></td></tr>
<tr><td colspan=2><input type=textbox name=user size=13>
</td></tr>
<tr><td colspan=2><font size=2>كلمة المرور</font>
</td></tr>
<tr><td colspan=2><input type=password name=password size=13>
</td></tr>
<tr><td><input type=submit value="دخول">
</td></tr></form></table>
كما هو واضح في هذا النموذج فإن المستخدم مطالب بادخال اسم المستخدم وكلمة المرور ومن ثم الضغط على زر دخول لتنفيذ طلبه ، لكن ما هي الطريقة التي من خلالها يمكن التعامل مع هذا الطلب حسب ما نريد ؟
للاجابة على هذا السؤال نحتاج الى أمرين ، الأول هو معرفة ما هي حالة الشخص المتصفح ، هل قام بعملية تسجيل الدخول فنعرض له لوحة التحكم أم لم يقم بتسجيل الدخول فنعرض له النموذج ، وفي كلتا الحالين نحتاج أن نتعرف على متغير الحالة session variable الذي سنقوم بتسجيله في حالة دخول المستخدم باسم صحيح وبكلمة مرور صحيحة وبالتالي إذا تم تسجيل المتغير فإن لوحة التحكم ستظهر أما اذا لم يتم تسجيله فلن يتم ذلك وساشرح هذا بالتفصيل في هذا الدرس .
كود الملف login.php
الكود الخاص بالملف login.php هو :
Code ..
<?
include("config.php");
if ($o == out) {
session_destroy("userid_");
}
echo "<table width=15% bordercolor=000000 dir=rtl border=1 align=center>";
if (!session_is_registered("userid_")) {
if (!$user2 and !$password2) {
echo "<form method=post action=$PHP_SELF>";
?>
<tr><td colspan=2 bordercolor=FFFFFF align=center>
<font face=Tahoma size=2>المستخدم</font></td></tr>
<tr><td colspan=2 bordercolor=FFFFFF align=center>
<input type=textbox name=user2 size=15>
</td></tr>
<tr><td colspan=2 bordercolor=FFFFFF align=center>
<font face=Tahoma size=2>كلمة المرور</font></td></tr>
<tr><td colspan=2 bordercolor=FFFFFF align=center>
<input type=password name=password2 size=15> </td></tr>
<tr><td bordercolor=FFFFFF align=center><input type=submit value="دخول">
</td></tr></form></table>
<?
}
elseif ($user2 and $password2) {
$check_login_info = mysql_query("select * from authers where
user='$user2' and password='$password2'")
or die (mysql_error());
if (mysql_num_rows($check_login_info) > 0 ) {
$re = mysql_query("select * from authers where user='$user2'");
while ( $r = mysql_fetch_array($re))
{ $userid_ = $r["id"]; }
session_register("userid_");
$user_id = mysql_query("select * from authers where id='$userid_'");
while ($row = mysql_fetch_array($user_id)) {
$username = $row["user"];
}
echo "<table width=15% dir=rtl bordercolor=000000 border=1 align=center>
<tr><td bordercolor=FFFFFF align=center>
<font face=Tahoma size=1>أهلا بـ $username</font></td></tr>
<tr><td bordercolor=FFFFFF align=center>
<a href=edit.php?ids=$userid_>الملف الشخصي</a></td></tr>
<tr><td bordercolor=FFFFFF align=center>
<a href=login.php?o=out>خروج</a></td></tr>";
}
else { echo "<tr><td height=100 bordercolor=FFFFFF align=center>
<font size=2 face=Tahoma>اسم المستخدم وكلمة المرور غير صحيحة</font>
</td></tr></table>"; }
}
}
elseif (session_is_registered("userid_")) {
$user_id = mysql_query("select * from authers where id='$userid_'");
while ($row = mysql_fetch_array($user_id)) {
$username = $row["user"];
}
echo "<table width=15% dir=rtl bordercolor=000000 border=1 align=center>
<tr><td bordercolor=FFFFFF align=center>
<font face=Tahoma size=1>أهلا بـ $username</font></td></tr>
<tr><td bordercolor=FFFFFF align=center>
<a href=edit.php?ids=$userid_>الملف الشخصي</a></td></tr>
<tr><td bordercolor=FFFFFF align=center>
<a href=login.php?o=out>خروج</a></td></tr>";
}
?>
لاحظ أني قمت بادراج ملف آخر في بداية هذا الكود ، وهذا الملف يحتوي على معلومات الإتصـال بقاعدة البيـانات ، يمكنك نسخ هذا الكود من هنا ، قم بحفظه في نفس المجلد الذي سيحوي ملف التحقق من هوية المستخدم .
نعود للكود الذي ذكرته ، قم بنسخه واحفظه في ملف اسمه login.php أو أي اسم آخر ، وقم بتنفيذ الصفحة ، قد تظهر لك عدة رسائل أثناء تجربة الكود خاصة إذا كنت تعمل على جهازك الشخصي كسيرفر ، حتى وأن ظهر نموذج الإدخـال ربما تظهر لك رسائل الخطأ ، إذا صادفتك هذه المشكلة فعليك الذهـاب الى ملف الـ php.ini لديك والبحث عن كلمة Session ستجد سطراً يحتوي على السطر الأول في الكود التالي ، قم بتغييره الى السطر الثاني في الكود .. والكود كما يلي :
Code ..
session.save_path = /tmp
session.save_path = c:\windows\temp
قم بتجربة السكربت مرة أخرى وستجد أن الرسـائل أختفت ! ، وما قمنا به ببسـاطة هو تغيير مجلد حفظ ملفات الجلسـات أو الـ Session الى مجلد موجود فعلاً ، يمكنك تغييره الى أي مجلد ترغب به .
شرح الكود 1
حاليـاً كل شي جـاهز لمحـاولة الدخول بإسم المستخدم وكلمة المرور ، جرب أي أسم يخطر على بالك وأي كلمة مرور تخترعها ، ستجد أن النتيجة عدم الدخول الى لوحة التحكم ، بل كانت النتيجة هو ظهور رسـالة عدم السمـاح بالدخول ، قم بالعودة والدخول بإسم المستخدم الصحيح php وكلمة المرور الصحيحة 123 ستظهر لك لوحة التحكم ، وهنـا ساشرح الكود السابق بشي من التفصيل والمرور على أغلب الأسـطر .
1- البداية بكود تسجيل الخروج التالي :
Code ..
<?
if ($o == out) {
session_destroy("userid_");
}
?>
وهنا يتم التأكد من وجود المتغير $o إذا كان يسـاوي out فسيتم استدعاء الدالة session_destroy وهي تقوم بالغاء الجلسة المسندة اليها ، وهي في مثالنا userid_ ، ببسـاطة هذه الدالة تجعل كأن شيئا لم يحدث ولم يتم تسجيل الدخول من الأسـاس ، ويرجع النموذج الخاص بادخال اسم المستخدم وكلمة المرور بالظهور مجدداً ..
2- الكود التالي هو لعرض نموذج الإدخال :
Code ..
<?
echo "<table width=15% bordercolor=000000 dir=rtl border=1 align=center>";
if (!session_is_registered("userid_")) {
if (!$user2 and !$password2) {
echo "<form method=post action=$PHP_SELF>";
?>
<tr><td colspan=2 bordercolor=FFFFFF align=center>
<font face=Tahoma size=2>المستخدم</font></td></tr>
<tr><td colspan=2 bordercolor=FFFFFF align=center>
<input type=textbox name=user2 size=15>
</td></tr>
<tr><td colspan=2 bordercolor=FFFFFF align=center>
<font face=Tahoma size=2>كلمة المرور</font></td></tr>
<tr><td colspan=2 bordercolor=FFFFFF align=center>
<input type=password name=password2 size=15> </td></tr>
<tr><td bordercolor=FFFFFF align=center><input type=submit value="دخول">
</td></tr></form></table>
<?
}
?>
والمهم هنا هو الشرط if (!session_is_registered("userid_")) { وهو للتأكد من عدم تسجيل الدخول وعدم تسجيل الجلسة userid_ ، إذا تحقق الشرط فسيتم تنفيذ السطر الذي يليه ، وهو يحتوي على شرط آخر هو if (!$user2 and !$password2) { ، وهذا الشرط للتأكد من عدم تنفيذ النموذج ليتم عرضه ، إذا كان المتغيران user2 و password2 غير موجودين وليس لهما أي قيمة فسيتم تنفيذ الأسطر التـالية وهي عرض النموذج .
شرح الكود 2
3- الأسطر التالية هي :
Code ..
<?
elseif ($user2 and $password2) {
$check_login_info = mysql_query("select * from authers where
user='$user2' and password='$password2'")
or die (mysql_error());
if (mysql_num_rows($check_login_info) > 0 ) {
$re = mysql_query("select * from authers where user='$user2'");
while ( $r = mysql_fetch_array($re))
{ $userid_ = $r["id"]; }
session_register("userid_");
$user_id = mysql_query("select * from authers where id='$userid_'");
while ($row = mysql_fetch_array($user_id)) {
$username = $row["user"];
}
echo "<table width=15% dir=rtl bordercolor=000000 border=1 align=center>
<tr><td bordercolor=FFFFFF align=center>
<font face=Tahoma size=1>أهلا بـ $username</font></td></tr>
<tr><td bordercolor=FFFFFF align=center>
<a href=edit.php?ids=$userid_>الملف الشخصي</a></td></tr>
<tr><td bordercolor=FFFFFF align=center>
<a href=login.php?o=out>خروج</a></td></tr>";
}
?>
وهي في حالة عدم تحقق الشرط السابقة ذكره if (!$user2 and !$password2) { ، سيتم الإنتقـال الى المقطع الثاني من الشرط والذي يحتوي على elseif ($user2 and $password2) { ، وسيتم تنفيذ ما جاء بعده إن تحقق الشرط ، وكما هو واضح فإن الشرط يتحقق في حالة إدخال اسم المستخدم وكلمة المرور والضغط على تنفيذ ، سيتم تنفيذ جميع الأسطر التالية والتي فيها التحقق من اسم المستخدم المدخل وكلمة المرور المدخلة والتأكد من صحتهما ، إن كان كذلك سيتم تسجيل الجلسة في السطر :
Code ..
<?
session_register("userid_");
?>
وسيتم عرض لوحة التحكم فيما يلي هذا السطر من أسطر .
تابـــــــــــــــــــــــــــــــــــــــــــــــ ــــــــــــــــــــــع :con2: