السلام عليكم ورحمة الله وبركاته هذا الدرس هو طريقة عمل برنامج مستخدمين بلغة php وتخزين البيانات فى ملفات txt طريقة عمل برنامج مستخدمين عن طريق تخزين بيناتهم داخل ملفات تيكست textفكرة هذا الدرس قد لا تصلح لعمل برنامج كبير مثل منتدى او مجلة او غيرة ولكن الهدف هو تسليط الضوء على أجزاء مهمة قد يغفل عنها المتعلم و حتى المحترف ... المطلبات: يجب تتعرف على اساسيات ال php . فى هذا الدرس سنتعرف على التالى:
- كيفية التعامل مع ملفات النصية text
- كيفية تخزين بيانات كل مستخدم
- كيفية إعطاء تصريح (444) للملفات
- كيفية الاستعلام عن بيانات المستخدم المخزنة فى الملف النصى
- عمل إحصائيات الاعضاء
الفكرة العامة: هو أنشاء ملف نصى 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:التسجيل إسم المستخدم كلمة المرور إعادة كلمة المرورومن هنا سيتم تسجيل الاعضاء من خلال هذا الإسكربت حيث سيتم ارسال البيانات الى صفحة index.php?page=check_reg وهى إسم المستخدم وكلمة المرور =========================================== 2- صفحة تخزين البيانات: index.php?page=check_regكود PHP:
if($_POST['password'] && $_POST['username']) { if($_POST['password'] != $_POST['password2']) { echo 'كلمتى المرور غير متطابقين
[ << رجوع ]'; exit(); } if($_POST['username'] && !ereg("^[a-zA-Z0-9_/-]+$", $_POST['username'])) { echo 'يجب ان يكون إسم المستخدم بالحروف الانجليزية وبدون مسافات
[ << رجوع ]'; exit(); } if(file_exists("data/".$_POST['username'].".txt")) { echo 'المستخدم '.$_POST['username'].' موجود بالفعل
[ << رجوع ]'; 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 'تم إنشاء الحساب '.$_POST['username'].'
يمكنك الآن[ تسجيل الدخول ]'; } else { echo 'يجب تكملة الخانات الفارغة
[ << رجوع ]'; }
شرح الكود:وهنا التأكد من ان المستخدم قام بكتابة البيانات كلها أم لا .... وان كان لا سيتم اظهار الرسالة يجب تكملة الخانات الفارغة كما بالكود:كود PHP:
if($_POST['password'] && $_POST['username'])
============كود PHP:
} else { echo 'يجب تكملة الخانات الفارغة
[ << رجوع ]'; }
هنا نقوم بفحص كلمتى المرور والتأكد من انهما متطابقان , ان كان لا سيتم اظهار الرسالة: كلمتى المرور غير متطابقين ============كود PHP:
if($_POST['password'] != $_POST['password2']) { echo 'كلمتى المرور غير متطابقين
[ << رجوع ]'; exit(); }
وهنا يتم فحص اسم المستخدم والتأكد من انه تم كتابة الاسك بالحروف الانجليزية من خلال الدالة ereg , وان كان لا يتم اظهار الرسالة يجب ان يكون إسم المستخدم بالحروف الانجليزية وبدون مسافات =============كود PHP:
if($_POST['username'] && !ereg("^[a-zA-Z0-9_/-]+$", $_POST['username'])) { echo 'يجب ان يكون إسم المستخدم بالحروف الانجليزية وبدون مسافات
[ << رجوع ]'; exit(); }
التأكد من ان إسم المستخدم موجود بالفعل ام لا من خلال التاكد من وجود ملف المستخدم فى مجلد data ==========كود PHP:
if(file_exists("data/".$_POST['username'].".txt")) { echo 'المستخدم '.$_POST['username'].' موجود بالفعل
[ << رجوع ]'; exit(); }
ان لم يكن هناك اخطاء فسيقوم البى اتش بى بتكملة الكود حتى الوصول لهذه الخطوة وهى مرحة انشاء الملف للمستخدم, حيث يتم عمل الملف ثم كتابة كلمة المرور بالملف مع تشفيرها بالدالة md5 ===========كود PHP:
$create = @fopen("data/".$_POST['username'].".txt", w) or die('خطأ اثناء إنشاء الملف '.$_POST['username'].'.txt'); fputs($create, md5($_POST['password'])); fclose($create);
وهنا يتم وضع صلحية القراءة والكتابة للملف الى 444 ==========كود PHP:
@chmod("data/".$_POST['username'].".txt", 0444);
وهنا يتم كتابة الرسالة للمستخدم بانه تم انشاء الحساب .... =========================================== 3- صفحة الدخول: index.phpكود PHP:
echo 'تم إنشاء الحساب '.$_POST['username'].'
يمكنك الآن[ تسجيل الدخول ]';
وهنا كود فورم تسجيل الدخول وهو مكون من اسم المستخدم وكلمة المرور ورابط اشترك الان للتسجيل بالاسكربت ============= 4- صفحة التاكد من بيانات التسجيل: index.php?page=loginكود HTML:يتوجب عليك تسجيل الدخول إسم المستخدم كلمة المرور إشترك الآنالشرح:كود PHP:
if($_POST['username'] && $_POST['password']) { if(!file_exists("data/".$_POST['username'].".txt")) { echo 'إسم المستخدم غير موجود
[ << رجوع ]'; 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 'خطأ فى كلمة المرور
[ << رجوع ]'; exit(); } $_SESSION['user'] = $_POST['username']; header("location: index.php"); } else { echo 'يجب تكملة الخانات الفارغة
[ << رجوع ]'; }
التأكد من ان جميع البيانات تم كتابتها وان لم يتم كتابة البيانات كاملة يتم اظهار الرسالة: يجب تكملة الخانات الفارغةكود PHP:
if($_POST['username'] && $_POST['password'])
==========كود PHP:
} else { echo 'يجب تكملة الخانات الفارغة
[ << رجوع ]'; }
التاكد من ان اسم المستخدم موجود واحضار البيانات وان لم يتم العثور على الملف يتم اظهار ان المستخد غير مسجل من قبل: إسم المستخدم غير موجود ===========كود PHP:
if(!file_exists("data/".$_POST['username'].".txt")) { echo 'إسم المستخدم غير موجود
[ << رجوع ]'; 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 'خطأ فى كلمة المرور
[ << رجوع ]'; exit(); }
وهنا رابط تسجيل الخروج حيث عند نقر المستخدم رابط تسجيل الخروج سيتم ارساله الى هذه الصفحة =============كود PHP:
$_SESSION['user'] = $_POST['username']; ?> مرحباً بك يا , لتسجيل الخروج إنقر هنا
الشرح:كود PHP:
?> مرحباً بك يا , لتسجيل الخروج إنقر هنا إحصائيات الأعضاء
عدد الأعضاء عضو
فتح المجلد data لجلب ملفات الاعضاءكود PHP:
$openfolder = opendir("data/");
وهذا المتغير سوف يتم وضع عدد الاعضاء بهكود PHP:
$count = 0;
وهنا قراءة الملفات التى بداخل المجلد data وتخزين اسم الملف بالمتغير $filenameكود PHP:
while(($filename = readdir($openfolder)) !== false)
وهنا جلب امتداد الملف بحيث كسر اسم الملف من خلل النقطة "." وتخريجها كمصفوفةكود PHP:
$ext_ar = explode(".", $filename);
وهنا التأكد من أن المحدد فى $filename نوعه ملف وليس مجلد من خلال is_file("data/".$filename) وهنا $ext_ar[count($ext_ar) - 1] == 'txt' يتم التأكد من ان نوع الملف txt من بحيث جلب اخر قيمة بالمصفوفة مثال: لو كان اسم الملف ahmed.txt يتم تقسمها فى المصفوفة من خلال الدالة explode واخراجها كالتالى:كود PHP:
if(is_file("data/".$filename) && $ext_ar[count($ext_ar) - 1] == 'txt')
وبالتالى لكى نحضر امتداد الملف نستعمل $ext_ar[1] مع العلم هنا ان عدد قيم المصفوفة 2 ...(قيمتين)كود PHP:
$ext_ar[0] = "ahmed"; $ext_ar[1] = "txt";
1- ahmed 2- txtوبالتالى نقوم بالتعويض عن (1) بـ count($ext_ar) - 1 بحيث عدد القيم بالمصفوفة - 1اضافة 1 على كل ملف ($count++ معناها ==> $count = $count + 1كود PHP:
$count++;
==========كود:$count++; ===> $count = $count + 1;وهنا كود الإحصائيات ============ واخيرا حماية المجلد data بال .htaccess قم بإنشاء ملف بإسم .htaccess داخل مجلد data وضع به الكود التالى لمنع اى شخص بمحاولة فتح المجلد من خلال الموقعكود HTML:إحصائيات الأعضاء عدد الأعضاء عضوكود:order deny,allow deny from all================================ اتمنى ان ينال التطبيق اعجابكم بإذن اللهلمشاهدة التطبيق: http://www.expbuilder.com/elkadreyscripts/storetxt/ لتحميل التطبيق: http://www.ziddu.com/download/7537538/txt.zip.htmlاترككم فى رعاية الله