درس عمل برنامج بسيط والتخزين فى ملفات تكست txt

الكاتب: admin ,فى تاريخ: ديسمبر-14-2009 , أضف تعليق
السلام عليكم ورحمة الله وبركاته

هذا الدرس هو طريقة عمل برنامج مستخدمين بلغة 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 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>';
}

شرح الكود:

كود PHP:

if($_POST['password'] && $_POST['username'])

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

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

كود PHP:

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

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

كود PHP:

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

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

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

كود PHP:

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

وهنا يتم فحص اسم المستخدم والتأكد من انه تم كتابة الاسك بالحروف الانجليزية من خلال الدالة ereg , وان كان لا يتم اظهار الرسالة يجب ان يكون إسم المستخدم بالحروف الانجليزية وبدون مسافات
=============

كود PHP:

if(file_exists("data/".$_POST['username'].".txt"))
{
echo
'<center>المستخدم '.$_POST['username'].' موجود بالفعل <br> [ <a 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="index.php">تسجيل الدخول</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 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="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>';
}

الشرح:

كود PHP:

if($_POST['username'] && $_POST['password'])

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

كود PHP:

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

==========

كود PHP:

if(!file_exists("data/".$_POST['username'].".txt"))
{
echo
'<center>إسم المستخدم غير موجود<br> [ <a href="index.php"><< رجوع</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="index.php"><< رجوع</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 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 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

كود:

$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 وضع به الكود التالى لمنع اى شخص بمحاولة فتح المجلد من خلال الموقع

كود:

<Limit GET POST PUT>
order deny,allow
deny from all
</Limit>
================================

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


اترككم فى رعاية الله

أضف تعليق

You must be logged in to post a comment.