نمایش نتایج 1 تا 14 از 14

نام تاپیک: آموزش ساخت و ارسال ایمیل فعال سازی

  1. #1

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

    ایمیل فعال سازی یکی از روش هایی ست که معمولن سایت ها برای اطمینان از اینکه کاربران واقعی در سایت ثبت نام کردن نه روبات ها یا کدهای مخرب و اینکه کاربرانی که ثبت نام کردن واقعن قصد استفاده از سایت رو دارن یا اطمینان از صحیح بودن روند ثبت نام از این روش استفاده می کنن. به این صورت که وقتی در سایت ثبت نام می کنید و ایمیل خودتون رو وارد می کنید یک ایمیل حاوی اطلاعاتی که حین ثبت نام وارد کردید برای شما ارسال می شه که با کلیک روی اون سایت عضویت شما کامل می شه و می تونید وارد سایت بشید. در این آموزش قصد داریم یه روش ساده برای این کار توضیح بدیم تا کاربران تازه کار بیشتر با این روش آشنا بشن.

    ابتدا ساختار دیتابیس:

    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

    محتوای فایل :
    کد HTML:
    <table border="0" align="center" cellspacing="0" cellpadding="0" width="350">
         <tr>
             <td>
             <form action="signup.php" method="post" name="form1">
                 <table border="0" cellspacing="4" cellpadding="0" width="100%">
                         <tr>
                             <td align="center" colspan="3"><h2>Sign up</h2></td>
                         </tr>
                         <tr>
                             <td width="76">Username</td>
                             <td width="3">:</td>
                             <td width="305"><input type="text" size="30" id="name" name="username"></td>
                         </tr>
                         <tr>
                             <td>Password</td>
                             <td>:</td>
                             <td><input type="password" size="30" id="password" name="password"></td>
                         </tr>
                         <tr>
                             <td>Email</td>
                             <td>:</td>
                             <td><input type="text" size="30" id="email" name="email"></td>
                         </tr>
                         <tr>
                             <td>&nbsp;</td>
                             <td>&nbsp;</td>
                             <td>
                                 <input type="submit" value="Submit" name="Register"> &nbsp;
                                 <input type="reset" value="Reset" name="Reset">
                             </td>
                         </tr>
                 </table>
             </form></td>
         </tr>
    </table>
    فایل به این صورت نمایش داده می شه:


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


    فایل config.php :

    در این فایل ما تنظیمات مربوط به دیتابیس رو ذخیره می کنیم
    <?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 :

    در این فایل:
    • اطلاعات کاربر رو می گیریم
    • کد تصادفی ایجاد می کنیم
    • در دیتابیس ثبت می کنیم
    • و یک ایمیل برای کاربر ارسال می کنیم که حاوی یک لینک برای فعال سازی عضویتشه


    محتوای فایل:

    <?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: نام سایت <test@test.com>";

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

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

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

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

    ?>


    حالا کاربر ایمیل خودش رو باز می کنه و می بینه که ایمیل از طرف سایت بهش رسیده که شامل یه لینک با این نشانیه:
    http://test.com/activation.php?code=d6f9b575a72824639f990aa8b0e029  5e


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

    فایل activation.php :
    <?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";
    }

    }
    ?>


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

    فایل های این پروژه رو می تونید از اینجا دانلود کنید:
    http://www.phpdevelopers.ir/wp-conte...ail_verify.zip

    منبع:
    http://phpdevelopers.ir/
    آخرین ویرایش به وسیله محمد.مولانا : پنج شنبه 30 دی 1389 در 14:35 عصر

  2. #2
    کاربر دائمی آواتار farhadfery
    تاریخ عضویت
    اردیبهشت 1387
    محل زندگی
    اصفهان
    پست
    723

    نقل قول: آموزش ساخت و ارسال ایمیل فعال سازی

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


    سلام. یه سوال دارم. این قسمت حتماً کد یکتا می زنه. یعنی ممکن هست که یه کد را دوبار بده؟

  3. #3
    کاربر جدید
    تاریخ عضویت
    دی 1389
    محل زندگی
    IRAN
    پست
    29

    نقل قول: آموزش ساخت و ارسال ایمیل فعال سازی

    چون اون تابع uniqid و رندوم از توابع زمان برای تولید کد استفاده می کنند ، عملا تکرار یک کد محال بنظر میرسه!، چون زمان هم تکرار شدنی نیست!!!

  4. #4

    نقل قول: آموزش ساخت و ارسال ایمیل فعال سازی

    سلام ینجکت فایل activation و چطوری رفع کنیم ؟

  5. #5
    کاربر دائمی آواتار ehsan_savadkohi
    تاریخ عضویت
    آذر 1390
    محل زندگی
    اصفهان
    پست
    150

    نقل قول: آموزش ساخت و ارسال ایمیل فعال سازی

    دمت گرم دادا

  6. #6

    نقل قول: آموزش ساخت و ارسال ایمیل فعال سازی

    نقل قول نوشته شده توسط محمد.مولانا مشاهده تاپیک
    ا
    <?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";
    }

    }
    ?>

    sql injection نداره؟

  7. #7
    کاربر دائمی
    تاریخ عضویت
    آبان 1390
    محل زندگی
    http://reza.biz
    پست
    858

    نقل قول: آموزش ساخت و ارسال ایمیل فعال سازی

    sql inject داره در حد لالیگا.

  8. #8

    نقل قول: آموزش ساخت و ارسال ایمیل فعال سازی

    سلام روی لکال جواب میده برای م خطا داره ؟

  9. #9
    کاربر دائمی
    تاریخ عضویت
    شهریور 1389
    محل زندگی
    جنوب عشق است
    پست
    1,557

    نقل قول: آموزش ساخت و ارسال ایمیل فعال سازی

    نقل قول نوشته شده توسط rezaonline.net مشاهده تاپیک
    sql inject داره در حد لالیگا.
    $code = $_GET['code'];

    "UPDATE `users` SET `active` = 1 WHERE `verify_code` = '".$code."';";

  10. #10

    نقل قول: آموزش ساخت و ارسال ایمیل فعال سازی

    خوب بنویسید:
    $code = mysql_real_escape_string($_GET['code']);

  11. #11
    کاربر دائمی
    تاریخ عضویت
    شهریور 1389
    محل زندگی
    جنوب عشق است
    پست
    1,557

    نقل قول: آموزش ساخت و ارسال ایمیل فعال سازی

    یک سوالی که در ذهن بنده هست
    اینکه
    ایا این تابع

    mysql_real_escape_string

    میتونه جلوی این باگ رو بگیره ؟ به طور کامل ؟ اصلا اساس کاره این تابع چیه ؟

  12. #12

    نقل قول: آموزش ساخت و ارسال ایمیل فعال سازی

    بله این تابع تمام کارکترهای مخرب برای SQL رو Escape میکنه. البته به شرطی که سایر استانداردها هم رعایت بشه. مثلاً شرط WHERE توی پرانتز نوشته بشه، اسامی فیلدهای توی Backquote (`) و مقادیر توی Single Quote (') محصور بشن و... :

    $code = mysql_real_escape_string($_GET['code']);
    $active_result = mysql_query("UPDATE `users` SET `active`='1' WHERE (`verify_code`='{$code}');");

  13. #13
    کاربر دائمی
    تاریخ عضویت
    آبان 1390
    محل زندگی
    http://reza.biz
    پست
    858

    نقل قول: آموزش ساخت و ارسال ایمیل فعال سازی

    میتونه جلوی این باگ رو بگیره ؟ به طور کامل ؟ اصلا اساس کاره این تابع چیه ؟
    خیر .
    راههای دورزدنش رو یه چند جایی دیدم الان حضور ذهن ندارم .
    کلا برای اینکه خیالتون از sql inject راحت بشه باید به PDO متوسل بشید .
    یه روز روش وقت بذارید حله . (البته شما استاد مایی برای بقیه دوستان میگم)

    این کد فعال سازی مشکلات زیادی داره ، یکی اینکه اینجا
     $sql = "SELECT * FROM `users` WHERE `verify_code` ='".$code."';";

    یه limit 1 باید بذاره .
    مساله بعدی اینه که باید id کاربر هم بفرستید .
    توی برگشت بر اساس آی دی کاربر و اون رشته رندم عمل فعال سازی رو انجام بدید .

  14. #14

    نقل قول: آموزش ساخت و ارسال ایمیل فعال سازی

    لینک دانلود خرابه !

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •