需求:
我们在很多网站注册会员的时候,可以使用自己的邮箱注册,注册完成之后,会给你的注册邮箱发送一个邮件,邮件内容会包含一个链接,点击 激活下,这个账号就算注册完成了。我们就是实现一个类似功能。
实现逻辑:
首先需要一个数据库,用来存注册成功的账号密码:
CREATE TABLE if not exists member
(
id mediumint unsigned not null auto_increment,
email varchar(60) not null comment '邮箱',
password char(32) not null comment '密码',
addtime int unsigned not null comment '创建时间',
email_code char(32) not null default '' comment '激活验证码,如果为空,说明已经激活',
primary key(id)
)engine=MyISAM default charset=utf8 comment '会员注册';
这里包含5个字段,主要说一下的就是email_code 字段,当注册成功的时候,会给email_code 字段赋一个唯一码,当邮箱激活后,会把这个唯一码 清除,email_code字段修改为空,这样就可以根据email_code 是不是空 来判断 当前用户, 有没有激活。
代码实现:
关于html和jquery的代码太长了,这里就不贴出来了,html主要就是输入账号,密码,确认密码的几个框,jquery就是包括,判断邮箱格式是不是正确,发个ajax判断邮箱账号是不是已经存在,密码和确认密码是不是一致。 html页面 信息填写完成后,点击提交 进入 member.php 代码如下:
<?php
//获取表单中的值
$email = $_POST['email'];
$password = $_POST['password'];
//获取当前时间
$addtime = time();
//唯一码
$email_code = md5(uniqid());
$db = mysqli_connect('localhost','root','123','test');
$query = "insert into member(email,password,addtime,email_code)values('$email','password','$addtime','$email_code')";
$result = mysqli_query($db,$query);
if($result){
//发送邮件
$content =<<<HTML
<p>欢迎您成为本站会员,请点击以下链接地址完成email验证。</p>
<p><a href="http://localhost/emailChek.php?email_code=$email_code">点击完成验证</a></p>
HTML;
sendMail($email,"会员注册验证",$content);
echo '注册成功,请到注册邮箱激活';
}else{
echo '注册失败';
}
//发送邮件函数
function sendMail($to,$title,$content)
{
require_once('./PHPMailer_v5.1/class.phpmailer.php');
require_once('./config.php');
$mail = new PHPMailer();
// 设置为要发邮件
$mail->IsSMTP();
// 是否允许发送HTML代码做为邮件的内容
$mail->IsHTML(TRUE);
// 是否需要身份验证
$mail->SMTPAuth=TRUE;
$mail->CharSet='UTF-8';
/* 邮件服务器上的账号是什么 */
$mail->From=MAIL_ADDRESS;
$mail->FromName=MAIL_FROM;
$mail->Host=MAIL_SMTP;
$mail->Username=MAIL_LOGINNAME;
$mail->Password=MAIL_PASSWORD;
// 发邮件端口号默认25
$mail->Port = 25;
// 收件人
$mail->AddAddress($to);
// 邮件标题
$mail->Subject=$title;
// 邮件内容
$mail->Body=$content;
return($mail->Send());
}
?>
config.php是设置的关于邮箱账号密码的一些宏, 发送邮件用的是PHPMailer_v5.1库,注册成功的时候,发送内容会包含一个链接 ,链接到emailChek.php同时会以get形式将email_code传过去。
emailChek.php的代码
<?php
$email_code = $_GET['email_code'];
$db = mysqli_connect('localhost','root','123','test');
$query = "select id from member where email_code = '$email_code'";
$result = mysqli_query($db,$query);
if($result){
$query = "update member set email_code = '' where email_code = '$email_code'";
if ( mysqli_query($db,$query) )
echo "激活成功";
else
echo "激活失败";
}else{
echo "激活失败";
}
?>
这样就实现了,基本的所需功能了。