نقطه ویرگول;

هر از گاهی از هر چیزی

هر از گاهی از هر چیزی

آموزش ساخت ایمیل فعال سازی

پنجشنبه, ۱۶ دی ۱۳۸۹، ۰۶:۲۵ ق.ظ
ایمیل فعال سازی یکی از روش هایی ست که معمولن سایت ها برای اطمینان از اینکه کاربران واقعی در سایت ثبت نام کردن نه روبات ها یا کدهای مخرب و اینکه کاربرانی که ثبت نام کردن واقعن قصد استفاده از سایت رو دارن یا اطمینان از صحیح بودن روند ثبت نام از این روش استفاده می کنن. به این صورت که وقتی در سایت ثبت نام می کنید و ایمیل خودتون رو وارد می کنید یک ایمیل حاوی اطلاعاتی که حین ثبت نام وارد کردید برای شما ارسال می شه که با کلیک روی اون سایت عضویت شما کامل می شه و می تونید وارد سایت بشید. در این آموزش قصد داریم یه روش ساده برای این کار توضیح بدیم تا کاربران تازه کار بیشتر با این روش آشنا بشن.
ابتدا ساختار دیتابیس:
CREATE TABLE IF NOT EXISTS `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(255) NOT NULL,
`password` varchar(255) NOT NULL,
`email` varchar(255) NOT NULL,
`verify_code` varchar(255) NOT NULL,
`active` bit(1) NOT NULL,
PRIMARY KEY (`id`)
)
این تصویر فیلدهای دیتابیس و توضیحاتش :



فقط تذکر بدم که در فیلد active مقدار صفر (۰) یعنی کاربر فعال نیست و مقدار یک(۱) یعنی فعال.

ساختار فایل ها


ما به چهارتا فایل نیاز داریم:
  • فایل register.php

  • در این فایل ما فرم ثبت نام خودمون رو قرار می دیم که شامل سه تا تکس فیلده:
  • username
  • password
  • email
  • و یه دکمه ی ارسال با نام register
    محتوای فایل :
     






























    Sign up

    Username :
    Password :
    Email :
       
     


    فایل به این صورت نمایش داده می شه:


    این فایل پس از گرفتن اطلاعات کاربر به صفحه ی signup.php ارسال می شه.

    فایل config.php :

    در این فایل ما تنظیمات مربوط به دیتابیس رو ذخیره می کنیم
    
     $dbhost = 'localhost'; //نام هاست دیتابیس
    $dbuser = 'dbuser'; // نام کاربری دیتابیس
    $dbpass = 'dbpass'; // گذرواژه ی دیتابیس
    $dbname = 'dbname'; //نام دیتابیس

    $url = 'http://test.com/'; // نشانی سایت

    $dblink = mysql_connect($dbhost, $dbuser, $dbpass) or die('خطا در اتصال');
    mysql_select_db($dbname, $dblink) or die('دیتابیس وجود ندارد');
    ?>

    فایل signup.php :

    در این فایل:
  • اطلاعات کاربر رو می گیریم
  • کد تصادفی ایجاد می کنیم
  • در دیتابیس ثبت می کنیم
  • و یک ایمیل برای کاربر ارسال می کنیم که حاوی یک لینک برای فعال سازی عضویتشه
  • محتوای فایل:
    
     include_once('config.php');
    

    //ایجاد کد تصادفی
    $activation_code = md5(uniqid(rand()));

    // اطلاعات کاربر
    $user = $_POST['username'];
    $pass = $_POST['password'];
    $email = $_POST['email'];

    //ثبت اطلاعات در دیتابیس
    $sql = "INSERT INTO `users` (
    `id`,
    `username`,
    `password`,
    `email`,
    `verify_code`,
    `active`
    )
    VALUES
    (
    NULL,
    '".$user."',
    '".$pass."',
    '".$email."',
    '".$activation_code."',
    0
    );";

    $result = mysql_query($sql) or die('query error');

    // ارسال ایمیل فعال سازی
    if($result){

    // ایمیل کاربر
    $to=$email;

    //موضوع ایمیل فعال سازی
    $subject="فعال سازی ثبت نام";

    // ایمیل سایت ما
    $header="from: نام سایت ";

    //متن ایمیل
    $message="لینک فعال سازی
    ";
    $message.="برای فعال سازی ثبت نام روی لینک زیر کلیک کنید
    ";
    $message.="
    ".$url."confirmation.php?code=$activation_code
    ";

    //ارسال ایمیل
    $sentmail = mail($to,$subject,$message,$header);

    }
    else {
    // اگر ثبت در دیتابیس انجام نشد
    echo "ثبت نام انجام نشد. دوباره تلاش کنید.";
    }

    //اگر ایمیل فعال سازی ارسال شد
    if($sentmail){
    echo "ثبت نام انجام شد و ایمیل فعال سازی برای شما ارسال شد";
    }
    // اگر ثبت نام انجام شد اما ایمیل فعال سازی ارسال نشد
    else {
    echo "ثبت نام انجام شد اما ایمیل فعال سازی ارسال نشد";
    }

    ?>

    حالا کاربر ایمیل خودش رو باز می کنه و می بینه که ایمیل از طرف سایت بهش رسیده که شامل یه لینک با این نشانیه:
    http://test.com/activation.php?code=d6f9b575a72824639f990aa8b0e0295e
    
    وقتی روی این لینک کلیک بکنه وارد سایت ما می شه و به صفحه ی activation.php راهنمایی می شه. متغیری به نام code با مقدار d6f9b575a72824639f990aa8b0e0295e ثبت شده که ما باید این مقدار رو از دیتابیس بخونیم. اگر چنین کدی وجود داشت ما مقدار active رو برابر با یک(۱) می کنیم و اگر وجود نداشت یعنی کاربری با این مشخصات ثبت نام نکرده در نتیجه خطای مربوطه رو نمایش می دیم.

    فایل activation.php :

    
     include('config.php');
    

    $code = $_GET['code'];

    $sql = "SELECT * FROM `users` WHERE `verify_code` ='".$code."';";

    $result = mysql_query($sql);

    if($result){

    $count = mysql_num_rows($result);

    // if found this passkey in our database, retrieve data from table "temp_members_db"
    if($count == 1){

    // Insert data that retrieves from "temp_members_db" into table "registered_members"
    $active_sql = "UPDATE `users` SET `active` = 1 WHERE `verify_code` = '".$code."';";
    $active_result = mysql_query($active_sql);
    echo 'activation OK';
    }

    // if not found passkey, display message "Wrong Confirmation code"
    else {
    echo "Wrong Confirmation code";
    }

    }
    ?>

    به همین راحتی می تونید یه بخش فعال سازی ایمیل در سایت خودتون ایجاد کنید.
    امیدوارم براتون مفید بوده باشه
    فایل های این پروژه رو می تونید از اینجا دانلود کنید:



    در صورتی که سوالی دارید می تونید در انجمن گفتگوی iranphp.org بپرسید یا همینجا در بخش دیدگاه ها سوالتون رو مطرح کنید
    همیشه شاد باشید

    نظرات  (۱۷)

    ۱۶ دی ۸۹ ، ۱۴:۱۷ حسن موحد
    بسیار خوب بوود همیشه در فکر چنین چیزی بودم .. اگر لطف کنید آموزش ساخت - قسمت جامعه مجازی هست . افزودن به دوستان منو بدید ممنون میشم ..
    اگر خوب متوجه نشدید در هر سوشیال یه لینک هست وقتی روی اون کلیک میکنی درخواست شما برای طرف مقابل ارسال میشه وبعد از تایید نفر مقابل شما به لیست اون افزوده میشوید . و همچنین اون به لیست شما !
    خیلی سخت نیست دوست عزیز
    شما یه جدول دارید مثلن به نام friends که توی این جدول ریلیشن ها رو نگهداری می کنید. برای نمونه کاربر شماره ۱ به کاربر شماره ی ۲ درخواست دوستی می فرسته
    وقتی کاربر شماره ۲ پروفایلش رو باز می کنه از جدول friends هر جایی که آی دی کاربر ۲ ثبت شده و درخواست دوستی برابر با ۰ هستش رو می خونید و نشون می دید.
    اگر کاربر شماره ۲ بپذیره این دوستی رو مقدار اون در جدول friends برابر با ۱ قرار می دید و از اون به بعد کاربر ۱ و ۲ با هم دوست می شن.
    در صورتی که نپذیره هم که هیچی.
    ارتباطی بر قرار نشده
    آموزش کاملی بود. متشکر ;)
    ۱۸ دی ۸۹ ، ۰۰:۵۴ مهدی هنرمند
    ممنون
    بسیار شفاف و کارا بود
    لذت بردم :)
    یه سوال نا مربوط! بالاخره مقالات همایش سراسری و تخصصی نرم افزارهای آزاد کجا هستن؟!!
    مطلب واقعا خوب توضیح داده شده بود . واضح و روشن این نشون میده که شما دارید زحمت می کشید.
    سلام دوستان من با asp.net کار میکنم و می خوام ایمیل فعال سازی برای کاربر ارسال کنم لطفا کدهای مورد نیازش رو واسم بفرستین خیییییییییییییلییییییی کارم گییییییییییییره
    دوست عزیز: دقت کنید که این سایت http://phpdevelopers.ir هستش. یعنی روی php تمرکز داره. فکر نمی کنم پاسختون رو اینجا پیدا کنید.
    بهتره تو یکی از سایت های مربوط به asp جستجو کنید و پاسخ رو پیدا موردنظرتون رو پیدا کنید
    با تشکر
    دوستان من از این کد استفاده کردم
    اما نمی تونه ایمیل رو ارسال کنه
    تنظیمات رو انجام دادم و لی فقط ثبت نام رو انجام می ده...
    لطفا راهنمایی کنید
    چه مشکلی دارین
    خطای به وجود اومده رو بیان کنید تا بشه کمک کرد
    واقعا خوب بود خوب خوب خوب
    منم مشکل دوستمون رو دارم. ثبت نام می کنه ولی ایمیل نمی فرسته... این پیغام رو میده:
    Warning: mail() [function.mail]: "sendmail_from" not set in php.ini or custom "From:" header missing in L:xampphtdocsmysqlregister_1_filesregProcess.php on line 41
    Warning: Cannot modify header information - headers already sent by (output started at L:xampphtdocsmysqlregister_1_filesregProcess.php:41) in L:xampphtdocsmysqlregister_1_filesregProcess.php on line 43
    منم نتونستم ازش استفاده کنم
    Warning: mail() [function.mail]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in C:xampphtdocsemail_verifyemail_verifysignup.php on line 51
    همچین خطایی داره
    منم مشکل شما رو داشتم. ولی برطرف شد. واسه اینکه بتونید ایمیل بفرستید باید رو FTPسرور امتحان کنید. کد Errorr که شما نوشتید (که البته برای من هم همین Errorr بود) به خاطر اینه که شما دارید سایت رو روی Local Server اجرا میکنید.
    واقعا خوب است
    بسیار خوب است
    واقعا خوب است
    بسیارعالی
    خوب بود دستتون ندرده
    اگر تمام برنامه های صفحه دستاپ به فایل پی دی اف تبدیل شده باشد چه باید کرد تا به حالت اول بازگدد؟

    ارسال نظر

    ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
    شما میتوانید از این تگهای html استفاده کنید:
    <b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
    تجدید کد امنیتی