السلام عليكم ورحمة الله وبركاته

هذا الدرس هو طريقة عمل برنامج مستخدمين بلغة php وتخزين البيانات فى ملفات txt

طريقة عمل برنامج مستخدمين عن طريق تخزين بيناتهم داخل ملفات تيكست text

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

المطلبات:
يجب تتعرف على اساسيات ال php .

فى هذا الدرس سنتعرف على التالى:

  1. كيفية التعامل مع ملفات النصية text
  2. كيفية تخزين بيانات كل مستخدم
  3. كيفية إعطاء تصريح (444) للملفات
  4. كيفية الاستعلام عن بيانات المستخدم المخزنة فى الملف النصى
  5. عمل إحصائيات الاعضاء

الفكرة العامة:
هو أنشاء ملف نصى text بإسم كل مستخدم يقوم بالإشتراك وتشفير كلمة المرور التابعة له وتخزينها داخل الملف .

محتوى البرنامج:
- ملف index.php
- مجلد data

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

صفحة index.php مقسمة الى 4 صفحات بإستخدام الدالة switch بإستخدام المتغير $page كالتالى:

رمز PHP:
switch($_GET['page'])
{
case
'register':
break;
case
'check_reg':
break;
case
'login':
break;
default;
}

بالنسبة لمجلد data وهو المجلد الذى سيتم تخزين الملفات النصيه بيه

التطبيق:
1- صفحة التسجيل: index.php?page=register


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

الكود:

كود HTML:
<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>&nbsp;</th>
                        <th>&nbsp;</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>&nbsp;</th>
                        <th>&nbsp;</th>
                    </tr>
                    <tr bgcolor="#123456">
                        <th colspan="2">
                            <font color="#ffffff">
                                <center>
                                    <input type="submit" value="   إرسال   " />
                                </center>
                            </font>
                        </th>
                    </tr>
                </table>
            </center>
        </form>
ومن هنا سيتم تسجيل الاعضاء من خلال هذا الإسكربت حيث سيتم ارسال البيانات الى صفحة index.php?page=check_reg وهى إسم المستخدم وكلمة المرور

===========================================

2- صفحة تخزين البيانات: index.php?page=check_reg

رمز PHP:
if($_POST['password'] && $_POST['username'])
{
if(
$_POST['password'] != $_POST['password2'])
{
echo
'<center>كلمتى المرور غير متطابقين <br> [ <a rel="nofollow" href="index.php?page=register"><< رجوع</a> ]</center>';
exit();
}

if(
$_POST['username'] && !ereg("^[a-zA-Z0-9_/-]+$", $_POST['username']))
{
echo
'<center>يجب ان يكون إسم المستخدم بالحروف الانجليزية وبدون مسافات <br> [ <a rel="nofollow" href="index.php?page=register"><< رجوع</a> ]</center>';
exit();
}

if(
file_exists("data/".$_POST['username'].".txt"))
{
echo
'<center>المستخدم '.$_POST['username'].' موجود بالفعل <br> [ <a rel="nofollow" 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="http://www.enjaztech.com/vb/">تسجيل الدخول</a> ]</center>';
}
else
{
echo
'<center>يجب تكملة الخانات الفارغة <br> [ <a rel="nofollow" href="index.php?page=register"><< رجوع</a> ]</center>';
}

شرح الكود:

رمز PHP:
if($_POST['password'] && $_POST['username'])

وهنا التأكد من ان المستخدم قام بكتابة البيانات كلها أم لا ....

وان كان لا سيتم اظهار الرسالة يجب تكملة الخانات الفارغة كما بالكود:

رمز PHP:
}
else
{
echo
'<center>يجب تكملة الخانات الفارغة <br> [ <a rel="nofollow" href="index.php?page=register"><< رجوع</a> ]</center>';
}

============

رمز PHP:
if($_POST['password'] != $_POST['password2'])
{
echo
'<center>كلمتى المرور غير متطابقين <br> [ <a rel="nofollow" href="index.php?page=register"><< رجوع</a> ]</center>';
exit();
}

هنا نقوم بفحص كلمتى المرور والتأكد من انهما متطابقان , ان كان لا سيتم اظهار الرسالة: كلمتى المرور غير متطابقين

============
رمز PHP:
if($_POST['username'] && !ereg("^[a-zA-Z0-9_/-]+$", $_POST['username']))
{
echo
'<center>يجب ان يكون إسم المستخدم بالحروف الانجليزية وبدون مسافات <br> [ <a rel="nofollow" href="index.php?page=register"><< رجوع</a> ]</center>';
exit();
}

وهنا يتم فحص اسم المستخدم والتأكد من انه تم كتابة الاسك بالحروف الانجليزية من خلال الدالة ereg , وان كان لا يتم اظهار الرسالة يجب ان يكون إسم المستخدم بالحروف الانجليزية وبدون مسافات
=============
رمز PHP:
if(file_exists("data/".$_POST['username'].".txt"))
{
echo
'<center>المستخدم '.$_POST['username'].' موجود بالفعل <br> [ <a rel="nofollow" href="index.php?page=register"><< رجوع</a> ]</center>';
exit();
}

التأكد من ان إسم المستخدم موجود بالفعل ام لا من خلال التاكد من وجود ملف المستخدم فى مجلد data

==========

رمز PHP:
$create = @fopen("data/".$_POST['username'].".txt", w) or die('خطأ اثناء إنشاء الملف '.$_POST['username'].'.txt');
fputs($create, md5($_POST['password']));
fclose($create);

ان لم يكن هناك اخطاء فسيقوم البى اتش بى بتكملة الكود حتى الوصول لهذه الخطوة وهى مرحة انشاء الملف للمستخدم, حيث يتم عمل الملف ثم كتابة كلمة المرور بالملف مع تشفيرها بالدالة md5

===========

رمز PHP:
@chmod("data/".$_POST['username'].".txt", 0444);

وهنا يتم وضع صلحية القراءة والكتابة للملف الى 444

==========

رمز PHP:
echo '<center>تم إنشاء الحساب '.$_POST['username'].' <br> يمكنك الآن[ <a href="http://www.enjaztech.com/vb/">تسجيل الدخول</a> ]</center>';

وهنا يتم كتابة الرسالة للمستخدم بانه تم انشاء الحساب ....

===========================================

3- صفحة الدخول: index.php
نقره لتكبير أو تصغير الصورة ونقرتين لعرض الصورة في صفحة مستقلة بحجمها الطبيعي

كود HTML:
<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>&nbsp;</th>
                        <th>&nbsp;</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>&nbsp;</th>
                        <th>&nbsp;</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 rel="nofollow" href="index.php?page=register">إشترك الآن</a>
                        </td>
                    </tr>
                </table>
            </center>
        </form>
وهنا كود فورم تسجيل الدخول وهو مكون من اسم المستخدم وكلمة المرور ورابط اشترك الان للتسجيل بالاسكربت

=============
4- صفحة التاكد من بيانات التسجيل: index.php?page=login

رمز PHP:
if($_POST['username'] && $_POST['password'])
{
if(!
file_exists("data/".$_POST['username'].".txt"))
{
echo
'<center>إسم المستخدم غير موجود<br> [ <a href="http://www.enjaztech.com/vb/"><< رجوع</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="http://www.enjaztech.com/vb/"><< رجوع</a> ]</center>';
exit();
}

$_SESSION['user'] = $_POST['username'];
header("location: index.php");
}
else
{
echo
'<center>يجب تكملة الخانات الفارغة <br> [ <a href="http://www.enjaztech.com/vb/"><< رجوع</a> ]</center>';
}

الشرح:

رمز PHP:
if($_POST['username'] && $_POST['password'])

التأكد من ان جميع البيانات تم كتابتها وان لم يتم كتابة البيانات كاملة يتم اظهار الرسالة: يجب تكملة الخانات الفارغة

رمز PHP:
}
else
{
echo
'<center>يجب تكملة الخانات الفارغة <br> [ <a href="http://www.enjaztech.com/vb/"><< رجوع</a> ]</center>';
}

==========

رمز PHP:
if(!file_exists("data/".$_POST['username'].".txt"))
{
echo
'<center>إسم المستخدم غير موجود<br> [ <a href="http://www.enjaztech.com/vb/"><< رجوع</a> ]</center>';
exit();
}

التاكد من ان اسم المستخدم موجود واحضار البيانات وان لم يتم العثور على الملف يتم اظهار ان المستخد غير مسجل من قبل: إسم المستخدم غير موجود

===========

رمز PHP:
$read = @fopen("data/".$_POST['username'].".txt", r) or die('خطأ اثناء قراءة الملف '.$_POST['username'].'.txt');;
while(!
feof($read))
{
$data .= fgets($read, 1024);
}

فتح ملف التيكست الخاص بالمستخدم لجلب كلمة المرور
===========

رمز PHP:
if($data != md5($_POST['password']))
{
echo
'<center>خطأ فى كلمة المرور<br> [ <a href="http://www.enjaztech.com/vb/"><< رجوع</a> ]</center>';
exit();
}

بعد ان تم جلب كلمة المرور يتم تشفير كلمة المرور المرسلة (التى قام المستخدم بكتابتها ) ثم التاكد من انها مساوية لكلمة المرور التى بالملف ام لا , ان كانت غير مساوية يتم اظهار رسالة: خطأ فى كلمة المرور

============

رمز PHP:
$_SESSION['user'] = $_POST['username'];
?>
<script type="text/javascript">
window.open("index.php", "_self");
</script>
<?

وهنا يتم تخزين اسم المستخدم فى السيشن الانتقال بالجافا اسكربت (تغيير الصفحة ) الى الصفحة الرئيسية..

==================

الان بعد ان قمنا بكتابة اساسيات البرنامج , سنقوم الان بمرحلة تظبيط الاسكربت...

اولا: بما اننا سنستخدم السيشن نقوم ببدأ السيشن بحيث وضع الكود باول ملف index.php بعد <?PHP

رمز PHP:
<?PHP
session_start
();

ثانيا: نقوم بفحص ان المستخدم مسجل دخول ام لا بحيث ان كان المستخدم مسجل دخول لا يصح ان يتم اظهار صفحة تسجيل الدخول (الفورم)

وسنقوم باضافة الكود قبل كود switch مباشرة كالتالى:

رمز PHP:
if(!$_SESSION['user'])
{
switch(
$_GET['page'])

ونقوم بانهاء "if" بعد انتهاء switch كالتالى:

رمز PHP:
}
}

وبالطبع سنقوم بوضع رسالة الترحيب بالمستخدم بعد انهاء "if" حيث نستخدم else ونضع الكود الترحيب كالتالى:

رمز PHP:
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 rel="nofollow" href="index.php?page=logout"> إنقر هنا</a> </td>
</tr>
</table></center>
<?
}

الشرح:

رمز PHP:
if($_GET['page'] == 'logout')
{
unset($_SESSION['user']);
?>
<script type="text/javascript">
window.open("index.php", "_self");
</script>
<?
exit();
}
?>

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

=============
رمز PHP:
?>

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

<center><table width="50%">
<tr>
<td>مرحباً بك يا <?=$_SESSION['user']?>, لتسجيل الخروج<a rel="nofollow" href="index.php?page=logout"> إنقر هنا</a> </td>
</tr>
</table></center>
<?

وهنا كود الترحيب بالمستخدم وكذلك رابط تسجيل الخروج

==============================

وفى النهاية عمل إحصائيات الاعضاء:
رمز PHP:

<?
$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>

الشرح:

رمز PHP:
$openfolder = opendir("data/");

فتح المجلد data لجلب ملفات الاعضاء

رمز PHP:
$count = 0;

وهذا المتغير سوف يتم وضع عدد الاعضاء به

رمز PHP:
while(($filename = readdir($openfolder)) !== false)

وهنا قراءة الملفات التى بداخل المجلد data وتخزين اسم الملف بالمتغير $filename

رمز PHP:
$ext_ar = explode(".", $filename);

وهنا جلب امتداد الملف بحيث كسر اسم الملف من خلل النقطة "." وتخريجها كمصفوفة

رمز PHP:
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 واخراجها كالتالى:
رمز PHP:
$ext_ar[0] = "ahmed";
$ext_ar[1] = "txt";

وبالتالى لكى نحضر امتداد الملف نستعمل $ext_ar[1]
مع العلم هنا ان عدد قيم المصفوفة 2 ...(قيمتين)
1- ahmed
2- txt
وبالتالى نقوم بالتعويض عن (1) بـ count($ext_ar) - 1 بحيث عدد القيم بالمصفوفة - 1

رمز PHP:
$count++;

اضافة 1 على كل ملف ($count++ معناها ==> $count = $count + 1

رمز Code:
$count++; ===> $count = $count + 1;
==========
كود HTML:
<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 وضع به الكود التالى لمنع اى شخص بمحاولة فتح المجلد من خلال الموقع

رمز Code:
<Limit GET POST PUT> order deny,allow deny from all </Limit>
================================

اتمنى ان ينال التطبيق اعجابكم بإذن الله