الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

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

بدأه القادرى في 29 نوفمبر 2009 · 5 رد · 3,692 مشاهدة · في منتدى تطوير المواقع بـ PHP
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

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

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

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

المطلبات:

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

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

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

الفكرة العامة:

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

محتوى البرنامج:

- ملف index.php

- مجلد data

52221880101.jpg

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


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

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

التطبيق:

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

89180260012.jpg

الكود:


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

ومن هنا سيتم تسجيل الاعضاء من خلال هذا الإسكربت حيث سيتم ارسال البيانات الى صفحة index.php?page=check_reg وهى إسم المستخدم وكلمة المرور

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

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


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>';
}

شرح الكود:


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

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

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


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

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


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();
}

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

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


if(file_exists("data/".$_POST['username'].".txt"))
{
echo '<center>المستخدم '.$_POST['username'].' موجود بالفعل <br> [ <a rel="nofollow" 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="http://www.enjaztech.com/vb/">تسجيل الدخول</a> ]</center>';

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

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

3- صفحة الدخول: index.php

75848278263.jpg


<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 rel="nofollow" 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="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>';
}

الشرح:


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

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


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

==========


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'];
?>
<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 rel="nofollow" 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 rel="nofollow" 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 ...(قيمتين)

1- ahmed

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.expbuilder.com/elkadreyscripts/storetxt/

لمشاهدة التطبيق:

لتحميل التطبيق: http://www.ziddu.com/download/7537538/txt.zip.html

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

3
#2

جيد جدا اخونا القادري .... وبورك مسعاك

cert.gif

___________________

فليتك تحلو والحياة مريرة - وليتك ترضى والأنام غضـــاب

وليت الذي بيني وبينك عامر - وبيني وبين العالمين خـراب

اذا صح منك الود فالكل هين - وكل الذي فوق التراب تـــراب

____________________

سبحانك اللهم وبحمدك اشهد ان لا اله الا انت استغفرك واتوب اليك

#3

جميل جدا

جزاك الله خيرا

amdvsintel22.jpg

--i use AMD--

لا اله الا الله محمد رسول الله

أستعن بالله و لا تعجز

تابعنى على تويتر

***

#4

ما شاء الله، بارك الله فيك أخي على هذا العمل

Follow me on Twitter:

@majds

Expert PHP Programmer, and Database Administrator

#5

شكرا اخي استفدت كثيرا من مشاركتك

we are all VARIABLES in the CLASS of life, doing the FUNCTION of living

#6

بارك الله فيك أخي الكريم

درس مفيد وقيم

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…