[セットトップ]【Day 51】PHPはユーザー登録後のメールボックス検証を実現し、アカウントをアクティブにする


            ,     ,                 ,           URL  ,                           。               。

       ,      PHP+Mysql      、      、      、  URL       。

業務プロセス1、ユーザーが登録情報を提出する.2、データベースに書き込み、アカウントの状態がアクティブになっていない.3、ユーザー名パスワードまたは他の識別文字を暗号化して識別コードをアクティブ化する(あなたもアクティブ化コードと呼ぶことができる).4、作成したアクティブ化識別コードの構成URLをユーザーが提出したメールボックスに送る.5、ユーザーはメールボックスにログインしてURLをクリックしてアクティブ化する.6、アクティブ化識別コードを検証し、正しい場合はアカウントをアクティブ化する.
        Email   ,         、    、                    Email  ,        t_user    :
CREATE TABLE IF NOT EXISTS `t_user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(30) NOT NULL COMMENT '   ', `password` varchar(32) NOT NULL COMMENT '  ', `email` varchar(30) NOT NULL COMMENT '  ', `token` varchar(50) NOT NULL COMMENT '     ', `token_exptime` int(10) NOT NULL COMMENT '      ', `status` tinyint(1) NOT NULL DEFAULT '0' COMMENT '  ,0-   ,1-   ', `regtime` int(10) NOT NULL COMMENT '    ', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; 
            ,          ,     、     。
<form id="reg" action="register.php" method="post"> 
    <p><input type="text" class="input" name="username" id="user"></p> 
    <p><input type="password" class="input" name="password" id="pass"></p> 
    <p>E-mail:<input type="text" class="input" name="email" id="email"></p> 
    <p><input type="submit" class="btn" value="    "></p> 
</form> 

ユーザーの入力に必要なフロントエンド検証を行うには、フォーム検証機能について、当駅の文章:フォーム検証プラグインValidationの応用例を説明することをお勧めします.本文はフロントエンド検証コードを省略します.また、ページにはユーザーにパスワードの繰り返し入力を要求する入力ボックスがあり、一時的にサボってしまう必要があります.register.phpユーザは登録情報をregisterに送信する.phpで処理します.register.phpは、データの書き込みとメールの送信の2つの機能を完了する必要があります.まず必要な2つのファイル、connectを含む.phpとsmtp.class.php、この2つのファイルは外で提供されているダウンロードパッケージにあります.ダウンロードを歓迎します.
include_once("connect.php");//      
include_once("smtp.class.php");//      

次に、ユーザーがコミットした情報をフィルタリングし、ユーザー名が存在するかどうかを検証します(フロントエンドでも検証できます).
$username = stripslashes(trim($_POST['username'])); 
$query = mysql_query("select id from t_user where username='$username'"); 
$num = mysql_num_rows($query); 
if($num==1){ 
    echo '      ,         '; 
    exit; 
} 

次に、ユーザーパスワードを暗号化し、アクティブな識別コードを構築します.
$password = md5(trim($_POST['password'])); //     
$email = trim($_POST['email']); //   
$regtime = time(); 

$token = md5($username.$password.$regtime); //          
$token_exptime = time()+60*60*24;//     24    

$sql = "insert into `t_user` (`username`,`password`,`email`,`token`,`token_exptime`,`regtime`) values ('$username','$password','$email','$token','$token_exptime','$regtime')"; 

mysql_query($sql); 
     ,$token          ,      、          md5     。$token_exptime        URL     ,               ,      24       。             t_user 。
        ,                      ,                   URL            ,       :
if(mysql_insert_id()){ 
    $smtpserver = ""; //SMTP   , :smtp.163.com 
    $smtpserverport = 25; //SMTP     ,   25 
    $smtpusermail = ""; //SMTP        , [email protected] 
    $smtpuser = ""; //SMTP        [email protected] 
    $smtppass = ""; //SMTP         
    $smtp = new Smtp($smtpserver, $smtpserverport, true, $smtpuser, $smtppass); //       
    $emailtype = "HTML"; //    ,  :text;  :HTML 
    $smtpemailto = $email; //     ,        Email 
    $smtpemailfrom = $smtpusermail; //     , [email protected] 
    $emailsubject = "      ";//     
    //       
    $emailbody = "   ".$username.":<br/>            。<br/>           。<br/> <a href='http://www.helloweba.com/demo/register/active.php?verify=".$token."' target= '_blank'>http://www.helloweba.com/demo/register/active.php?verify=".$token."</a><br/>           ,                   ,   24     。"; 
    //     
    $rs = $smtp->sendmail($smtpemailto, $smtpemailfrom, $emailsubject, $emailbody, $emailtype); 
    if($rs==1){ 
        $msg = '   ,    !<br/>                !';     
    }else{ 
        $msg = $rs;     
    } 
} 
echo $msg; 
                          :  PHPMailer        HTML     ,      。

    active.php

          ,         Email     helloweba     ,             ,  active.php  。

    active.php         ,    verify  ,      。                  ,         ,      ,                  status  1,    ,          。
include_once("connect.php");//      

$verify = stripslashes(trim($_GET['verify'])); 
$nowtime = time(); 

$query = mysql_query("select id,token_exptime from t_user where status='0' and `token`='$verify'"); 
$row = mysql_fetch_array($query); 
if($row){ 
    if($nowtime>$row['token_exptime']){ //24hour 
        $msg = '         ,               .'; 
    }else{ 
        mysql_query("update t_user set status=1 where id=".$row['id']); 
        if(mysql_affected_rows($link)!=1) die(0); 
        $msg = '    !'; 
    } 
}else{ 
    $msg = 'error.';     
} 
echo $msg; 
     ,  token        ,     。