最新消息: 新版網站上線了!!!

DEDECMS防惡意注冊增加郵箱注冊碼

前提條件:后臺核心設置,郵箱能夠正常通信。
0、在數據庫中新建一個dede_regnum表 .
表段如下圖:
1、/member/templets/reg-new.htm中
1>增加如下代碼:
<script language="javascript">
function sendsms(){
if(document.getElementById('email').value==''){
alert('請輸入郵箱帳號!');
document.getElementById('email').focus();
return false;
}
window.open("http://www.xx.com/member/regsendnum.php?num="+document.getElementById('email').value);
}
</script>
2>找到 <li><span>電子郵箱:</span> 替換為如下代碼:
?<li><span>電子郵箱:</span>
? ? ? ? ? ? <input type="text" class="intxt w200" id="email" name="email"/>
? ? ? ? ? ? <i class="red">*</i> <em id="_email" class="red">(每個電子郵箱只能注冊一個帳號,并且用于接收下方的注冊碼!)</em> </li>
? ? ?<li><span>電子郵箱注冊碼:</span>
? ? ? ? ? <input type="text" name="yznum" id="yznum" class="intxt w200" style="width: 80px; text-transform: uppercase;" /> <i class="red">*</i> <em id="_yznum">請點擊發送郵件獲取注冊碼</em> <input ?value="發送郵件" type="button" ?onClick="sendsms();"/>
</li> ?
效果如下圖:?
2、在member/reg_new.php中:
? ? ?在 ?#api{{
? ? ? ? if(defined('UC_API') && @include_once DEDEROOT.'/uc_client/client.php')之上增加如下代碼:
?//注冊碼核對
$time=time()-3600;//1小時前的注冊碼失效.
$yznum=$_POST['yznum'];
$email=$_POST['email'];
$regnum=$dsql->GetOne("SELECT * FROM `#@__regnum` WHERE email='$email' order by posttime desc limit 1");
if($regnum['num']==$yznum){
? ? ? ? ? ? ? ? ?//刪除一個小時前的注冊碼
if($dsql->GetOne("SELECT * FROM `#@__regnum` WHERE posttime<'$time'")){
$dsql->ExecuteNoneQuery("DELETE FROM `#@__regnum` WHERE posttime<'$time'"); ?
}
}else{
ShowMsg("注冊碼不對!","-1");
exit();
}
3、在member下新建一個regsendnum.php文件
代碼如下:
<?php
/**
?* @version ? ? ? ?$Id: regsendnum.php 1 11:11 2013年5月6日Z jackers $
?* @copyright ? ? ?Copyright (c) 2013, jackers, Inc.
?*/
?//當前文件是注冊時通過郵箱注冊碼的功能
require_once(dirname(__FILE__)."/config.php");
require_once DEDEINC.'/membermodel.cls.php';
$num=time()*5;
$randNum =substr(md5($num),0,4);
$timestamp=time();
$email=$_GET['num'];
$time=$timestamp-60;
if($dsql->GetOne("SELECT * FROM `#@__regnum` WHERE email='$email' AND posttime>'$time'")){
ShowMsg('如果你的注冊碼還沒有收到的話?請一分鐘后再重發!','/member/index_do.php?fmdo=user&dopost=regnew');
exit;
}
? //郵件驗證
$mailtitle = "{$cfg_webname}--提供給你的注冊碼信息";
$mailbody .= "{$cfg_webname}--";
$mailbody .="提供給您的注冊碼是:(".$randNum.")這四位數\n";
$mailbody .= "Power by http://www.xx.com 某某網!\r\n";
?
$headers = "From: ".$cfg_adminemail."\r\nReply-To: ".$cfg_adminemail;
? if($cfg_sendmail_bysmtp == 'Y' && !empty($cfg_smtp_server))
{ ? ? ? ?
$mailtype = 'TXT';
require_once(DEDEINC.'/mail.class.php');
$smtp = new smtp($cfg_smtp_server,$cfg_smtp_port,true,$cfg_smtp_usermail,$cfg_smtp_password);
$smtp->debug = false;
$smtp->sendmail($email,$cfg_webname,$cfg_smtp_usermail, $mailtitle, $mailbody, $mailtype);
}
else
{
@mail($email, $mailtitle, $mailbody, $headers);
}
? ? ? ? ? //End 郵件驗證
if($dsql->GetOne("SELECT * FROM `#@__regnum` WHERE email='$email'")){
$dsql->ExecuteNoneQuery("UPDATE `#@__regnum` SET `num`='$randNum',`posttime`='$timestamp' WHERE `email`='$email'");
}else{
$dsql->ExecuteNoneQuery("REPLACE INTO `#@__regnum` ( `num` , `posttime` , `email` ) VALUES ('$randNum', '$timestamp', '$email')");
}
ShowMsg('注冊碼信息已經成功發送到您的郵箱中,請注意查收!','/member/index_do.php?fmdo=user&dopost=regnew');
exit;
?>
4、member/templets/js/reg_new.js中:
在if($('#vdcode').val()=="") 之上增加如下代碼:?
if($('#yznum').val()=="")
{
$('#yznum').focus();
alert("郵箱注冊碼不能為空!");
return false;
}
?
?
補充:在郵箱無法發送郵件的到郵箱的時候。有些服務器做安全組策略的時候關閉了一些端口tcp、udp等導致郵件無法發送到用戶的郵箱。?
?上面我們是把注冊碼存到數據庫中,我們只需要讓注冊用戶自己查詢出注冊碼即可。?
5、我們在member目錄下新建一個serialnumber.htm文件
代碼如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>會員中心 - 郵箱注冊碼查詢</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<form action="serialnumber.php" method="post">
<input name="email" type="text" /><em style="color:#FF0000;">輸入郵箱查詢注冊碼</em>
<input type="submit" value="查詢"/>
</form>
</body>
</html>?
?
6、 我們在member目錄下建立一個讀取查詢的serialnumber.php文件
代碼如下:
<?php
require_once(dirname(__FILE__)."/config.php");
? ? ? ? /** 驗證碼查看 **/
? ? $sql="select email,num from #@__regnum where email='".$email."'";
? ? ? ? $tests = array();
? ? ? ? $dsql->SetQuery($sql);
? ? ? ? $dsql->Execute();
? ? ? ? while ($row = $dsql->GetArray()) {
? ? ? ? ? ? $tests[] = $row;
? ? ? ? }
? ? ? ? $dpl = new DedeTemplate();
? ? ? ? $tpl = dirname(__FILE__)."/templets/zhuce.htm";
? ? ? ? $dpl->LoadTemplate($tpl);
? ? ? ? $dpl->display();?
7、我們需要建立一個zhuce.htm來展示我們查詢出來的注冊碼?
代碼如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>會員中心 - 郵箱注冊碼</title>
<style type="text/css">
?body{ font-size:14px; font-family:"微軟雅黑"; color:#666666; text-align:center;}
</style>
<meta http-equiv="Content-Type" content="text/html; charset=<?php echo $cfg_soft_lang; ?>" />
</head>
<body>
<table width="300" border="1">
? <tr>
? ? <td>郵箱注冊碼</td>
? ? <td>郵箱</td>
? </tr>
? ?<?php foreach($tests as $ts){?>
? ?
? <tr>
? ? <td><em style="color:#FF0000;"><?php echo $ts['num']; ?></em></td>
?<td><?php echo $ts['email']; ?></td>
? </tr>
? <?php } ?>
</table>
</body>
</html>
?
8、我們的注冊頁面需要增加代碼如下:
?找到:
<li><span>電子郵箱注冊碼:</span>
? ? ? ? ? <input type="text" name="yznum" id="yznum" class="intxt w200" style="width: 80px;" /> <i class="red">*</i> <em id="_yznum">請點擊發送郵件獲取注冊碼</em> <input ?value="發送郵件" type="button" ?onClick="sendsms();"/>?
在之后追加如下:
<i class="red">*</i> <a href="serialnumber.htm" target="_blank">收不到注冊碼?請點這里</a>
9、效果如下:

轉載請注明:谷谷點程序 » DEDECMS防惡意注冊增加郵箱注冊碼

体彩25选5开奖号码