آموزش ارسال لینک فعال سازی در php
0 0

آموزش ارسال لینک فعال سازی در php


آموزش ارسال لینک فعال سازی در php

در این پست نحوه ارسال لینک فعال سازی برای فعال سازی حساب کاربری را در PHP برایتان قرار داده ایم.

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

اگر بخواهید بدانید که دلیل اینکه در سایت های مختلف بعد از ثبت نام لینک فعال سازی ارسال می کنند چیست خیلی ساده است ، بدلیل اینکه سایت تشخیص دهد که آیا این فردی که در سایت ثبت نام می کند واقعا ایمیل درستی را در سایت وارد می کند و ایمیل معتبر می باشد. اگر این کار را انجام ندهیم امکان دارد کاربران زیادی در سایت ثبت نموده که ایمیلشان معتبر نیست و به کار شما نیز نمی آید چون نمی توانید اخبار سایتتان را به کاربرانتان ارسال نمایید.

 بنابراین باید ابتدا در فرم ثبت نام که قبلا طراحی کردیم تغییراتی را ایجاد نموده و کار را شروع می نماییم.

در پست های قبلی ثبت نام در سایت را با اعتبارسنجی های مختلف و همچنین ورود و خروج از سایت و آخرین مطلب در این مورد ارسال ایمیل در php بود که در سایت قرار داده بودیم.

قبلا ما فرم ثبت نام را درست کرده بودیم ولی تغییراتی را باید در آن اعمال کنیم. ما می توانیم از دو روش برای این کار استفاده کنیم.

در روش اول ما می توانیم دو فیلد به جدول users اضافه کنیم که این فیلدها فیلدهای EmailActivation و ActivationCode می باشند. در این روش ما یک کد فعال سازی تولید کرده و برای فرد فرد یک لینک فعال سازی که حاوی این کد می باشد را ارسال می نماییم. و بعد از اینکه کاربر بر روی لینک فعال سازی کلیک نمود ما کد فعال سازی را دریافت کرده و با کدی که تولید کرده بودیم مقایسه می کنیم اگر برابر بودند حساب کاربری وی را فعال می نماییم و اگرنه لینک فعال سازی نامعتبر می باشد. ولی این روش عیبی که دارد این است که شما یک فیلد اضافه به نام کد فعال سازی در جدول دارید که نیاز نیست.

در روش دوم یک جدول درست کرده و دو فیلد UserId و ActivationCode را در آن در نظر می گیریم هنگامی که کاربر ثبت نام می کند UserId و کد فعال سازی در این جدول ثبت می شود و هنگامی که کاربر بر روی لینک فعال سازی کلیک می نماید عمل مقایسه انجام گرفته و اگر درست بود حساب کاربری فعال و این رکورد از جدول حذف می شود.

در این روش ما از روش دوم استفاده خواهیم کرد چون در آموزش های بعدی این روش بیشتر استفاده می شود.

در این آموزش ما از یک قالب ساده استفاده کردیم که شما می توانید کدهای بخش ثبت نام را در قالب خودتان کپی کنید همچنین برای ظاهر فرم نیز از چند خط کد Css استفاده کردیم تا ظاهر فرم زیباتر به نظر برسد.

کدهای بخش ثبت نام به صورت زیر می باشد. کدهای بخش ثبت نام همانند کدهای ثبت نام ساده می باشد و تغییرات فقط در صفحه CreateUser.php انجام شده است.

<?php session_start(); ?>
<html>
<head>
    <meta charset="UTF-8">
    <title>ثبت نام</title>
    <link href="style.css" type="text/css" rel="stylesheet">
</head>
<body>
<div class="wrapper">
    <div class="header">
        <a href="http://www.iranganj.ir"><img style="margin-top: 20px;margin-right: 30px;" src="logo.png"></a>
    </div>
    <div class="main">
        <div class="sidebar">
            <ul>
                <li>
                    <a href="register.php">ثبت نام</a>
                </li>
                <li>
                    <a href="login.php">ورود</a>
                </li>
            </ul>
        </div>
        <div class="content">
            <fieldset>
                <legend>برای ثبت نام در سایت فیلدهای زیر را پر کنید</legend>
                <?php
                if (isset($_SESSION["Message"])) {
                    $output = "<div class=\"error-box\">";
                    $output .= $_SESSION["Message"];
                    $output .= "</div>";
                    $_SESSION["Message"] = null;
                    echo $output;
                }
                ?>
                <form method="post" action="CreateUser.php" name="form1">
                    <div>
                        <div><label>نام کاربری</label><span class="required ">*</span>
                        </div>
                        <div class="hint--bottom hint--warning hint--rounded "
                             data-hint="یک نام کاربری برای خود انتخاب کنید">
                            <input type="text" name="txtUsername" placeholder="نام کاربری خود را وارد کنید">

                        </div>
                    </div>
                    <div>
                        <div>پسورد
                            <span class="required ">*</span></div>
                        <div>
                            <input type="password" name="txtPassword" placeholder="رمز عبور خود را وارد کنید">
                        </div>
                    </div>
                    <div>
                        <div>تکرار پسورد
                            <span class="required">*</span></div>
                        <div>
                            <input type="password" name="txtConfirmPassword"
                                   placeholder="رمز عبور خود را دوباره وارد کنید">
                        </div>
                    </div>
                    <div>
                        <div>ایمیل
                            <span class="required">*</span></div>
                        <div>
                            <input type="text" name="txtEmail" placeholder="ایمیل خود را وارد کنید">
                        </div>
                    </div>
                    <div>
                        <div>تایید ایمیل
                            <span class="required">*</span></div>
                        <div>
                            <input type="text" name="txtConfirmEmail" placeholder="ایمیل خود را دوباره وارد کنید">
                        </div>
                    </div>
                    <div>
                        <div></div>
                        <div>
                            <input type="submit" name="submit"
                                   style="width: 150px;height: 30px;font-size: 15px;font-family: " Arial Black",
                            arial-black;" value="ثبت نام" class="link-button green">
                        </div>
                    </div>
                </form>
            </fieldset>
        </div>
    </div>
    <div class="footer">
        <h4 style="text-align: center;padding: 20px;"><a href="http://www.iranganj.ir">تمامی حقوق متعلق با سایت
                ایران گنج می باشد</a></h4>
    </div>
</div>
</body>
</html>

در خط اول از دستور session_start() استفاده کردیم اگر بخواهیم از سشن در برنامه خودمان استفاده کنیم باید اولین کد ما این دستور باشد. دلیل استفاده از سشن در این برنامه این است که ما پیغام هایی را که موقع کلیک بر روی دکمه ثبت نام از صفحه createuser.php دریافت می کنیم را چاپ کنیم.

در کدهای بخش فرم ما از 5 تکست باکس استفاده کردیم. همچنین همچنین از تگ span استفاده کردیم و جلوی هر کدام از تکست باکس ها علامت ستاره را قرار داده ایم و همچنین از کلاس required استفاده کردیم تا رنگ ستاره ها قرمز شود. همچنین در داخل هر تکست باکس از مشخصه placeholder آن استفاده کردیم و متنی را در آن قرار دادیم. که کاربر آن متن را مشاهده می کند و تا زمانی که چیزی در کادر متن وارد نکرده آن متن نمایش داده می شود.

بعد از این که فرم ثبت نام را ساختیم نوبت به این می رسد که اطلاعات را از کاربر دریافت کرده و آنها را توسط کدهای PHP در پایگاه داده ذخیره نماییم بنابراین باید ابتدا پایگاه داده ای را در mysql ایجاد کنیم و یک جدول user نیز برای آن ایجاد نماییم.

فیلدهای مورد نیاز برای این کار : 1- UserId 2- Username 3- Email 4 – Password

5- EmailActivation

یک جدول دیگر به نام activation در ست کرده که دارای دو فیلد به نام های ActivationCode و UserId می باشد.

بعد از ساخت پایگاه داده باید کدهای مربوط به بخش ثبت نام را بنویسیم که کدهای آن به صورت زیر می باشد.

کدهای صفحه CreateUser.php به صورت زیر است.

<?php session_start(); ?>
<?php include("function.php"); ?>
<html>
<head>
    <meta charset="UTF-8">
    <title>ثبت نام</title>
    <link href="style.css" type="text/css" rel="stylesheet">
</head>
<body>
<div class="wrapper">
    <div class="header">
        <a href="http://www.iranganj.ir"><img style="margin-top: 20px;margin-right: 30px;" src="logo.png"></a>
    </div>
    <div class="main">
        <div class="sidebar">
            <ul>
                <li>
                    <a href="register.php">ثبت نام</a>
                <li>
                    <a href="login.php">ورود</a>
                </li>
                </li>
            </ul>
        </div>
        <div class="content">
            <?php
            if (isset($_POST['submit'])) {
                $Username = $_POST["txtUsername"];
                $Password = $_POST["txtPassword"];
                $confirmPassword = $_POST["txtConfirmPassword"];
                $Email = $_POST["txtEmail"];
                $confirmEmail = $_POST["txtConfirmEmail"];
                $EmailActivation = 0;
                if ($Username != "" && $Password != "" && $confirmPassword != "" && $Email != "" && $confirmEmail != "") {
                    $check_username = check_username_format($Username);
                    if (empty($check_username)) {
                        if (strlen($Password) > 5) {
                            $check_email = check_email_format($Email);
                            if (empty($check_email)) {
                                if ($Password == $confirmPassword) {
                                    if ($Email == $confirmEmail) {
                                        if (!find_user_by_username($Username)) {
                                            if (!find_user_by_email($Email)) {
                                                $connection = mysqli_connect("localhost", "root", "", "training");
                                                if (mysqli_connect_errno()) {
                                                    die("database connection failed: " .
                                                        mysqli_connect_error() .
                                                        "(" . mysqli_connect_errno() . ")"
                                                    );
                                                }
                                                mysqli_query($connection, "set names 'utf8'");
                                                $query = "INSERT INTO users (";
                                                $query .= " Username,Password,Email,EmailActivation";
                                                $query .= ") VALUES (";
                                                $query .= " '{$Username}','{$Password}','{$Email}',{$EmailActivation} ";
                                                $query .= ")";
                                                $result = mysqli_query($connection, $query);
                                                if ($result) {
                                                    //success
                                                    $_SESSION["Message"] = null;
                                                    $output = "<div class=\"success-box\">";
                                                    $output .= "ثبت نام شما با موفقیت انجام شد و لینک فعال سازی به ایمیل شما ارسال شد " . "<br />";
                                                    $output .= "برای فعال سازی حساب کاربری وارد ایمیل خود شوید و بر روی لینک فعال سازی کلیک نمایید";
                                                    $output .= "</div>";
                                                    echo $output;
                                                    //Save Email Activation
                                                    $info = find_user_by_username($Username);
                                                    $userId = $info["UserId"];
                                                    $activationCode = md5(uniqid(rand()));
                                                    insert_activation_link($activationCode, $userId);
                                                    //Send Email Activation
                                                    require_once("Includes/PHPMailer/class.phpmailer.php");
                                                    require_once("Includes/PHPMailer/class.smtp.php");
                                                    require_once("Includes/PHPMailer/language/phpmailer.lang-en.php");
                                                    //$to_name = "name";
                                                    $to = $Email;
                                                    $subject = "فعال سازی حساب کاربری " . strftime("%T", time());
                                                    $url = $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"];
                                                    $url = str_replace("CreateUser.php", "", $url);
                                                    $url = str_replace("localhost", "localhost:8080", $url);
                                                    $link = $url . "Activation.php?code=" . $activationCode;
                                                    $message = "لینک فعال سازی  " . "<br />";
                                                    $message .= "برای فعال سازی ثبت نام روی لینک زیر کلیک کنید " . "<br />";
                                                    $message .= "<a href='{$link}'>$link</a>";
                                                    $message = wordwrap($message, 70);
                                                    $from_name = "Site Name";
                                                    $from = "Email Sender";
                                                    $mail = new PHPMailer();
                                                    $mail->IsSMTP();
                                                    $mail->SMTPSecure = 'tls';
                                                    $mail->Host = "smtp.gmail.com";
                                                    $mail->Port = 587;
                                                    $mail->SMTPAuth = true;
                                                    $mail->IsHTML();
                                                    $mail->CharSet = "utf-8";
                                                    $mail->Username = "Email Sender";
                                                    $mail->Password = "Password";
                                                    $mail->FromName = $from_name;
                                                    $mail->From = $from;
                                                    $mail->AddAddress($to);
                                                    $mail->Subject = $subject;
                                                    $mail->Body = <<<EMAILBODY
                <html>
                <meta charset="utf-8" />
                <body>
                <div style="direction:rtl;">
                {$message}
                <div>
                </body>
                </html>
EMAILBODY;

                                                    $result = $mail->Send();
                                                    //echo $result ? 'Sent' : 'Error';
                                                    //End Send Email Activation
                                                } else {
                                                    //Failure
                                                    $message = "Subject Creation failed";
                                                    header("Location: register.php");
                                                }
                                            } else {
                                                $_SESSION["Message"] = "این ایمیل قبلا ثبت شده است";
                                                header("Location: register.php");
                                            }
                                        } else {
                                            $_SESSION["Message"] = "این نام کاربری قبلا ثبت شده است";
                                            header("Location: register.php");
                                        }
                                    } else {
                                        $_SESSION["Message"] = "ایمیل و تکرارآن یکسان نیستند";
                                        header("Location: register.php");
                                    }
                                } else {
                                    $_SESSION["Message"] = "رمز عبور و تکرار آن یکسان نیستند";
                                    header("Location: register.php");
                                }
                            } else {
                                // فرمت ایمیل
                                header("Location: register.php");
                            }
                        } else {
                            $_SESSION["Message"] = "رمز عبور شما کمتر از 6 کارکتر می باشد";
                            header("Location: register.php");
                        }
                    } else {
                        // فرمت نام کاربری
                        header("Location: register.php");
                    }
                } else {
                    $_SESSION["Message"] = "فیلدهای ستاره دار باید نکمیل شوند";
                    header("Location: register.php");
                }
            }
            ?>
        </div>
    </div>
    <div class="footer">
        <h4 style="text-align: center;padding: 20px;"><a href="http://www.iranganj.ir">تمامی حقوق متعلق با سایت
                ایران گنج می باشد</a></h4>
    </div>
</div>
</body>
</html>

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

//Save Email Activation
$info = find_user_by_username($Username);
$userId = $info["UserId"];
$activationCode = md5(uniqid(rand()));
insert_activation_link($activationCode, $userId);
$url = $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"];
$url = str_replace("CreateUser.php", "", $url);
$url = str_replace("localhost", "localhost:8080", $url);
$link = $url . "Activation.php?code=" . $activationCode;
$message = "لینک فعال سازی  " . "<br />";
$message .= "برای فعال سازی ثبت نام روی لینک زیر کلیک کنید " . "<br />";
$message .= "<a href='{$link}'>$link</a>";

با استفاده از تابع find_user_by_username آی دی کاربر را پیدا می کنیم سپس آن را در متغیر $userId قرار می دهیم. در ادامه با استفاده از دستور

md5(uniqid(rand()));

 یک کد یکتا تولید کرده و آن را در متغیر $activationCode قرار می دهیم سپس با استفاده از تابع insert_activation_link آن را در جدول activation ثبت می کنیم. سپس با استفاده از دستور

$url = $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"];

 آدرس را می خوانیم قسمت اول آدرس دومین و قسمت دوم بقیه آدرس صفحه می باشد. سپس با استفاده از دستور

str_replace("CreateUser.php", "", $url);

 آدرس صفحه جاری که CreateUser.php می باشد را به جای آن خالی قرار می دهیم چون باید به جای آن آدرس صفحه Activation.php قرار گیرد. سپس با استفاده از دستور

$url = str_replace("localhost", "localhost:8080", $url);

 اگر شما از پورت 8080 در لوکال هاست استفاده می کنید باید آن را تغییر دهید وگرنه نیازی به این دستور نمی باشد.

اکنون ما باید لینک را درست نمایم که این کار دستور زیر انجام می گیرد.

$link = $url . "Activation.php?code=" . $activationCode;

 در این دستور ما در ابتدا $url سپس نام صفحه Activation.php و به همراه آن کد فعال سازی را ارسال کرده ایم. و در خطوط بعدی پیغامی را نوشته و در اخر لینک را در تگ <a> قرار داده ایم. حال کاربر بعد از دیافت ایمیل باید بر روی لینک فعال سازی کلیک نماید که این کدها مربوط به صفحه Activaion.php می باشد.

کدهای این صفحه به صورت زیر می باشند.

<?php include("function.php"); ?>
<?php
$code = $_GET["code"];
$ActivationCode = $code;
$user = find_user_id_by_activation_code($ActivationCode);
if ($user) {
    $userId = $user["UserId"];
    update_user_email_activation($userId);
    $_SESSION["Message"]="حساب کاربری شما با موفقیت فعال شد";
    delete_user_email_activation($userId);
    header("Location: index.php");
} else {
    $_SESSION["Message"]="لینک فعال سازی نامعتبر است";
    header("Location: index.php");
}
?>

ابتدا با استفاده از دستور $_GET["code"]; کد فعال سازی را از url می خوانیم سپس ان را در ActivationCode قرار داده و با استفاده از تابع find_user_id_by_activation_code این کد را پیدا می کنیم که آیا چنین کدی در پایگاه داده ما وجود دارد یا نه. اگر وجود داشت آی دی کاربر را خوانده و در جدول users فیلد EmailActivation را به یک تغییر می دهیم که این کار با استفاده از تابع update_user_email_activation انجام می گیرد سپس در ادامه با استفاده از تابع delete_user_email_activation آن کد فعال سازی را از جدول حذف می کنیم. و کاربر را به صفحه index.php هدایت می کنیم و اگر کد فعال سازی وجود نداشت پیغام لینک فعال سازی نامعتبر است را ارسال می کنیم.

توجه : فایل sql پایگاه داده نیز ضمیمه برنامه می باشد.

دانلود

نویسنده حسین فتحی
گروه مطلب PHP
نوع مطلب سورس کد و آموزش
تاریخ انتشار ۲۸ دی ۱۳۹۳
منبع ایران گنج
تعداد نظرات ۰
قیمت کاربران VIP
توضیح توجه:
  • زمانی که روی لینک دانلود کلیک می کنید لینک دانلود به مدت 24 ساعت معتبر خواهد بود
  • لینک های دانلود دوره های آموزشی تا پایان دوره قابل دانلود می باشد.
  • برای خارج کردن فایل ها از حالت فشرده از ورژن جدید نرم افزار winrar استفاده کنید.
  • برای خارج کردن فایل ها از حالت فشرده لینک های دانلودی که چندین قسمت می باشند فقط قسمت اول را از حالت فشرده خارج کنید.
  • لطفا توضیحات نوشته شده برای مطالب را با دقت بخوانید.
  • برای نمایش فیلم ها می توانید از نرم افزار هایی مانند Km Player , VLC Player یا Media Player Classic استفاده کنید.
خرید VIP
امکان خرید از درگاه های بانکی و حساب مجازی

برای دانلود بعد از خرید به همین صفحه برگردید تا لینک های دانلود نمایش داده شود

نظر / سوال

Captcha