Maison >développement back-end >tutoriel php >PHP implémente l'exemple de code de la fonction de courrier électronique d'enregistrement et d'activation des utilisateurs

PHP implémente l'exemple de code de la fonction de courrier électronique d'enregistrement et d'activation des utilisateurs

怪我咯
怪我咯original
2017-06-16 10:52:011841parcourir

Cet article présente principalement la fonction d'activation de l'enregistrement des utilisateurs et de la vérification du courrier électronique implémentée dans PHP, et analyse en détail les compétences opérationnelles liées à la base de données et au courrier électronique impliquées dans l'activation des utilisateurs via le courrier électronique PHP. Les amis dans le besoin peuvent se référer à l'exemple de cet article.

Décrit la fonction d'activation de l'enregistrement des utilisateurs et de l'e-mail de vérification implémentée en PHP. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants :

Ici sera combiné avec des exemples pour présenter comment utiliser PHP+Mysql pour compléter les fonctions d'enregistrement d'un compte, d'envoi d'e-mails d'activation, de vérification des comptes d'activation. et gérer l'expiration du lien URL.

Processus d'activation par e-mail d'inscription

1. Inscription de l'utilisateur
2. Insérez les données utilisateur, le compte n'est pas activé pour le moment.
3. Chiffrez le nom d'utilisateur, le mot de passe ou d'autres caractères d'identification pour former un code d'identification d'activation (vous pouvez également l'appeler code d'activation).
4. Envoyez le code d'identification d'activation construit dans une URL à l'adresse e-mail soumise par l'utilisateur.
5. L'utilisateur se connecte à l'e-mail et clique sur l'URL pour l'activer.
6. Vérifiez le code d'identification d'activation et activez le compte s'il est correct.

t_user.sql

Le champ Email dans le tableau des informations utilisateur est très important. Il peut être utilisé pour authentifier les utilisateurs, récupérer des mots de passe, et même modifier le site Web. Fang Lai peut être utilisé pour collecter des informations sur les utilisateurs pour le marketing par e-mail. Voici la structure de la table d'informations sur les utilisateurs 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;

<.>

HTML

Ce qui suit est un formulaire d'inscription où les utilisateurs peuvent saisir les informations d'inscription, y compris le nom d'utilisateur, le mot de passe et l'adresse e-mail.

<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>

register.php termine l'écriture des données et l'envoi des e-mails

Première connexion à la base de données et incluez la classe d'envoi d'e-mails smtp.class.php

include_once("connect.php");//连接数据库
include_once("smtp.class.php");//邮件发送类

Nous avons omis le formulaire de vérification frontale et regardons directement le programme

$username = stripslashes(trim($_POST[&#39;username&#39;]));
$query = mysql_query("select id from t_user where username=&#39;$username&#39;");
$num = mysql_num_rows($query);
if($num==1){
  echo &#39;用户名已存在,请换个其他的用户名&#39;;
  exit;
}

Ensuite, nous chiffrons le mot de passe de l'utilisateur et construisons le code d'identification d'activation :

$password = md5(trim($_POST[&#39;password&#39;])); //加密密码
$email = trim($_POST[&#39;email&#39;]); //邮箱
$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 (&#39;$username&#39;,&#39;$password&#39;,&#39;$email&#39;,&#39;$token&#39;,&#39;$token_exptime&#39;,&#39;$regtime&#39;)";
mysql_query($sql);

Dans le code ci-dessus, $token est le code d'identification d'activation construit, composé du nom d'utilisateur, du mot de passe et de l'heure actuelle et est crypté par md5. $token_exptime est utilisé pour définir le délai d'expiration de l'URL du lien d'activation. L'utilisateur peut activer le compte dans ce délai. Dans cet exemple, l'activation est valide dans les 24 heures. Enfin, ces champs sont insérés dans la table de données t_user.

Lorsque les données sont insérées avec succès, appelez la classe d'envoi d'e-mails pour envoyer les informations d'activation à la boîte aux lettres enregistrée de l'utilisateur. Faites attention à former le code d'identification d'activation construit en une URL complète comme lien d'activation lorsque l'utilisateur clique. . Voici le code détaillé :

if (mysql_insert_id()) {//写入成功,发邮件
  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 = "用户帐号激活";
  $emailbody = "亲爱的" . $username . ":<br/>感谢您在我站注册了新帐号。<br/>请点击链接激活您的帐号。<br/><a href=&#39;http://www.jb51.net/demo/active.php?verify=" . $token . "&#39; target=&#39;_blank&#39;>http://www.jb51.net/demo/active.php?verify=" . $token . "</a><br/>如果以上链接无法点击,请将它复制到你的浏览器地址栏中进入访问,该链接24小时内有效。<br/>如果此次激活请求非你本人所发,请忽略本邮件。<br/><p style=&#39;text-align:right&#39;>-------- 脚本之家http://www.jb51.net敬上</p>";
  $rs = $smtp->sendmail($smtpemailto, $smtpemailfrom, $emailsubject, $emailbody, $emailtype);
  if ($rs == 1) {
    $msg = &#39;恭喜您,注册成功!<br/>请登录到您的邮箱及时激活您的帐号!&#39;;
  } else {
    $msg = $rs;
  }
  echo $msg;
}

active.php

. active.php reçoit les informations de lien de soumission pour obtenir la valeur du paramètre verify, qui est le code d'identification d'activation. Recherchez-le et comparez-le avec les informations utilisateur dans la table de données. S'il existe un ensemble de données correspondant, déterminez s'il a expiré. S'il est dans la période de validité, définissez le champ d'état dans la table utilisateur correspondante sur 1, ce qui signifie qu'il a expiré. a été activé. Ceci termine la fonction d’activation.

include_once("connect.php");//连接数据库
$verify = stripslashes(trim($_GET[&#39;verify&#39;]));
$nowtime = time();
$query = mysql_query("select id,token_exptime from t_user where status=&#39;0&#39; and
`token`=&#39;$verify&#39;");
$row = mysql_fetch_array($query);
if($row){
  if($nowtime>$row[&#39;token_exptime&#39;]){ //24hour
    $msg = &#39;您的激活有效期已过,请登录您的帐号重新发送激活邮件.&#39;;
  }else{
    mysql_query("update t_user set status=1 where id=".$row[&#39;id&#39;]);
    if(mysql_affected_rows($link)!=1) die(0);
    $msg = &#39;激活成功!&#39;;
  }
}else{
  $msg = &#39;error.&#39;;
}
echo $msg;

Après une activation réussie, vous constatez que le champ du jeton n'est plus utile et vous pouvez l'effacer. Et le statut d'activation du statut passe à 1.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn