هذا الدرس هو طريقة عمل برنامج مستخدمين بلغة php وتخزين البيانات فى ملفات txt
طريقة عمل برنامج مستخدمين عن طريق تخزين بيناتهم داخل ملفات تيكست text
المطلبات:
يجب تتعرف على اساسيات ال php .
فى هذا الدرس سنتعرف على التالى:
- كيفية التعامل مع ملفات النصية text
- كيفية تخزين بيانات كل مستخدم
- كيفية إعطاء تصريح (444) للملفات
- كيفية الاستعلام عن بيانات المستخدم المخزنة فى الملف النصى
- عمل إحصائيات الاعضاء
الفكرة العامة:
هو أنشاء ملف نصى text بإسم كل مستخدم يقوم بالإشتراك وتشفير كلمة المرور التابعة له وتخزينها داخل الملف .
محتوى البرنامج:
- ملف index.php
- مجلد data
صفحة index.php مقسمة الى 4 صفحات بإستخدام الدالة switch بإستخدام المتغير $page كالتالى:
switch($_GET['page'])
{
case'register':
break;
case'check_reg':
break;
case'login':
break;
default;
}
التطبيق:
1- صفحة التسجيل: index.php?page=register
الكود:
<form action="index.php?page=check_reg" method="post"> <center> <table width="50%"> <tr bgcolor="#123456"> <th colspan="2"> <font color="#ffffff"> <center> التسجيل </center> </font> </th> </tr> <tr> <th> </th> <th> </th> </tr> <tr> <td align="center"><b>إسم المستخدم</b></td> <td align="right"> <input type="text" name="username" size="40" /> </td> </tr> <tr> <td align="center"><b>كلمة المرور</b></td> <td align="right"> <input type="password" name="password" size="40" /> </td> </tr> <tr> <td align="center"><b>إعادة كلمة المرور</b></td> <td align="right"> <input type="password" name="password2" size="40" /> </td> </tr> <tr> <th> </th> <th> </th> </tr> <tr bgcolor="#123456"> <th colspan="2"> <font color="#ffffff"> <center> <input type="submit" value=" إرسال " /> </center> </font> </th> </tr> </table> </center> </form>
===========================================
2- صفحة تخزين البيانات: index.php?page=check_reg
if($_POST['password'] && $_POST['username'])
{
if($_POST['password'] != $_POST['password2'])
{
echo '<center>كلمتى المرور غير متطابقين <br> [ <a href="index.php?page=register"><< رجوع</a> ]</center>';
exit();
}
if(
$_POST['username'] && !ereg("^[a-zA-Z0-9_/-]+$", $_POST['username']))
{
echo '<center>يجب ان يكون إسم المستخدم بالحروف الانجليزية وبدون مسافات <br> [ <a href="index.php?page=register"><< رجوع</a> ]</center>';
exit();
}
if(
file_exists("data/".$_POST['username'].".txt"))
{
echo '<center>المستخدم '.$_POST['username'].' موجود بالفعل <br> [ <a href="index.php?page=register"><< رجوع</a> ]</center>';
exit();
}
$create = @fopen("data/".$_POST['username'].".txt", w) or die('خطأ اثناء إنشاء الملف '.$_POST['username'].'.txt');
fputs($create, md5($_POST['password']));
fclose($create);
@
chmod("data/".$_POST['username'].".txt", 0444);
echo
'<center>تم إنشاء الحساب '.$_POST['username'].' <br> يمكنك الآن[ <a href="index.php">تسجيل الدخول</a> ]</center>';
}
else
{
echo '<center>يجب تكملة الخانات الفارغة <br> [ <a href="index.php?page=register"><< رجوع</a> ]</center>';
}
if($_POST['password'] && $_POST['username'])
وهنا التأكد من ان المستخدم قام بكتابة البيانات كلها أم لا ….
وان كان لا سيتم اظهار الرسالة يجب تكملة الخانات الفارغة كما بالكود:
}
else
{
echo '<center>يجب تكملة الخانات الفارغة <br> [ <a href="index.php?page=register"><< رجوع</a> ]</center>';
}
============
if($_POST['password'] != $_POST['password2'])
{
echo '<center>كلمتى المرور غير متطابقين <br> [ <a href="index.php?page=register"><< رجوع</a> ]</center>';
exit();
}
هنا نقوم بفحص كلمتى المرور والتأكد من انهما متطابقان , ان كان لا سيتم اظهار الرسالة: كلمتى المرور غير متطابقين
============
if($_POST['username'] && !ereg("^[a-zA-Z0-9_/-]+$", $_POST['username']))
{
echo '<center>يجب ان يكون إسم المستخدم بالحروف الانجليزية وبدون مسافات <br> [ <a href="index.php?page=register"><< رجوع</a> ]</center>';
exit();
}
وهنا يتم فحص اسم المستخدم والتأكد من انه تم كتابة الاسك بالحروف الانجليزية من خلال الدالة ereg , وان كان لا يتم اظهار الرسالة يجب ان يكون إسم المستخدم بالحروف الانجليزية وبدون مسافات
=============
if(file_exists("data/".$_POST['username'].".txt"))
{
echo '<center>المستخدم '.$_POST['username'].' موجود بالفعل <br> [ <a href="index.php?page=register"><< رجوع</a> ]</center>';
exit();
}
التأكد من ان إسم المستخدم موجود بالفعل ام لا من خلال التاكد من وجود ملف المستخدم فى مجلد data
==========
$create = @fopen("data/".$_POST['username'].".txt", w) or die('خطأ اثناء إنشاء الملف '.$_POST['username'].'.txt');
fputs($create, md5($_POST['password']));
fclose($create);
ان لم يكن هناك اخطاء فسيقوم البى اتش بى بتكملة الكود حتى الوصول لهذه الخطوة وهى مرحة انشاء الملف للمستخدم, حيث يتم عمل الملف ثم كتابة كلمة المرور بالملف مع تشفيرها بالدالة md5
===========
@chmod("data/".$_POST['username'].".txt", 0444);
وهنا يتم وضع صلحية القراءة والكتابة للملف الى 444
==========
echo '<center>تم إنشاء الحساب '.$_POST['username'].' <br> يمكنك الآن[ <a href="index.php">تسجيل الدخول</a> ]</center>';
وهنا يتم كتابة الرسالة للمستخدم بانه تم انشاء الحساب ….
===========================================
3- صفحة الدخول: index.php
<form action="index.php?page=login" method="post"> <center> <table width="50%"> <tr bgcolor="#123456"> <th colspan="2"> <font color="#ffffff"> <center> يتوجب عليك تسجيل الدخول </center> </font> </th> </tr> <tr> <th> </th> <th> </th> </tr> <tr> <td align="center"><b>إسم المستخدم</b></td> <td align="right"> <input type="text" name="username" size="40" /> </td> </tr> <tr> <td align="center"><b>كلمة المرور</b></td> <td align="right"> <input type="password" name="password" size="40" /> </td> </tr> <tr> <th> </th> <th> </th> </tr> <tr bgcolor="#123456"> <th colspan="2"> <font color="#ffffff"> <center> <input type="submit" value=" تسجيل الدخول " /> </center> </font> </th> </tr> <tr> <td colspan="2" align="right"> <a href="index.php?page=register">إشترك الآن</a> </td> </tr> </table> </center> </form>
وهنا كود فورم تسجيل الدخول وهو مكون من اسم المستخدم وكلمة المرور ورابط اشترك الان للتسجيل بالاسكربت
=============
4- صفحة التاكد من بيانات التسجيل: index.php?page=login
if($_POST['username'] && $_POST['password'])
{
if(!file_exists("data/".$_POST['username'].".txt"))
{
echo '<center>إسم المستخدم غير موجود<br> [ <a href="index.php"><< رجوع</a> ]</center>';
exit();
}
$read = @fopen("data/".$_POST['username'].".txt", r) or die('خطأ اثناء قراءة الملف '.$_POST['username'].'.txt');;
while(!feof($read))
{
$data .= fgets($read, 1024);
}
if(
$data != md5($_POST['password']))
{
echo '<center>خطأ فى كلمة المرور<br> [ <a href="index.php"><< رجوع</a> ]</center>';
exit();
}
$_SESSION['user'] = $_POST['username'];
header("location: index.php");
}
else
{
echo '<center>يجب تكملة الخانات الفارغة <br> [ <a href="index.php"><< رجوع</a> ]</center>';
}
الشرح:
if($_POST['username'] && $_POST['password'])
التأكد من ان جميع البيانات تم كتابتها وان لم يتم كتابة البيانات كاملة يتم اظهار الرسالة: يجب تكملة الخانات الفارغة
}
else
{
echo '<center>يجب تكملة الخانات الفارغة <br> [ <a href="index.php"><< رجوع</a> ]</center>';
}
==========
if(!file_exists("data/".$_POST['username'].".txt"))
{
echo '<center>إسم المستخدم غير موجود<br> [ <a href="index.php"><< رجوع</a> ]</center>';
exit();
}
التاكد من ان اسم المستخدم موجود واحضار البيانات وان لم يتم العثور على الملف يتم اظهار ان المستخد غير مسجل من قبل: إسم المستخدم غير موجود
===========
$read = @fopen("data/".$_POST['username'].".txt", r) or die('خطأ اثناء قراءة الملف '.$_POST['username'].'.txt');;
while(!feof($read))
{
$data .= fgets($read, 1024);
}
فتح ملف التيكست الخاص بالمستخدم لجلب كلمة المرور
===========
if($data != md5($_POST['password']))
{
echo '<center>خطأ فى كلمة المرور<br> [ <a href="index.php"><< رجوع</a> ]</center>';
exit();
}
بعد ان تم جلب كلمة المرور يتم تشفير كلمة المرور المرسلة (التى قام المستخدم بكتابتها ) ثم التاكد من انها مساوية لكلمة المرور التى بالملف ام لا , ان كانت غير مساوية يتم اظهار رسالة: خطأ فى كلمة المرور
============
$_SESSION['user'] = $_POST['username'];
?>
<script type="text/javascript">
window.open("index.php", "_self");
</script>
<? وهنا يتم تخزين اسم المستخدم فى السيشن الانتقال بالجافا اسكربت (تغيير الصفحة ) الى الصفحة الرئيسية..
==================
الان بعد ان قمنا بكتابة اساسيات البرنامج , سنقوم الان بمرحلة تظبيط الاسكربت…
اولا: بما اننا سنستخدم السيشن نقوم ببدأ السيشن بحيث وضع الكود باول ملف index.php بعد <?PHP
<?PHP
session_start(); ثانيا: نقوم بفحص ان المستخدم مسجل دخول ام لا بحيث ان كان المستخدم مسجل دخول لا يصح ان يتم اظهار صفحة تسجيل الدخول (الفورم)
وسنقوم باضافة الكود قبل كود switch مباشرة كالتالى:
if(!$_SESSION['user'])
{
switch($_GET['page'])
ونقوم بانهاء “if” بعد انتهاء switch كالتالى:
}
}
وبالطبع سنقوم بوضع رسالة الترحيب بالمستخدم بعد انهاء “if” حيث نستخدم else ونضع الكود الترحيب كالتالى:
else
{
if($_GET['page'] == 'logout')
{
unset($_SESSION['user']);
?>
<script type="text/javascript">
window.open("index.php", "_self");
</script>
<?
exit();
}
?>
<center><table width="50%">
<tr>
<td>مرحباً بك يا <?=$_SESSION['user']?>, لتسجيل الخروج<a href="index.php?page=logout"> إنقر هنا</a> </td>
</tr>
</table></center>
<?
} الشرح:
if($_GET['page'] == 'logout')
{
unset($_SESSION['user']);
?>
<script type="text/javascript">
window.open("index.php", "_self");
</script>
<?
exit();
}
?> وهنا رابط تسجيل الخروج حيث عند نقر المستخدم رابط تسجيل الخروج سيتم ارساله الى هذه الصفحة
=============
?>
<center><table width="50%">
<tr>
<td>مرحباً بك يا <?=$_SESSION['user']?>, لتسجيل الخروج<a href="index.php?page=logout"> إنقر هنا</a> </td>
</tr>
</table></center>
<? وهنا كود الترحيب بالمستخدم وكذلك رابط تسجيل الخروج
==============================
وفى النهاية عمل إحصائيات الاعضاء:
<?
$openfolder = opendir("data/");
$count = 0;
while(($filename = readdir($openfolder)) !== false)
{
$ext_ar = explode(".", $filename);
if(is_file("data/".$filename) && $ext_ar[count($ext_ar) - 1] == 'txt')
{
$count++;
}
}
?>
<center>
<table width="25%" border="1">
<tr bgcolor="#123456">
<th colspan="2">
<font color="#ffffff">
<center>
إحصائيات الأعضاء
</center>
</font>
</th>
</tr>
<tr>
<td><b>عدد الأعضاء</b></td>
<td><center><?=$count?> عضو</center></td>
</tr>
</table>
</center> الشرح:
$openfolder = opendir("data/");
فتح المجلد data لجلب ملفات الاعضاء
$count = 0;
وهذا المتغير سوف يتم وضع عدد الاعضاء به
while(($filename = readdir($openfolder)) !== false)
وهنا قراءة الملفات التى بداخل المجلد data وتخزين اسم الملف بالمتغير $filename
$ext_ar = explode(".", $filename);
وهنا جلب امتداد الملف بحيث كسر اسم الملف من خلل النقطة “.” وتخريجها كمصفوفة
if(is_file("data/".$filename) && $ext_ar[count($ext_ar) - 1] == 'txt')
وهنا التأكد من أن المحدد فى $filename نوعه ملف وليس مجلد من خلال is_file(”data/”.$filename)
وهنا $ext_ar[count($ext_ar) - 1] == ‘txt’ يتم التأكد من ان نوع الملف txt من بحيث جلب اخر قيمة بالمصفوفة مثال:
لو كان اسم الملف ahmed.txt
يتم تقسمها فى المصفوفة من خلال الدالة explode واخراجها كالتالى:
$ext_ar[0] = "ahmed";
$ext_ar[1] = "txt";
وبالتالى لكى نحضر امتداد الملف نستعمل $ext_ar[1]
مع العلم هنا ان عدد قيم المصفوفة 2 …(قيمتين)
2- txt
وبالتالى نقوم بالتعويض عن (1) بـ count($ext_ar) – 1 بحيث عدد القيم بالمصفوفة – 1
$count++;
اضافة 1 على كل ملف ($count++ معناها ==> $count = $count + 1
$count++; ===> $count = $count + 1;
==========
<center> <table width="25%" border="1"> <tr bgcolor="#123456"> <th colspan="2"> <font color="#ffffff"> <center> إحصائيات الأعضاء </center> </font> </th> </tr> <tr> <td><b>عدد الأعضاء</b></td> <td><center><?=$count?> عضو</center></td> </tr> </table> </center>
وهنا كود الإحصائيات
============
واخيرا حماية المجلد data بال .htaccess
قم بإنشاء ملف بإسم .htaccess داخل مجلد data وضع به الكود التالى لمنع اى شخص بمحاولة فتح المجلد من خلال الموقع
<Limit GET POST PUT> order deny,allow deny from all </Limit>
اتمنى ان ينال التطبيق اعجابكم بإذن الله
لتحميل التطبيق: http://www.ziddu.com/download/7537538/txt.zip.html
اترككم فى رعاية الله
