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

نموذج تسجيل و تفعيل التسجيل عبر البريد الإلكتروني

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

نموذج تسجيل و تفعيل التسجيل عبر البريد الإلكتروني

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

اليوم سنتعرف على طريقة التسجيل مع تفعيله عبر البريد الإلكتروني مثل ماهو موجود

في المنتديات حيث النموذج الخاص بنا سيكون بسيط يحمل 4 حقول و هي كالآتي :

user : هذا لإسم المستخدم .

pass : لكلمة السر .

email : للبريد الإلكتروني .

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

تم إرسال البيانات عبره أم لا لأنه لو إستخدمنا المتغير submit فهذا يجعل نموذجنا لا يعمل مع internet Explorer مع بعض المشاكل

في المتصفحات الأخرى .

post-133201-1251149800_thumb.png

النموذج واضح إن شاء الله فقط في السطر 10 تلاحظون إسم الحقل الخفي action مع قيمة register حيث هذه سنستعملها في التحقق من النموذج .

قاعدة البيانات الخاصة بنا ستكون كالآتي :

CREATE TABLE IF NOT EXISTS `users` (

`id` int(11) NOT NULL auto_increment,

`user` varchar(25) NOT NULL,

`password` varchar(25) NOT NULL,

`email` varchar(25) NOT NULL,

`code` varchar(50) NOT NULL,

`status` int(11) NOT NULL default '0',

PRIMARY KEY (`id`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

user : هو إسم المستخدم

password : كلمة السر

email : البريد الإلكتروني

code : هذا الحقل نضع فيه كلمة التفعيل التي ستكون عبارة عن تشفير لإسم المستخدم .

status : هذا الحقل سيحمل قيمة 0 مع كل مستخدم جديد دلالة على أن المستخدم غير مفعل حسابه أما لو كان حسابه مفعل فسيحمل القيمة 1 .

في السطر 16 نقوم بالتحقق من أن النموذج تم إرساله و ذلك بمعرفة إن المتغير action يحمل قيمة أم لا بإستخدام الدالة isset التي ترجع true في حالة إن كان المتغير يحمل قيمة .

الأسطر 17-19 هي إستقبال للبيانات من النموذج أما 21-22 فهي إتصال بقاعدة البيانات .

السطر 23 هو إستعلام يرجع لنا حقل في حالة تحقق الشرط حيث أن شرطنا هو وجود عضو بنفس الإسم الذي إستقبلناه من النموذج أما السطر

24 فهو إستخدام الدالة mysql_num_row التي تعيد لنا عدد الحقول من نتيجة إستعلام ،الهدف من هذا هو معرفة إن كان يوجد عضو مسجل أصلا

بهذا الإسم حتى نمنع منع التسجيل بنفس الإسم .

في حالة أرجع لنا الإستعلام حقلا فهذا يعني أن الإسم محجوز فنخبر العضو الجديد بإن هذا محجوز في السطر 27 (مسكين :D) بعدها نوقف عمل السكريبت في السطر 29 .

أما إن كان العكس (عدم إرجاع أي حقل من الإستعلام) فهذا يعني أنه محظوظ فنقوم بتوليد كلمة عشوائية في السطر 29 إنطلاقا من إسم المستخدم وذلك بتشفيرها بعدها نقوم بإضافة البيانات في السطر 32 لاحظوا أن الحقل status لم أقم بإضافة قيمة له ذلك أنه عند إضافة كل مستخدم جديد ستكون معه قيمة إبتدائية و هي 0 التي تعني أنه غير مفعل السبب في هذا هو الكسل في زيادة طول الإستعلام .

السطر 34 إستخدمنا فيه الدلة mysql_insert_id التي همتها إرجاع قيمة ال id الذي تم إنشائه في قاعدة البيانات من آخر إستعلام حيث هذا سيكون id آخر مستخدم قام بالتسجيل .

السطر 36 ننشيء فيه رابط يكون كالآتي : confirm.php?id=$id&code=$activation

حيث confirm.php ستكون الصفحة التي نقوم فيها بتفعيل الحساب ،id سيحمل رقما يعبر عن مستخدم في القاعدة أخيرا code هو رقم التفعيل .

السطر 37 هو الرسالة التي سترسل إلى بريد العضو للتفعيل أما السطر 38 فهو إرسال الرسالة إلى العضو بإستخدام الدالة mail التي تأخذ 3 وسائط ،الأولى البريد المرسل إليه في حالتنا بريد من قام بالتسجيل بعدها عنوان الراسلة أكيد ستكون تفعيل حساب أخيرا محتوى الرسالة التي ستحتوي على رابط التفعيل للمستخدم .

ملاحظة : الدالة mail تحمل أكثر من 3 وسائط لكن عادة نستخدم 3 الوسائط الأولى فقط .

post-133201-1251149864_thumb.png

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

السطر 11 للإتصال بالقاعدة و 12 لإختيار قاعدة البيانات أم السطر 13 فهو إستعلام نقوم بالبحث في قاعدة البيانات

عن هذا العضو ،بعدها في السطر 14 إن كان الإستعلام رد لنا حقلا واحد فهذا يعني أن العضو موجود فنقوم بتغيير حالته

من غير مفعل إلى مفعل و ذلك بتحديث قيمة الحقل status من 0 إلى 1 ، الباقي معروف .

ملاحظة : الشرح مختصر بعض الشيء و ذلك على فرض أن القاريء لديه معرفة بسيطة بقواعد البيانات .

المقال الأصلي : نموذج تسجيل و تفعيل التسجيل عبر البريد

activation.rar

تم تعديل هذه المشاركة بواسطة SIFE في 25 أغسطس 2009 في 07:02

''‏اللهم إني أسالك إيمانا دائما وأسألك قلبا خاشعا وأسألك علما ‏نافعا وأسألك يقينا صادقا وأسألك دينا قيما وأسألك العافية من كل ‏بلية''

'‏اللهم أغفر للمؤمنين و المؤمنات و المسلمين و المسلمات الأحياء ‏منهم و الأموات'

www.it-scoop.com

#2

شكرا اخي على المجهود، انا اؤيد جدا محاوله شرح مفاهيم لبرامج صغيره او اجزاء منها على شرح اساسيات في اللغه.

لكن عندي انتقادات اتمنى تتقبلها بصدر رحب (مرتبه حسب الاهميه)

1- درس مثل هذا طبعا مطلوب فيه التبسيط... لكن، انت كتبت كود ما فيه اي نوع من input validation و حسب قراءتي السريعه لم تتطرق للموضوع تماما.. بالتالي حصلت المشاكل الاتيه:

- اي شخص يستخدم ولو اجزاء من الكود هذا ممكن يتعرض لكل انواع SQL Injection

- عدد لايحصى من الاخطاء غير المقصوده ممكن تأثر على عمل البرنامج (مثلا... فراغ في احد الحقول..الاسم مثلا)

- مستخدمي موقع يستخدم اجزاء من الكود معرضين لكل انواع ْXSS Attacks و حتى الفيروسات و key loggers اذا كانت اجهزتهم غير محدثه بشكل سليم (او اعداداتها غير سليمه)

2- اتمنى يوجد نسخه للتحميل من الكود او ان تكتبه كنص حتى يستطيع المتعلم نسخه ولصقه

3- بوجهة نظري... مهم جدا وجود comments في كود تعليمي (وان كان مشروح بالتفصيل) هذا برايي يساعد المتعلم على التعود على المبادئ الصحيحه في قراءه الكود... كذلك استخدم نصوص فيها ' بدلا من " ... الخ من الامور التى تجعل الكود انظف و ينصح بها من مصممين اللغه

php5-zce-logo-new.gif

CCNA, CCNA Security, CCNP

#3
Ryn كتب:
شكرا اخي على المجهود، انا اؤيد جدا محاوله شرح مفاهيم لبرامج صغيره او اجزاء منها على شرح اساسيات في اللغه.

لكن عندي انتقادات اتمنى تتقبلها بصدر رحب (مرتبه حسب الاهميه)

1- درس مثل هذا طبعا مطلوب فيه التبسيط... لكن، انت كتبت كود ما فيه اي نوع من input validation و حسب قراءتي السريعه لم تتطرق للموضوع تماما.. بالتالي حصلت المشاكل الاتيه:

- اي شخص يستخدم ولو اجزاء من الكود هذا ممكن يتعرض لكل انواع SQL Injection

- عدد لايحصى من الاخطاء غير المقصوده ممكن تأثر على عمل البرنامج (مثلا... فراغ في احد الحقول..الاسم مثلا)

- مستخدمي موقع يستخدم اجزاء من الكود معرضين لكل انواع ْXSS Attacks و حتى الفيروسات و key loggers اذا كانت اجهزتهم غير محدثه بشكل سليم (او اعداداتها غير سليمه)

2- اتمنى يوجد نسخه للتحميل من الكود او ان تكتبه كنص حتى يستطيع المتعلم نسخه ولصقه

3- بوجهة نظري... مهم جدا وجود comments في كود تعليمي (وان كان مشروح بالتفصيل) هذا برايي يساعد المتعلم على التعود على المبادئ الصحيحه في قراءه الكود... كذلك استخدم نصوص فيها ' بدلا من " ... الخ من الامور التى تجعل الكود انظف و ينصح بها من مصممين اللغه

نفس الملاحظات :blush:

#4
اقتباس
1- درس مثل هذا طبعا مطلوب فيه التبسيط... لكن، انت كتبت كود ما فيه اي نوع من input validation و حسب قراءتي السريعه لم تتطرق للموضوع تماما.. بالتالي حصلت المشاكل الاتيه:

- اي شخص يستخدم ولو اجزاء من الكود هذا ممكن يتعرض لكل انواع SQL Injection

- عدد لايحصى من الاخطاء غير المقصوده ممكن تأثر على عمل البرنامج (مثلا... فراغ في احد الحقول..الاسم مثلا)

- مستخدمي موقع يستخدم اجزاء من الكود معرضين لكل انواع ْXSS Attacks و حتى الفيروسات و key loggers اذا كانت اجهزتهم غير محدثه بشكل سليم (او اعداداتها غير سليمه)

هذه معك فيها لكن الشيفرة ستكون أطول بمرتين مع تلبيس للمتعلم ،هذا الجانب التطويري فقط و لم أدمج الأمني معه .

اقتباس
2- اتمنى يوجد نسخه للتحميل من الكود او ان تكتبه كنص حتى يستطيع المتعلم نسخه ولصقه

تم التعديل .

اقتباس
3- بوجهة نظري... مهم جدا وجود comments في كود تعليمي (وان كان مشروح بالتفصيل) هذا برايي يساعد المتعلم على التعود على المبادئ الصحيحه في قراءه الكود... كذلك استخدم نصوص فيها ' بدلا من " ... الخ من الامور التى تجعل الكود انظف و ينصح بها من مصممين اللغه

إن شاء الله في المرة القادمة .

''‏اللهم إني أسالك إيمانا دائما وأسألك قلبا خاشعا وأسألك علما ‏نافعا وأسألك يقينا صادقا وأسألك دينا قيما وأسألك العافية من كل ‏بلية''

'‏اللهم أغفر للمؤمنين و المؤمنات و المسلمين و المسلمات الأحياء ‏منهم و الأموات'

www.it-scoop.com

#5

جميل جدا احب هذا النوع من المواضيع D:

لنترك جانب ثغرات الانجكشن وغيرها ونتكلم عن الفكره

هل هذا هو الوضع الصحيح او الافضل للقيام بالتحقيق ؟ اقصد تشفير الاسم ؟

ممكن لو كان لبرمجه خاصه لكن كيف لو كان سكربت للتوزيع ؟ ارى بما انك تقوم بحفظ كود التفعيل في القاعده

فلما لا يكون الكود يحوي ع رقم عشوائي افضل من ادخال اي شيء معروف كأسم او وقت ع المصفوفه

اظن ان طريقتك تصلح في حالة اننا لا نريد حفظ القيمه داخل قاعدة البيانات

عموما هي ليست اكثر من التحقق من البريد لكن في حالة استرجاع كلمة المرور يحتاجلها تفكري اكثر

شكرا ع الموضوع انا قراءته بمدونتك من قبل D:

[moveleft]

MiN! SpId3r SqUaD

[/moveleft]

#6

-اتفق معك تماما ان الكود يتضاعف، لكن على الاقل (برأيي) لابد من توضيح ان الكود لايمكن استخدامه واقعيا بدون input validation ، عدد المواقع على الانترنت المصابه بالنوع من الثغرات كبير جدا... علينا توضيح الموضوع للمبتدئين قدر الامكان.

- بالنسبه لمنطق البرنامج...

برأيي العيب الوحيد هو الاحتفاظ بالكود في قاعده البيانات بعد التحقق... شخصيا انشئ جدول منفصل فيه id و code ... واعتبر المستخدم غير مفعل حتى امسحه من الجدول... لكنها مسأله optimization لاداعي لذكرها في درس تعليمي (وجهه نظري طبعا :) ) ..... كذلك ممكن اضطر لاضافه status في جدول المستخدم (كما تم فعلا في الدرس) لاتجنب التحقق من الجدول الجديد عند كل تسجيل دخول... قد يكون فيه نوع من ال redundancy .... يعتمد على وضع البرنامج.

-اشكرك على تقبل الانتقاد... في وقتنا هذا قد تكون من اندر الصفات :)

php5-zce-logo-new.gif

CCNA, CCNA Security, CCNP

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

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

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

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

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