HTMLphp
<p><strong>输入您注册的电子邮箱,找回密码:</strong></p> <p><input type="text" class="input" name="email" id="email"><span id="chkmsg"></span></p> <p><input type="button" class="btn" id="sub_btn" value="提 交"></p>
jQuerycss
当用户输入完邮箱并点击提交后,jQuery先验证邮箱格式是否正确,若是正确则经过向后台sendmail.php发送Ajax请求,sendmail.php负责验证邮箱是否存在和发送邮件,并会返回相应的处理结果给前台页面,请看jQuery代码:html
$(function(){ $("#sub_btn").click(function(){ var email = $("#email").val(); var preg = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/; //匹配Email if(email=='' || !preg.test(email)){ $("#chkmsg").html("请填写正确的邮箱!"); }else{ $("#sub_btn").attr("disabled","disabled").val('提交中..').css("cursor","default"); $.post("sendmail.php",{mail:email},function(msg){ if(msg=="noreg"){ $("#chkmsg").html("该邮箱还没有注册!"); $("#sub_btn").removeAttr("disabled").val('提 交').css("cursor","pointer"); }else{ $(".demo").html("<h3>"+msg+"</h3>"); } }); } }); })
PHPmysql
sendmail.php须要验证Email是否存在系统用户表中,若是有,则读取用户信息,将用户id、用户名和密码惊醒md5加密生成一个特别的字符串做为找回密码的验证码,而后构造URL。同时咱们为了控制URL连接的时效性,将记录用户提交找回密码动做的操做时间,最后调用邮件发送类发送邮件到用户邮箱,发送邮件类smtp.class.phpjquery
include_once("connect.php"); $email = injectChk(stripslashes(trim($_POST['mail']))); $sql = "select id,username,password from `t_user` where `email`='$email'"; $query = mysql_query($sql); $num = mysql_num_rows($query); if ($num == 0) {//该邮箱还没有注册! echo 'noreg'; exit; } else { $row = mysql_fetch_array($query); $getpasstime = time(); $uid = $row['id']; $token = md5($uid . $row['username'] . $row['password']); $url = "http://www.erdangjiade.com/jquery/3/326/demo/reset.php?email=" . $email . "&token=" . $token; $time = date('Y-m-d H:i'); $result = sendmail($time, $email, $url); if ($result == 1) {//邮件发送成功 $msg = '系统已向您的邮箱发送了一封邮件<br/>请登陆到您的邮箱及时重置您的密码!'; //更新数据发送时间 mysql_query("update `t_user` set `getpasstime`='$getpasstime' where id='$uid '"); } else { $msg = $result; } echo $msg; }
相关函数sql
function sendmail($time, $email, $url) { include_once("smtp.class.php"); $smtpserver = "smtp.163.com"; //SMTP服务器 $smtpserverport = 25; //SMTP服务器端口 $smtpusermail = "hjl416148489_4@163.com"; //SMTP服务器的用户邮箱 $smtpuser = "hjl416148489_4@163.com"; //SMTP服务器的用户账号 $smtppass = "hjl7233163"; //SMTP服务器的用户密码 $smtp = new Smtp($smtpserver, $smtpserverport, true, $smtpuser, $smtppass); //这里面的一个true是表示使用身份验证,不然不使用身份验证. $emailtype = "HTML"; //信件类型,文本:text;网页:HTML $smtpemailto = $email; $smtpemailfrom = $smtpusermail; $emailsubject = "素材火erdangjiade.com - 找回密码"; $emailbody = "亲爱的" . $email . ":<br/>您在" . $time . "提交了找回密码请求。请点击下面的连接重置密码(按钮24小时内有效)。<br/><a href='" . $url . "' target='_blank'>" . $url . "</a><br/>若是以上连接没法点击,请将它复制到你的浏览器地址栏中进入访问。<br/>若是您没有提交找回密码请求,请忽略此邮件。"; $rs = $smtp->sendmail($smtpemailto, $smtpemailfrom, $emailsubject, $emailbody, $emailtype); return $rs; } function injectChk($sql_str) { //防止注入 $check = eregi('select|insert|update|delete|\'|\/\*|\*|\.\.\/|\.\/|union|into|load_file|outfile', $sql_str); if ($check) { echo('非法字符串'); exit(); } else { return $sql_str; } }
reset.php重置密码浏览器
include_once("connect.php"); $token = stripslashes(trim($_GET['token'])); $email = stripslashes(trim($_GET['email'])); $sql = "select * from `t_user` where email='$email'"; $query = mysql_query($sql); $row = mysql_fetch_array($query); if($row){ $mt = md5($row['id'].$row['username'].$row['password']); if($mt==$token){ if(time()-$row['getpasstime']>24*60*60){ $msg = '该连接已过时!'; }else{ //重置密码... $msg = '请从新设置密码,显示重置密码表单,<br/>这里只是演示,略过。'; } }else{ $msg = '无效的连接<br/>'.$mt.'<br/>'.$token; } }else{ $msg = '错误的连接!'; } echo $msg;