Maison > Article > développement back-end > (Avancé) PHP implémente la vérification des e-mails et l'activation du compte après l'enregistrement de l'utilisateur
Lorsque nous enregistrons des membres sur de nombreux sites Web, une fois l'inscription terminée, le système enverra automatiquement un e-mail à la boîte aux lettres de l'utilisateur. Le contenu de cet e-mail est un lien URL. L'utilisateur doit cliquer et ouvrir ce lien pour l'activer. l'inscription sur le compte du site. Les fonctions d’adhésion ne peuvent être utilisées normalement qu’une fois l’activation réussie.
Cet article utilisera des exemples pour expliquer 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 de gestion de l'expiration des liens URL.
Processus commercial
1. L'utilisateur soumet les informations d'inscription.
2. Écrivez dans la base de données Le statut du 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.
Préparer le tableau de données
Le champ E-mail dans le tableau d'informations utilisateur est très important. Il peut être utilisé pour vérifier les utilisateurs, récupérer des mots de passe et même pour les sites Web, il peut être utilisé pour collecter. informations utilisateur pour le marketing par e-mail. , voici la structure du tableau d'informations utilisateur 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
Placez un formulaire d'inscription sur la page et l'utilisateur peut saisir l'inscription. informations, y compris le nom d'utilisateur, le mot de passe et l'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>
Une vérification frontale nécessaire est requise pour la saisie de l'utilisateur Concernant la fonction de vérification de formulaire, il est recommandé de se référer à l'article de ce site : Exemples expliquant l'application du plug-in de vérification de formulaire. Validation. Cet article ignore le code de vérification frontale. De plus, il devrait y avoir une zone de saisie sur la page qui demande à l'utilisateur de ressaisir le mot de passe. Si vous êtes paresseux, vous pouvez l'ignorer.
register.php
Les utilisateurs soumettent les informations d'inscription à register.php pour traitement. register.php doit remplir deux fonctions principales : écrire des données et envoyer des e-mails.
Tout d'abord, il contient les deux fichiers nécessaires, connect.php et smtp.class.php. Ces deux fichiers sont inclus dans le package de téléchargement fourni à l'extérieur.
include_once("connect.php");//连接数据库 include_once("smtp.class.php");//邮件发送类
Ensuite, nous devons filtrer les informations soumises par l'utilisateur et vérifier si le nom d'utilisateur existe (le front-end peut également vérifier).
$username = stripslashes(trim($_POST['username'])); $query = mysql_query("select id from t_user where username='$username'"); $num = mysql_num_rows($query); if($num==1){ echo '用户名已存在,请换个其他的用户名'; exit; }
Ensuite, nous chiffrons le mot de passe de l'utilisateur et construisons le code d'identification d'activation :
$password = md5(trim($_POST['password'])); //加密密码 $email = trim($_POST['email']); //邮箱 $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 ('$username','$password','$email','$token','$token_exptime','$regtime')"; mysql_query($sql);
Dans le code ci-dessus, $token est le code d'identification d'activation construit, qui est composé du nom d'utilisateur, Le mot de passe est composé de l'heure actuelle et crypté avec 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 les détails du code :
if(mysql_insert_id()){ $smtpserver = ""; //SMTP服务器,如:smtp.163.com $smtpserverport = 25; //SMTP服务器端口,一般为25 $smtpusermail = ""; //SMTP服务器的用户邮箱,如xxx@163.com $smtpuser = ""; //SMTP服务器的用户帐号xxx@163.com $smtppass = ""; //SMTP服务器的用户密码 $smtp = new Smtp($smtpserver, $smtpserverport, true, $smtpuser, $smtppass); //实例化邮件类 $emailtype = "HTML"; //信件类型,文本:text;网页:HTML $smtpemailto = $email; //接收邮件方,本例为注册用户的Email $smtpemailfrom = $smtpusermail; //发送邮件方,如xxx@163.com $emailsubject = "用户帐号激活";//邮件标题 //邮件主体内容 $emailbody = "亲爱的".$username.":<br/>感谢您在我站注册了新帐号。<br/>请点击链接激活您的帐号。<br/> <a href='http://www.helloweba.com/demo/register/active.php?verify=".$token."' target= '_blank'>http://www.helloweba.com/demo/register/active.php?verify=".$token."</a><br/> 如果以上链接无法点击,请将它复制到你的浏览器地址栏中进入访问,该链接24小时内有效。"; //发送邮件 $rs = $smtp->sendmail($smtpemailto, $smtpemailfrom, $emailsubject, $emailbody, $emailtype); if($rs==1){ $msg = '恭喜您,注册成功!<br/>请登录到您的邮箱及时激活您的帐号!'; }else{ $msg = $rs; } } echo $msg;
Il existe également une classe d'envoi d'e-mails très simple à utiliser et puissante à partager avec tout le monde : utilisez PHPMailer pour envoyer des e-mails avec des pièces jointes et prendre en charge le contenu HTML. peut l'utiliser directement.
active.php
Si tout va bien, l'email que vous avez renseigné lors de l'enregistrement de votre compte recevra un email de helloweba. A ce moment, vous pouvez directement cliquer sur le lien d'activation et le remettre. passez à la gestion active.php.
active.php接收提交的链接信息,获取参数verify的值,即激活识别码。将它与数据表中的用户信息进行查询对比,如果有相应的数据集,判断是否过期,如果在有效期内则将对应的用户表中字段status设置1,即已激活,这样就完成了激活功能。
include_once("connect.php");//连接数据库 $verify = stripslashes(trim($_GET['verify'])); $nowtime = time(); $query = mysql_query("select id,token_exptime from t_user where status='0' and `token`='$verify'"); $row = mysql_fetch_array($query); if($row){ if($nowtime>$row['token_exptime']){ //24hour $msg = '您的激活有效期已过,请登录您的帐号重新发送激活邮件.'; }else{ mysql_query("update t_user set status=1 where id=".$row['id']); if(mysql_affected_rows($link)!=1) die(0); $msg = '激活成功!'; } }else{ $msg = 'error.'; } echo $msg;
激活成功后,发现token字段并没有用处了,您可以清空。接下来我们会讲解用户找回密码的功能,也要用到邮箱验证,敬请关注。
以上就是(进阶篇)PHP实现用户注册后邮箱验证,激活帐号的内容,更多相关内容请关注PHP中文网(www.php.cn)!