《PHP編程:PHP+jQuery 注冊模塊的改進(jìn)(二):郵箱激活第1/2頁》要點:
本文介紹了PHP編程:PHP+jQuery 注冊模塊的改進(jìn)(二):郵箱激活第1/2頁,希望對您有用。如果有疑問,可以聯(lián)系我們。
接《PHP+jQuery 注冊模塊的改進(jìn)之一》繼續(xù)修改:PHP編程
①在注冊成功后返回登錄郵件頁面( maillogin.php ),在頁面中用戶可以點擊鏈接跳轉(zhuǎn)到本身注冊郵箱的登錄頁面,可以再次發(fā)送激活鏈接;PHP編程
②給激活鏈接設(shè)置有效期,過了有效期點擊激活連接,會跳轉(zhuǎn)頁面讓用戶選擇再次發(fā)送郵件或者返回注冊頁;再次發(fā)送郵件后,進(jìn)郵箱點擊鏈接激活;PHP編程
③點擊重新發(fā)送激活連接,不跳轉(zhuǎn)頁面,在當(dāng)前頁無刷新彈出通知:已重新發(fā)送鏈接,幾秒鐘之后通知消失;PHP編程
④點擊更換收件郵箱,跳轉(zhuǎn)至注冊頁PHP編程
1.點擊郵箱鏈接跳轉(zhuǎn)至相應(yīng)郵箱登陸界面PHP編程
思路:PHP編程
在maillogin.js中( 也可在php中設(shè)置 )設(shè)置常用郵件地址列表,當(dāng)用戶的注冊郵箱和列表中的郵箱匹配時,則顯示button"立即登錄驗證郵箱",點擊則跳轉(zhuǎn)至郵箱的登陸首頁;如果用戶注冊的郵箱在列表中不存在時,則不顯示登陸button.PHP編程
如圖,當(dāng)郵箱列表中存在注冊郵箱時:PHP編程
PHP編程
當(dāng)郵箱列表中不存在注冊郵箱時:PHP編程
PHP編程
當(dāng)傳遞的參數(shù)不是有效的郵箱時提示參數(shù)差錯:PHP編程
PHP編程
maillogin.php:PHP編程
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>注冊頁面</title> <link href="templets/css/common.css" rel="stylesheet" type="text/css"> <style> #container{ background-color:#fff; width:990px; height:547px; margin-top:50px; margin-bottom:20px; overflow:hidden; } #mailChk{ width:530px; margin:100px auto auto auto; position:relative;} .mailfonts{ margin-left:20px;} .mailpic{ float:left;} .mailfonts{ float:left;} .hfonts{ font-size:22px; } .ftit{ position:relative; top:-70px; left:-180px; border-bottom:1px solid #eee; width:870px; padding-bottom:10px; font-size: 20px; font-weight: normal; font-family: "Microsoft YaHei",\5fae\8f6f\96c5\9ed1,arial,\5b8b\4f53; color: #323232; } .ftit2{ height:1px; top:50px; left:-180px; } .sfonts{ line-height:48px; color:#666;} .orange{ color:#ee8c18;} #maillogin{ display: block; width: 390px; height: 50px; line-height: 50px; border: 0; overflow: hidden; text-align: center; background: #69b3f2; font-family: "Microsoft YaHei",\5fae\8f6f\96c5\9ed1,arial,\5b8b\4f53; font-size: 26px; -webkit-border-radius: 2px; -moz-border-radius: 2px; border-radius: 2px; margin:100px auto 0 85px; cursor:pointer; } #maillogin:hover{ background: #7cbdf5;} #maillogin,#maillogin:hover{ color:#fff;} #maillogin a{ color:#fff;} .notice{ position:relative; bottom:-70px; left:-180px; } .notit{ font-size:14px; color:#949494; font-weight:bold; font-family:arial;} .noul{ color:#949494; margin-left:-40px;} </style> <script src="templets/js/jquery-1.8.3.min.js"></script> <script src="templets/js/maillogin.js"></script> </head> <body> <!--頂部長條--> <div id="header-nav"> <div id="header-nav-fonts"> <span class="top-tie-big"><a href="#">Dee's BLOG</a></span> <span class="top-tie"> | </span> <span class="top-tie-big">注冊</span> <span class="top-tie-small">已有帳號?馬上<a href="#">登錄</a></span> <div class="cls"></div> </div> </div> <!-- 內(nèi)容區(qū) --> <div id="container"> <div id="mailChk"> <?php if(isset($_GET['m']) && $_GET['m']!=""){ $m = $_GET['m']; }else{ echo "<div class=\"hfonts ftit\">操作有誤,<a href=\"templets/register.html\">請重新注冊</div>"; exit(); } ?> <div class="hfonts ftit">郵箱驗證</div> <img class="mailpic" src="templets/images/mail.jpg"> <div class="mailfonts"> <div class="hfonts">驗證郵件已發(fā)出,請48小時內(nèi)登陸郵箱驗證</div> <div class="sfonts">登錄郵箱 <a id="mailaddr" class="orange"><?php echo $m;?></a> ,并按郵件提示操作即可</div> </div> <button type="button" id="maillogin"><a href="">立即登錄郵箱驗證</a></button> <div class="ftit ftit2"></div> <div class="cls"></div> <div class="notice"> <h3 class="notit">還沒有收到驗證郵件呢?</h3> <ul class="noul"> <li>1.測驗考試到廣告郵件、垃圾郵件目錄里找找看</li> <li>2.<a class="blue" href="#">再次發(fā)送驗證郵件</a></li> <li>3.如果重發(fā)注冊驗證郵件仍然沒有收到,請更換<a class="blue" href="#">另一個郵件地址</a></li> </ul> </div> </div> </div> </body> </html>
maillogin.js:PHP編程
_baidu_page_break_tag_$(function(){ //郵箱地址 function mailaddr(mail){ if(!mail.split("@")[1]){ alert("參數(shù)差錯"); return false; } var mail = mail.split("@"); mail = mail[1].toLowerCase(); //與常用郵箱進(jìn)行對比 if(mail == "qq.com" || mail == "vip.qq.com" || mail == "foxmail.com"){ return 'mail.qq.com'; }else if(mail == '163.com'){ return 'mail.163.com'; }else if(mail == 'vip.163.com'){ return 'vip.163.com'; }else if(mail == '126.com'){ return'mail.126.com'; }else if(mail == 'gmail.com'){ return'mail.google.com'; }else if(mail == 'sohu.com'){ return'mail.sohu.com'; }else if(mail == 'tom.com'){ return'mail.tom.com'; }else if(mail == 'vip.sina.com'){ return'vip.sina.com'; }else if(mail == 'sina.com.cn' || mail == 'sina.com'){ return'mail.sina.com.cn'; }else if(mail == 'tom.com'){ return'mail.tom.com'; }else if(mail == 'yahoo.com.cn' || mail == 'yahoo.cn'){ return'mail.cn.yahoo.com'; }else if(mail == 'tom.com'){ return'mail.tom.com'; }else if(mail == 'yeah.net'){ return'www.yeah.net'; }else if(mail == '21cn.com'){ return'mail.21cn.com'; }else if(mail == 'hotmail.com'){ return'www.hotmail.com'; }else if(mail == 'sogou.com'){ return'mail.sogou.com'; }else if(mail == '188.com'){ return'www.188.com'; }else if(mail == '139.com'){ return'mail.10086.cn'; }else if(mail == '189.cn'){ return'webmail15.189.cn/webmail'; }else if(mail == 'wo.com.cn'){ return'mail.wo.com.cn/smsmail'; }else if(mail == '139.com'){ return'mail.10086.cn'; }else{ return''; } } var uemailaddr = $("#mailaddr").text(); if(mailaddr(uemailaddr) == ""){ $("#maillogin").remove(); //控制樣式 $(".ftit2").css("top","110px"); $(".notice").css("bottom","-120px"); $("#mailaddr").click(function(){ return false; }); }else{ $("#mailaddr").attr("href","http://"+mailaddr(uemailaddr)); $("#maillogin a").attr("href","http://"+mailaddr(uemailaddr)); }})
2.給激活鏈接設(shè)置失效時間PHP編程
關(guān)于設(shè)置失效時間的目的,我在網(wǎng)上看到有這幾種說法,第一是節(jié)省資源,過期的數(shù)據(jù)會被清除,這種說法我不認(rèn)同,因為在過期之后,只是這一條激活連接不能使用,但是注冊用戶可以重新發(fā)送鏈接,所以用戶數(shù)據(jù)并沒有被清除;第二種說法是平安,即在較短時間內(nèi)激活,可以避免用戶郵箱被盜引發(fā)的平安問題,對于這一點我也不認(rèn)同,因為即使用戶郵箱被盜,還是可以重新發(fā)送激活鏈接,激活鏈接的地址仍然是在郵箱里面,所以和被盜不被盜沒有關(guān)系;我認(rèn)為是,在一個較長的時間內(nèi),如果網(wǎng)站的注冊機(jī)制或者找回密碼機(jī)制發(fā)生了變化,失效時間可以在一定程度上避免很早之前的激活鏈接仍按照以前的機(jī)制而帶來激活錯誤或者找回密碼錯誤,此時用戶可以選擇重新生成最新的激活鏈接來保證注冊或者找回密碼的正確性,對網(wǎng)站來說更穩(wěn)定平安.PHP編程
思路:PHP編程
必要在數(shù)據(jù)庫中增加兩個字段,分別是表示用戶的注冊日期:regdate( int ),和激活鏈接是否有效的lockurl( tinyint ).PHP編程
當(dāng)用戶注冊成功時,把當(dāng)前日期插入到表中的regdate字段;當(dāng)用戶跨越有效期沒有點擊激活鏈接,再次點擊激活鏈接時就把數(shù)據(jù)庫中的lock字段修改成1,當(dāng)lock為1時,該鏈接失效,直到用戶重新生成注冊鏈接時更換activekey后,把lock值設(shè)為0,同時更新注冊時間,用戶才可以點擊新的鏈接發(fā)送郵件進(jìn)行激活.PHP編程
修改和新增的的文件有:PHP編程
register_chk.php,注冊成功時把當(dāng)前的時間戳插入表中;PHP編程
activation.php中在update user表的active字段之前,先判斷是否超過有效期,如果超過,則active字段不變,同時lockurl字段設(shè)為1,此時給出提示:請重新激活而且跳轉(zhuǎn)至reactivation.php頁面;PHP編程
reactivation.php接受參數(shù),如果參數(shù)正確,則顯示是重新收取激活鏈接還是返回注冊頁,如果參數(shù)差錯則直接返回注冊頁;PHP編程
當(dāng)選擇重新收取激活鏈接,則跳轉(zhuǎn)至remail.php,如果參數(shù)正確,則更新注冊時間和activekey,然后重新發(fā)送郵件,郵件中的地址依然指向activation.php.如果參數(shù)差錯,則跳轉(zhuǎn)回注冊頁.PHP編程
其他修改之處:PHP編程
1.把郵件代碼寫成郵件類PHP編程
郵件注冊類mail.class.php:PHP編程
<?php function postmail($auth,$port,$envelope,$password,$smtp,$postuemail,$subject,$mailbody){ //$smtp smtp郵件服務(wù)器地址 //$postuemail 用戶注冊郵件 //$subject 郵件主題 //$mailbody 郵件內(nèi)容 $config = array( 'auth'=>$auth,//發(fā)件人 'port' =>$port,//端口 'username'=>$envelope,//發(fā)件郵箱 'password'=>$password //發(fā)件郵箱暗碼 ); //實例化驗證的對象,使用gmail smtp服務(wù)器 $transport = new Zend_Mail_Transport_Smtp($smtp,$config); $mail = new Zend_Mail('utf-8'); $mail->addTo($postuemail,'獲取用戶注冊激活鏈接'); $mail->setFrom($envelope,$auth); $mail->setSubject($subject); $mail->setBodyHtml($mailbody); $mail->send($transport);}
2.用戶名注冊時區(qū)分大小寫,修改checkname.phpPHP編程
//用戶名區(qū)分大小寫$sql = "select uname from user where binary uname='".$uname."'";
流程圖:PHP編程
PHP編程
必要注意的是,GET傳遞的參數(shù)也要進(jìn)行轉(zhuǎn)義處理.PHP編程
PHP編程
Js倒計時跳轉(zhuǎn)代碼 showTime.js:PHP編程
var textBox = document.getElementById("textBox");var second = document.getElementById("second");var t = 4;function showTime(href){ t-=1; second.innerHTML = t; if(t==0){ textBox.innerHTML = "正在跳轉(zhuǎn)..."; self.location = href; } setTimeout("showTime(href)",1000);}
注冊并發(fā)送郵件代碼 register_chk.php:PHP編程
<?php header("charst=utf-8"); include_once 'conn/conn.php'; include_once 'Zend/Mail/Transport/Smtp.php'; include_once 'Zend/Mail.php'; include_once 'mail.class.php'; //激活key,生成的隨機(jī)數(shù) $key = md5(rand()); //先寫入數(shù)據(jù)庫,再發(fā)郵件 //寫入數(shù)據(jù)庫 //判斷是否開啟magic_quotes_gpc if(get_magic_quotes_gpc()){ $postuname = $_POST['uname']; $postupwd = $_POST['upwd']; $postuemail = $_POST['uemail']; }else{ $postuname = addslashes($_POST['uname']); $postupwd = addslashes($_POST['upwd']); $postuemail = addslashes($_POST['uemail']); } function check_input($value){ // 如果不是數(shù)字則加引號 if (!is_numeric($value)){ $value = mysql_real_escape_string($value); } return $value; } $postuname = check_input($postuname); $postupwd = check_input($postupwd); $postuemail = check_input($postuemail); $sql = "insert into user(uname,upwd,uemail,activekey,regdate)values('".trim($postuname)."','".md5(trim($postupwd))."','".trim($postuemail)."','".$key."','".time()."')"; $num = $conne->uidRst($sql); if($num == 1){ //插入成功時發(fā)送郵件 //用戶激活鏈接 $url = 'http://'.$_SERVER['HTTP_HOST'].'/activation.php'; //urlencode函數(shù)轉(zhuǎn)換url中的中文編碼 //帶反斜杠 $url.= '?name='.urlencode(trim($postuname)).'&k='.$key;//file_put_contents("D:/mylog.log",$url." *********\r\n",FILE_APPEND); //定義登錄使用的郵箱 $envelope = 'dee1566@126.com'; $password = '換成郵箱的暗碼'; $port = 25; $auth = 'login'; $smtp = 'smtp.126.com'; //激活郵件的主題和正文 $subject = '激活您的帳號'; $mailbody = '注冊成功,<a href="'.$url.'" target="_blank">請點擊此處激活帳號</a>'; postmail($auth,$port,$envelope,$password,$smtp,$postuemail,$subject,$mailbody); echo "<script>self.location=\"maillogin.php?m=".$postuemail."\";</script>"; }else{ //提示激活失敗并跳轉(zhuǎn) echo "<div id=\"textBox\">激活失敗,請重新注冊,<span id=\"second\"></span> 秒鐘后跳轉(zhuǎn)至重新激活頁...</div>"; echo "<script src=\"templets/js/showTime.js\"></script>"; echo "<script>var href='register.php';showTime(href);</script>"; }?>
激活.activation.php:PHP編程
<?php session_start();header('Content-type:text/html;charset=utf-8');include_once 'conn/conn.php';$nowTime = time();$table = "user";if(!empty($_GET['name']) && !is_null($_GET['name']) && !empty($_GET['k']) && !is_null($_GET['k'])){ if(get_magic_quotes_gpc()){ $getname = stripslashes(urldecode($_GET['name'])); $k = stripslashes(urldecode($_GET['k'])); }else{ $getname = urldecode($_GET['name']); $k = urldecode($_GET['k']); } //urldecode反轉(zhuǎn)url中的中文編碼 $sql = "select * from ".$table." where uname='".$getname."' and activekey='".$k."'";file_put_contents("D:/mylog.log",$sql." ---\r\n",FILE_APPEND); $num = $conne->getRowsNum($sql); if($num>0){ $rs = $conne->getRowsRst($sql); //注冊時間 $rsRegdate = $rs['regdate']; //有效期2分鐘 if($nowTime > $rsRegdate+120){ //跨越有效期 $upnum = $conne->uidRst("update ".$table." set lockurl = 1 where uname = '".$getname."' and activekey = '".$k."'"); if($upnum>0){ //提示激活失敗并跳轉(zhuǎn) echo "<div id=\"textBox\">跨越激活有效期,激活失敗,<span id=\"second\"></span> 秒鐘后跳轉(zhuǎn)至重新激活頁...</div>"; echo "<script src=\"templets/js/showTime.js\"></script>"; echo "<script>var href='reactivation.php?n=".urlencode($getname)."&k=".$k."';showTime(href);</script>"; }else{ //提示激活失敗并跳轉(zhuǎn) echo "<div id=\"textBox\">激活失敗,請重新注冊,<span id=\"second\"></span> 秒鐘后跳轉(zhuǎn)至重新激活頁...</div>"; echo "<script src=\"templets/js/showTime.js\"></script>"; echo "<script>var href='register.php';showTime(href);</script>"; } }else{ $upnum = $conne->uidRst("update ".$table." set active = 1 where uname = '".$getname."' and activekey = '".$k."'"); if($upnum>0){ $_SESSION['name'] = urldecode($getname); echo "<script>alert('您已成功激活');window.location.href='main.php';</script>"; }else{ echo "<script>alert('您已經(jīng)激活過了');window.location.href='main.php';</script>"; } } }else{ //提示激活失敗并跳轉(zhuǎn) echo "激活鏈接已失效,請重新發(fā)送激活鏈接或重新注冊"; echo "<script>window.setTimeout(\"self.location='register.php'\",3000);</script>"; }}?>
用戶選擇重新激活或返回注冊頁 reactivation.php:PHP編程
<?phpheader("charst=utf-8");if(isset($_GET['n']) && $_GET['n']!="" && isset($_GET['k']) && $_GET['k']!=""){ //過濾處理 if(get_magic_quotes_gpc()){ $n = stripslashes(urldecode($_GET['n'])); $k = stripslashes(urldecode($_GET['k'])); }else{ $n = $_GET['n']; $k = $_GET['k']; } echo "<a href='remail.php?n=".urlencode($n)."&k=".urlencode($k)."'>重新收取激活郵件</a>"; echo "<a href='register.php'>返回注冊頁</a>";}else{ echo "<div id=\"textBox\">參數(shù)差錯,請重新注冊,<span id=\"second\"></span> 秒鐘后跳轉(zhuǎn)至注冊頁...</div>"; echo "<script src=\"templets/js/showTime.js\"></script>"; echo "<script>var href='register.php';showTime(href);</script>";}?>
重新發(fā)送郵件 remail.php:PHP編程
<?phpheader("charst=utf-8");include_once 'conn/conn.php';include_once 'Zend/Mail/Transport/Smtp.php';include_once 'Zend/Mail.php';include_once 'mail.class.php';if(isset($_GET['n']) && $_GET['n']!="" && isset($_GET['k']) && $_GET['k']!=""){ //過濾處理 if(get_magic_quotes_gpc()){ $n = stripslashes(urldecode($_GET['n'])); $k = stripslashes(urldecode($_GET['k'])); }else{ $n = $_GET['n']; $k = $_GET['k']; } $table = "user"; //先查詢記錄 $sql = "select * from ".$table." where uname='".$n."' and activekey='".$k."'"; $rs = $conne->getRowsRst($sql); $rsuemail = $rs['uemail']; $num = $conne->getRowsNum($sql); if($num == 1){ $key = md5(rand()); //更新注冊時間 $nowTime = time(); //update activekey和lockurl $upnum = $conne->uidRst("update ".$table." set activekey = '".$key."' , lockurl=0,regdate = '".$nowTime."' where uname = '".$n."' and activekey = '".$k."'"); if($upnum == 1){ //插入成功時發(fā)送郵件 //用戶激活鏈接 $url = 'http://'.$_SERVER['HTTP_HOST'].'/activation.php'; //urlencode函數(shù)轉(zhuǎn)換url中的中文編碼 //帶反斜杠 $url.= '?name='.urlencode((trim($n))).'&k='.$key; //定義登錄使用的郵箱 $envelope = 'dee1566@126.com'; $password = '換成自己的郵箱暗碼'; $port = 25; $auth = 'login'; $smtp = 'smtp.126.com'; //激活郵件的主題和正文 $subject = '激活您的帳號'; $mailbody = '注冊成功,<a href="'.$url.'" target="_blank">請點擊此處激活帳號</a>'; postmail($auth,$port,$envelope,$password,$smtp,$rsuemail,$subject,$mailbody); echo "<script>self.location=\"maillogin.php?m=".$rsuemail."\";</script>"; }else{ //提示激活失敗并跳轉(zhuǎn) echo "<div id=\"textBox\">激活失敗,<span id=\"second\"></span> 秒鐘后跳轉(zhuǎn)至注冊頁...</div>"; echo "<script src=\"templets/js/showTime.js\"></script>"; echo "<script>var href='register.php';showTime(href);</script>"; } }else{ //提示激活失敗并跳轉(zhuǎn) echo "<div id=\"textBox\">12激活失敗,<span id=\"second\"></span> 秒鐘后跳轉(zhuǎn)至注冊頁...</div>"; echo "<script src=\"templets/js/showTime.js\"></script>"; echo "<script>var href='register.php';showTime(href);</script>"; }}else{ echo "<div id=\"textBox\">參數(shù)錯誤,請重新注冊,<span id=\"second\"></span> 秒鐘后跳轉(zhuǎn)至注冊頁...</div>"; echo "<script src=\"templets/js/showTime.js\"></script>"; echo "<script>var href='register.php';showTime(href);</script>";}?>
3.maillogin.php頁面重新發(fā)送激活鏈接PHP編程
思路: 注冊頁register_chk.php和重新發(fā)送郵件的remail.php頁面在發(fā)送郵件以后跳至maillogin.php時,除了把email通過GET傳遞過去,再加上name和key,在maillogin.php頁面把接受到的后兩個參數(shù)接受到hidden的input里,通過jQuery的post方法哀求remailajax.php重新發(fā)送郵件.發(fā)送成功以后通過jQuery設(shè)置定時器顯示文字通知用戶,4秒后自動消失.PHP編程
如圖:PHP編程
PHP編程
代碼:PHP編程
register_chk.php:PHP編程
<?php header("charst=utf-8"); include_once 'conn/conn.php'; include_once 'Zend/Mail/Transport/Smtp.php'; include_once 'Zend/Mail.php'; include_once 'mail.class.php'; //激活key,生成的隨機(jī)數(shù) $key = md5(rand()); //先寫入數(shù)據(jù)庫,再發(fā)郵件 //寫入數(shù)據(jù)庫 //判斷是否開啟magic_quotes_gpc if(get_magic_quotes_gpc()){ $postuname = trim($_POST['uname']); $postupwd = trim($_POST['upwd']); $postuemail = trim($_POST['uemail']); }else{ $postuname = addslashes(trim($_POST['uname'])); $postupwd = addslashes(trim($_POST['upwd'])); $postuemail = addslashes(trim($_POST['uemail'])); } function check_input($value){ // 如果不是數(shù)字則加引號 if (!is_numeric($value)){ $value = mysql_real_escape_string($value); } return $value; } $postuname = check_input($postuname); $postupwd = check_input($postupwd); $postuemail = check_input($postuemail); $sql = "insert into user(uname,upwd,uemail,activekey,regdate)values('".$postuname."','".md5($postupwd)."','".$postuemail."','".$key."','".time()."')"; $num = $conne->uidRst($sql); if($num == 1){ //插入成功時發(fā)送郵件 //用戶激活鏈接 $url = 'http://'.$_SERVER['HTTP_HOST'].'/activation.php'; //urlencode函數(shù)轉(zhuǎn)換url中的中文編碼 //帶反斜杠 $url.= '?name='.urlencode($postuname).'&k='.$key; //定義登錄使用的郵箱 $envelope = 'dee1566@126.com'; $password = '郵箱暗碼'; $port = 25; $auth = 'login'; $smtp = 'smtp.126.com'; //激活郵件的主題和正文 $subject = '激活您的帳號'; $mailbody = '注冊成功,<a href="'.$url.'" target="_blank">請點擊此處激活帳號</a>'; postmail($auth,$port,$envelope,$password,$smtp,$postuemail,$subject,$mailbody); echo "<script>self.location=\"maillogin.php?m=".$postuemail."&n=".urlencode($postuname)."&k=".$key."\";</script>"; }else{ //提示激活失敗并跳轉(zhuǎn) echo "<div id=\"textBox\">激活失敗,請重新注冊,<span id=\"second\"></span> 秒鐘后跳轉(zhuǎn)至重新激活頁...</div>"; echo "<script src=\"templets/js/showTime.js\"></script>"; echo "<script>var href='register.php';showTime(href);</script>"; }?>
remail.php:PHP編程
<?phpheader("charst=utf-8");include_once 'conn/conn.php';include_once 'Zend/Mail/Transport/Smtp.php';include_once 'Zend/Mail.php';include_once 'mail.class.php';if(isset($_GET['n']) && $_GET['n']!="" && isset($_GET['k']) && $_GET['k']!=""){ //過濾處理 if(get_magic_quotes_gpc()){ $n = stripslashes(urldecode($_GET['n'])); $k = stripslashes(urldecode($_GET['k'])); }else{ $n = $_GET['n']; $k = $_GET['k']; }file_put_contents("D:/mylog.log",$n." xxx\r\n",FILE_APPEND); $table = "user"; //先查詢記錄 //addslashes($n) 因為使用了mysql_real_escape_string,所以存儲在數(shù)據(jù)庫中的是帶轉(zhuǎn)義的字符串 $sql = "select * from ".$table." where uname='".$n."' and activekey='".$k."'"; $rs = $conne->getRowsRst($sql); $rsuemail = $rs['uemail'];file_put_contents("D:/mylog.log",$sql." xxx\r\n",FILE_APPEND); $num = $conne->getRowsNum($sql); if($num == 1){ $key = md5(rand()); //更新注冊時間 $nowTime = time(); //update activekey和lockurl $upnum = $conne->uidRst("update ".$table." set activekey = '".$key."' , lockurl=0,regdate = '".$nowTime."' where uname = '".$n."' and activekey = '".$k."'"); if($upnum == 1){ //插入成功時發(fā)送郵件 //用戶激活鏈接 $url = 'http://'.$_SERVER['HTTP_HOST'].'/activation.php'; //urlencode函數(shù)轉(zhuǎn)換url中的中文編碼 //帶反斜杠 $url.= '?name='.urlencode((trim($n))).'&k='.$key; //定義登錄使用的郵箱 $envelope = 'dee1566@126.com'; $password = '郵箱暗碼'; $port = 25; $auth = 'login'; $smtp = 'smtp.126.com'; //激活郵件的主題和正文 $subject = '激活您的帳號'; $mailbody = '注冊成功,<a href="'.$url.'" target="_blank">請點擊此處激活帳號</a>'; postmail($auth,$port,$envelope,$password,$smtp,$rsuemail,$subject,$mailbody); echo "<script>self.location=\"maillogin.php?m=".$rsuemail."&n=".urlencode($n)."&k=".$key."\";</script>"; }else{ //提示激活失敗并跳轉(zhuǎn) echo "<div id=\"textBox\">22激活失敗,<span id=\"second\"></span> 秒鐘后跳轉(zhuǎn)至注冊頁...</div>"; echo "<script src=\"templets/js/showTime.js\"></script>"; echo "<script>var href='register.php';showTime(href);</script>"; } }else{ //提示激活失敗并跳轉(zhuǎn) echo "<div id=\"textBox\">12激活失敗,<span id=\"second\"></span> 秒鐘后跳轉(zhuǎn)至注冊頁...</div>"; echo "<script src=\"templets/js/showTime.js\"></script>"; echo "<script>var href='register.php';showTime(href);</script>"; }}else{ echo "<div id=\"textBox\">參數(shù)錯誤,請重新注冊,<span id=\"second\"></span> 秒鐘后跳轉(zhuǎn)至注冊頁...</div>"; echo "<script src=\"templets/js/showTime.js\"></script>"; echo "<script>var href='register.php';showTime(href);</script>";}?>
maillogin.php:PHP編程
<!DOCTYPE html><html><head><meta charset="utf-8"><title>注冊頁面</title><link href="templets/css/common.css" rel="stylesheet" type="text/css"><style>#container{ background-color:#fff; width:990px; height:547px; margin-top:50px; margin-bottom:20px; overflow:hidden;}#mailChk{ width:530px; margin:100px auto auto auto; position:relative;}.mailfonts{ margin-left:20px;}.mailpic{ float:left;}.mailfonts{ float:left;}.hfonts{ font-size:22px; }.ftit{ position:relative; top:-70px; left:-180px; border-bottom:1px solid #eee; width:870px; padding-bottom:10px; font-size: 20px; font-weight: normal; font-family: "Microsoft YaHei",\5fae\8f6f\96c5\9ed1,arial,\5b8b\4f53; color: #323232;}.ftit2{ height:1px; top:50px; left:-180px; }.sfonts{ line-height:48px; color:#666;}.orange{ color:#ee8c18;}#maillogin{ display: block; width: 390px; height: 50px; line-height: 50px; border: 0; overflow: hidden; text-align: center; background: #69b3f2; font-family: "Microsoft YaHei",\5fae\8f6f\96c5\9ed1,arial,\5b8b\4f53; font-size: 26px; -webkit-border-radius: 2px; -moz-border-radius: 2px; border-radius: 2px; margin:100px auto 0 85px; cursor:pointer;}#maillogin:hover{ background: #7cbdf5;}#maillogin,#maillogin:hover{ color:#fff;}#maillogin a{ color:#fff;}.notice{ position:relative; bottom:-70px; left:-180px;}#notice{ width:300px; height:200px; position:fixed; top:50%; left:50%; margin:-100px 0 0 -150px; background:#eee; text-align:center; line-height:180px; display:none;}.notit{ font-size:14px; color:#949494; font-weight:bold; font-family:arial;}.noul{ color:#949494; margin-left:-40px;}</style><script src="templets/js/jquery-1.8.3.min.js"></script><script src="templets/js/maillogin.js"></script></head><body><!--頂部長條--><div id="header-nav"> <div id="header-nav-fonts"> <span class="top-tie-big"><a href="#">Dee's BLOG</a></span> <span class="top-tie"> | </span> <span class="top-tie-big">注冊</span> <span class="top-tie-small">已有帳號?馬上<a href="#">登錄</a></span> <div class="cls"></div> </div></div><!-- 內(nèi)容區(qū) --><div id="container"> <div id="mailChk"> <?php if(isset($_GET['m']) && $_GET['m']!=""){ $m = $_GET['m']; }else{ echo "<div class=\"hfonts ftit\">操作有誤,<a href=\"templets/register.html\">請重新注冊</div>"; exit(); } //接收用戶名和key if(!empty($_GET['n']) && !is_null($_GET['n']) && !empty($_GET['k']) && !is_null($_GET['k'])){ if(get_magic_quotes_gpc()){ $n = stripslashes(urldecode($_GET['n'])); $k = stripslashes(urldecode($_GET['k'])); }else{ $n = urldecode($_GET['n']); $k = urldecode($_GET['k']); } } require_once 'mail.class.php'; ?> <div class="hfonts ftit">郵箱驗證</div> <img class="mailpic" src="templets/images/mail.jpg"> <div class="mailfonts"> <div class="hfonts">驗證郵件已發(fā)出,請48小時內(nèi)登陸郵箱驗證</div> <div class="sfonts">登錄郵箱 <a id="mailaddr" class="orange"><?php echo $m;?></a> ,并按郵件提示操作即可</div> <input id="n" type="hidden" value="<?php echo $n;?>"/> <input id="k" type="hidden" value="<?php echo $k;?>"/> </div> <button type="button" id="maillogin"><a href="">立即登錄郵箱驗證</a></button> <div class="ftit ftit2"></div> <div class="cls"></div> <div class="notice"> <h3 class="notit">還沒有收到驗證郵件呢?</h3> <ul class="noul"> <li>1.測驗考試到廣告郵件、垃圾郵件目錄里找找看</li> <li>2.<a id="re" class="blue" href="#">再次發(fā)送驗證郵件</a></li> <li>3.如果重發(fā)注冊驗證郵件仍然沒有收到,請更換<a class="blue" href="register.php">另一個郵件地址</a></li> </ul> </div> </div> </div></body><script> $(function(){ $("#re").click(function(){ $.post("remailajax.php",{ //要傳遞的數(shù)據(jù) n : $("#n").val(), k : $("#k").val(), m : $("#mailaddr").text() },function(data,textStatus){ if(data == 0){ success(); }else{ alert("重新發(fā)送郵件失敗"); } }); return false; }); $notice = $("<div id=\"notice\">郵件已經(jīng)發(fā)送,請到郵箱中查看...</div>"); function success(){ $notice.insertAfter($("#mailChk")); $notice.show(300); } function hide(){ if($notice){ $notice.hide(300); } } //顯示4秒 setInterval(hide,4000); });</script></html>
emailajax.php:PHP編程
<?phpheader("charset=utf-8");include_once 'Zend/Mail/Transport/Smtp.php';include_once 'Zend/Mail.php';require_once 'mail.class.php';if(isset($_POST['n']) && $_POST['n']!="" && isset($_POST['k']) && $_POST['k']!="" && isset($_POST['m']) && $_POST['m']!=""){ if(get_magic_quotes_gpc()){ $n = stripslashes(urldecode($_POST['n'])); $k = stripslashes(urldecode($_POST['k'])); $m = stripslashes(urldecode($_POST['m'])); }else{ $n = $_POST['n']; $k = $_POST['k']; $m = $_POST['m']; } $url = 'http://'.$_SERVER['HTTP_HOST'].'/activation.php'; //urlencode函數(shù)轉(zhuǎn)換url中的中文編碼 //帶反斜杠 $url.= '?name='.urlencode($n).'&k='.$k; //定義登錄使用的郵箱 $envelope = 'dee1566@126.com'; $password = '郵箱暗碼'; $port = 25; $auth = 'login'; $smtp = 'smtp.126.com'; //激活郵件的主題和正文 $subject = '激活您的帳號'; $mailbody = '注冊成功,<a href="'.$url.'" target="_blank">請點擊此處激活帳號</a>'; postmail($auth,$port,$envelope,$password,$smtp,$m,$subject,$mailbody); echo 0;}
4.更換郵箱即重新注冊.PHP編程
maillogin.php代碼片段:PHP編程
<li>3.如果重發(fā)注冊驗證郵件仍然沒有收到,請更換<a class="blue" href="register.php">另一個郵件地址</a></li>
5.此時目錄布局和數(shù)據(jù)庫PHP編程
ROOT:
├─conn
│ ├─conn.php
│
├─templets
│ ├─css
│ │ ├─common.css
│ │ ├─register.css
│ │
│ ├─images
│ │
│ └─js
│ ├─jquery-1.8.3.min.js
│ ├─register.js
│ ├─emailup.js
│ ├─showTime.js
│ ├─maillogin.js
│
├─chkname.php
├─chkemail.php
├─valcode.php
├─register_chk.php
├─activation.php
├─mail.class.php -- 郵件類
├─maillogin.php --發(fā)送完郵件的返回頁,可以登錄郵箱和再次發(fā)送郵件
├─reactivation.php --用戶選擇是重新發(fā)送激活郵件還是返回注冊頁
├─remail.php --超時重新發(fā)送郵件
├─remailajax.php --點擊再次發(fā)送郵件
├─remail.php --重新發(fā)送郵件
├─showval.php --生產(chǎn)驗證碼
├─arial.ttf
│
└─ZendPHP編程
數(shù)據(jù)庫:PHP編程
CREATE TABLE `user` ( `id` int(11) NOT NULL auto_increment, `uname` varchar(14) character set utf8 collate utf8_bin NOT NULL default '', `upwd` varchar(32) NOT NULL default '', `uemail` varchar(50) NOT NULL default '', `active` tinyint(4) default '0', `count` tinyint(4) default '0', `activekey` varchar(32) NOT NULL default '' COMMENT '注冊時生成的key,用于激活驗證', `regdate` int(11) default NULL COMMENT '注冊時間', `lockurl` tinyint(4) default '0' COMMENT '跨越激活時間m沒有激活,就把該值置為1', PRIMARY KEY (`id`), UNIQUE KEY `uemail` (`uemail`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
歡迎參與《PHP編程:PHP+jQuery 注冊模塊的改進(jìn)(二):郵箱激活第1/2頁》討論,分享您的想法,維易PHP學(xué)院為您提供專業(yè)教程。
轉(zhuǎn)載請注明本頁網(wǎng)址:
http://www.snjht.com/jiaocheng/14554.html