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

نظرة عامة:

في هاذا الدرس سنحتاج لصناعة 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>&nbsp;</td>
 <td>&nbsp;</td>
 <td><input type="submit" name="Submit"  value="Submit"> &nbsp;
 <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() و لا تحاول على السيرفر المحلي لانه لايستطيع ارسال الرسائل للتحقق، محتوى الكود سهل جدا. ادا احتاج أي شخص لشرح اظافي لا يتردد في الطلب، ادعولي بالنجاح في الدراسة، أخوكم محمد.

[ تحميل ملفات الدرس ]