16 أبريل, 2010درس PHP: التحقق من عنوان البريد الإلكتروني
ستضع صفحة تسجيل في موقعك على أمل أن الزوار سيتركون عناوين بريدهم الإلكتروني، بحيث يمكنك البقاء على اتصال معهم عند طرحك منتج جديد للبيع، أو تقديمك درس – خبر – موضوع جديد قد يثير اهتمامهم. أو حتى ربما كنت تريد شيئا في المقابل قبل أن تعطيهم مستند تقني قيم قضيت شهرين في اتمامه! أيا كان السبب، عندما يقوم المستخدمون بالاشتراك للانضمام الى موقعك الخاص بك قد ترغب في التحقق من عنوان البريد الالكتروني على أنها حقيقية عن طريق إرسال وصلة تفعيل الاشتراك لعناوين بريدهم الإلكتروني. ستتعلم كيفية القيام بذلك في هذا الدرس.

نظرة عامة:
في هاذا الدرس سنحتاج لصناعة 4 ملفات:
1. signup.php ملف التسجيل
2. signup_ac.php ملف ارسال رابط التفعيل الى البريد
3. confirmation.php ملف التفعيل
4. config.php الاتصال بقاعدة البيانات
كما نحتاج لقاعدة بيانات نعطيها اسم registration، داخلها جدولين هما:
1. temp_members_db جدول الأعضاء الغير مفعلين المؤقت
2. registered_members جدول الأعضاء المفعلين
مبدأ عمل الكود:
1. عند تسجيل اشتراك جديد، ستحفظ بياناته في الجدول المؤقت temp_members_db و سيُولد رقم عشوائي كعمود مرفق للاشتراك في الجدول، ثم ترسل رسالة الى البريد مرفقة بالرقم العشوائي على شكل رابط.
2. بعد الضغط على رابط التفعيل سيفعل الاشتراك و ذلك بنقل بيانات الاشتراك المستهدف الى جدول الاعضاء المفعلين registered_members، و في حالة أن المستخدم أدخل بريد غير صحيح لن يصله أصلا رابط و لن يتمكن من تفعيل حسابه.
1. صناعة الجداول:
(اضغط على Show Source لاظهار الكود)
temp_members_db
CREATE TABLE `temp_members_db` ( `confirm_code` varchar(65) NOT NULL default '', `name` varchar(65) NOT NULL default '', `email` varchar(65) NOT NULL default '', `password` varchar(15) NOT NULL default '', `country` varchar(65) NOT NULL default '' ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
registered_members
CREATE TABLE `registered_members` ( `id` int(4) NOT NULL auto_increment, `name` varchar(65) NOT NULL default '', `email` varchar(65) NOT NULL default '', `password` varchar(65) NOT NULL default '', `country` varchar(65) NOT NULL default '', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

2. ملف التسجيل signup.php:
<table width="350" border="0" align="center" cellpadding="0" cellspacing="0"> <tr> <td><form name="form1" method="post" action="signup_ac.php"> <table width="100%" border="0" cellspacing="4" cellpadding="0"> <tr> <td colspan="3"><strong>Sign up</strong></td> </tr> <tr> <td width="76">Name</td> <td width="3">:</td> <td width="305"><input name="name" type="text" id="name" size="30"></td> </tr> <tr> <td>E-mail</td> <td>:</td> <td><input name="email" type="text" id="email" size="30"></td> </tr> <tr> <td>password</td> <td>:</td> <td><input name="password" type="password" id="password" size="30"></td> </tr> <tr> <td>Country</td> <td>:</td> <td><input name="country" type="text" id="country" size="30"></td> </tr> <tr> <td> </td> <td> </td> <td><input type="submit" name="Submit" value="Submit"> <input type="reset" name="Reset" value="Reset"></td> </tr> </table> </form></td> </tr> </table>

3. ملف signup_ac.php:
(ملف تخزين البيانات في قاعدة البيانات و ارسال رابط التفعيل الى البريد).
include('config.php');
// table name
$tbl_name=temp_members_db;
// Random confirmation code
$confirm_code=md5(uniqid(rand()));
// values sent from form
$name=$_POST['name'];
$email=$_POST['email'];
$country=$_POST['country'];
// Insert data into database
$sql="INSERT INTO $tbl_name(confirm_code, name, email, password, country)VALUES('$confirm_code', '$name', '$email', '$password', '$country')";
$result=mysql_query($sql);
// if suceesfully inserted data into database, send confirmation link to email
if($result){
<strong> // ---------------- SEND MAIL FORM ----------------</strong>
// send e-mail to ...
$to=$email;
// Your subject
$subject="Your confirmation link here";
// From
$header="from: your name ";
// Your message
$message="Your Comfirmation link \r\n";
$message.="Click on this link to activate your account \r\n";
$message.="http://www.yourweb.com/confirmation.php?passkey=$confirm_code";
// send email
$sentmail = mail($to,$subject,$message,$header);
}
// if not found
else {
echo "Not found your email in our database";
}
// if your email succesfully sent
if($sentmail){
echo "Your Confirmation link Has Been Sent To Your Email Address.";
}
else {
echo "Cannot send Confirmation link to your e-mail address";
}
?>
ملف confirmation.php:
عندما تصل الرسالة الى المستخدم سيرى رابط التفعيل الى الملف confirmation.php في موقعك، كمثال:
http://www.example.com/confirmation.php?passkey=2d727dd16186e688eac7edaef8350594
في هذه الخطوة:
1. التحقق من المفتاح العشوائي.
2. اذا وجد فعلا يسنقل البيانات من جدول temp_members_db الى جدول .registered_members
3. حذف البيانات المؤقتة temp_members_db .

<?
include('config.php');
// Passkey that got from link
$passkey=$_GET['passkey'];
$tbl_name1="temp_members_db";
// Retrieve data from table where row that match this passkey
$sql1="SELECT * FROM $tbl_name1 WHERE confirm_code ='$passkey'";
$result1=mysql_query($sql1);
// If successfully queried
if($result1){
// Count how many row has this passkey
$count=mysql_num_rows($result1);
// if found this passkey in our database, retrieve data from table "temp_members_db"
if($count==1){
$rows=mysql_fetch_array($result1);
$name=$rows['name'];
$email=$rows['email'];
$password=$rows['password'];
$country=$rows['country'];
$tbl_name2="registered_members";
// Insert data that retrieves from "temp_members_db" into table "registered_members"
$sql2="INSERT INTO $tbl_name2(name, email, password, country)VALUES('$name', '$email', '$password', '$country')";
$result2=mysql_query($sql2);
}
// if not found passkey, display message "Wrong Confirmation code"
else {
echo "Wrong Confirmation code";
}
// if successfully moved data from table"temp_members_db" to table "registered_members" displays message "Your account has been activated" and don't forget to delete confirmation code from table "temp_members_db"
if($result2){
echo "Your account has been activated";
// Delete information of this user from table "temp_members_db" that has this passkey
$sql3="DELETE FROM $tbl_name1 WHERE confirm_code = '$passkey'";
$result3=mysql_query($sql3);
}
}
?>
ملف config.php :
في الأخير ملف الاتصال بقاعدة البيانات.
<?
$host="localhost"; // Host name
$username=""; // Mysql username
$password=""; // Mysql password
$db_name=""; // Database name
//Connect to server and select database.
mysql_connect("$host", "$username", "$password")or die("cannot connect to server");
mysql_select_db("$db_name")or die("cannot select DB");
?>
تحتاج للتعديل على الملف الاخير، و ملف signup_ac.php في السطر 36 لتحول الرابط الى رابط موقعك. هاذا نمودج بسيط فقط متوسط المستوى، و يوضح لك فقط فكرة كيفية التحقق من البريد، حاول تطبيق الدرس على استضافة تدعم الدالة mail() و لا تحاول على السيرفر المحلي لانه لايستطيع ارسال الرسائل للتحقق، محتوى الكود سهل جدا. ادا احتاج أي شخص لشرح اظافي لا يتردد في الطلب، ادعولي بالنجاح في الدراسة، أخوكم محمد.
معلومات عن التدوينة
تم نشر هذه التدوينة يوم الجمعة 16 أبريل 2010 الساعة 2:33 م
التصنيف : تطوير المواقع
المشاهدات: 3,483
الوسوم : PHP, اسكربت, التحقق من البريد, تفعيل الاشتراك


في 17 أبريل 2010 الساعة 5:38 م
سلام عليكم بارك الله فيك يأخي محمد على الدرس الرائع
و الحصري
و لكن للاسف يلزمه إستضافة مدفوعة :(
في 17 أبريل 2010 الساعة 6:40 م
و عليكم السلام، هناك العديد من الاستضافات المجانية التي تستطيع بها تجربة هاذا الاسكربت البسيط و سيعمل بنجاح.
او ان اردت تجربتها على السيرفر المحلي جرب فكرة استبدال كود ارسال البريد بكود صنع ملف نص داخله رابط التفعيل.
في 19 أبريل 2010 الساعة 12:40 م
شكرا اخي على المدونة الرائعة
و اتمنى لك التوفيق و الاستمرار
و سوف اتابعك كل جديدك
في 5 مايو 2010 الساعة 8:32 ص
اشكرك على هذة المدونة الرائعة
في 6 مايو 2010 الساعة 12:29 م
شكرا على مجهودك الرائع
في 20 مايو 2010 الساعة 10:33 ص
Salut MErci Bcp Mais Hol4ko jai rien compri lol ^^ je peu avoir ton email kho ?
في 24 مايو 2010 الساعة 5:51 م
جزاك الله خير درس رائع ومتكامل ومنظم.
في 8 يونيو 2010 الساعة 10:23 م
مشاء الله وش هالدرس الروعه ربي يجزاك اللف خير
ومبروك على الموقع الروعه والاستايل الجديد
من زمان ما زرتك :$
في 20 يونيو 2010 الساعة 12:00 ص
تحياتي اخي العزيز وتحياتي لشعب الجزائر وخاصا منتخبه الذي اذهل العالم بوجوده امام الانكليز اما بعد يا اخي العزيز انت قدمت لنا برنامج لوجن سبوفير لكن لم يعد يعمل لا البرنامج القديم ولا الجديد الذي انزلتها ارجو الرد تحياتي لك
في 25 ديسمبر 2011 الساعة 8:48 ص
بسم الله الرحمن الرحيم
أشكرك على الدرس أخي محمد،فعلا درس يحتاجه جميع مبرمجي و مطوري المواقع.
حقيقة أنا قمت ببرمجة نسخة منتديات جديدة(مازالت في بداياتها)
أردت دمج هذه الخاصية الجديدة منك أخي محمد لكني فشلت في ذلك
بحيث أردت إستخدام ملف واحد فقط هو الملف singup.php بحيث يكون هو ملف التسجيل،إرسال كود التحقق و التأكيد
هل يمكنك مساعدتي في ذلك؟
في 27 ديسمبر 2011 الساعة 1:03 ص
عبد المجيد شرفاوي: قدم لي بعض التفاصيل لأرى إن كان بإستطاعتي المساعدة.