Comment ajouter une fonction de vérification des e-mails lors de l'écriture du système d'enregistrement de connexion en PHP ?

WBOY
Libérer: 2023-08-18 10:24:01
original
1249 Les gens l'ont consulté

Comment ajouter une fonction de vérification des e-mails lors de lécriture du système denregistrement de connexion en PHP ?

Comment ajouter une fonction de vérification des e-mails lors de l'écriture du système d'enregistrement de connexion en PHP ?

Avec le développement d'Internet, les fonctions de connexion et d'inscription sont devenues des fonctionnalités essentielles de tout site Web ou application. Afin de garantir la sécurité et la validité des informations utilisateur, l'ajout de la fonction de vérification des e-mails peut améliorer efficacement l'expérience utilisateur et la sécurité du système. Dans cet article, nous présenterons comment utiliser PHP pour écrire un système d'enregistrement de connexion et ajouter des fonctions de vérification des e-mails.

  1. Créer une base de données et des tables associées

Tout d'abord, nous devons créer une base de données et deux tables associées, l'une pour stocker les informations utilisateur et l'autre pour stocker les codes de vérification temporaires et le statut de vérification pour la vérification des e-mails.

CREATE DATABASE user_system;

USE user_system;

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL,
    email VARCHAR(100) NOT NULL,
    password VARCHAR(255) NOT NULL,
    is_verified BOOLEAN DEFAULT 0
);

CREATE TABLE email_verification (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL,
    code VARCHAR(255) NOT NULL,
    is_valid BOOLEAN DEFAULT 1
);
Copier après la connexion
  1. Écrivez la page d'inscription

Dans la page d'inscription, nous devons collecter le nom d'utilisateur, l'e-mail et le mot de passe fournis par l'utilisateur, et envoyer un e-mail de vérification à l'adresse e-mail fournie par l'utilisateur.

<?php
session_start();

if (isset($_POST['register'])) {
    $username = $_POST['username'];
    $email = $_POST['email'];
    $password = $_POST['password'];

    // 生成随机的验证码
    $code = bin2hex(random_bytes(16));

    // 将用户信息插入到数据库中
    $query = "INSERT INTO users (username, email, password) VALUES ('$username', '$email', '$password')";
    $result = mysqli_query($connection, $query);

    if ($result) {
        // 将验证码和用户ID插入到邮箱验证表中
        $user_id = mysqli_insert_id($connection);
        $query = "INSERT INTO email_verification (user_id, code) VALUES ('$user_id', '$code')";
        $result = mysqli_query($connection, $query);

        if ($result) {
            // 发送验证邮件
            $to = $email;
            $subject = '用户注册验证';
            $message = "请点击以下链接完成注册验证:
";
            $message .= "http://example.com/activate.php?code=$code";
            $headers = "From: noreply@example.com";

            mail($to, $subject, $message, $headers);

            $_SESSION['success'] = '注册成功,请检查你的邮箱进行验证。';
            header('Location: login.php');
            exit;
        } else {
            $_SESSION['error'] = '注册失败,请稍后重试。';
        }
    } else {
        $_SESSION['error'] = '注册失败,请稍后重试。';
    }
}
?>

<!DOCTYPE html>
<html>

<head>
    <title>用户注册</title>
</head>

<body>
    <h2>用户注册</h2>

    <?php if (isset($_SESSION['error'])): ?>
        <div class="error"><?php echo $_SESSION['error']; ?></div>
    <?php unset($_SESSION['error']); endif; ?>

    <form method="POST">
        <input type="text" name="username" placeholder="用户名" required><br>
        <input type="email" name="email" placeholder="邮箱" required><br>
        <input type="password" name="password" placeholder="密码" required><br>
        <input type="submit" name="register" value="注册">
    </form>
</body>

</html>
Copier après la connexion
  1. Écrivez une page de vérification par e-mail

Après que l'utilisateur ait cliqué sur le lien dans l'e-mail de vérification, il est nécessaire de vérifier la validité du code de vérification de l'e-mail et de mettre à jour le statut de vérification de l'utilisateur.

<?php
session_start();

if (isset($_GET['code'])) {
    $code = $_GET['code'];

    // 查询验证表中是否存在该验证码
    $query = "SELECT * FROM email_verification WHERE code='$code' AND is_valid=1";
    $result = mysqli_query($connection, $query);

    if (mysqli_num_rows($result) > 0) {
        $verification = mysqli_fetch_assoc($result);
        $user_id = $verification['user_id'];

        // 更新用户的验证状态
        $query = "UPDATE users SET is_verified=1 WHERE id=$user_id";
        $result = mysqli_query($connection, $query);

        if ($result) {
            // 更新验证码的有效性
            $query = "UPDATE email_verification SET is_valid=0 WHERE code='$code'";
            $result = mysqli_query($connection, $query);

            $_SESSION['success'] = '邮箱验证成功,你现在可以登录了。';
            header('Location: login.php');
            exit;
        } else {
            $_SESSION['error'] = '邮箱验证失败,请稍后重试。';
        }
    } else {
        $_SESSION['error'] = '无效的验证码。';
    }
}
?>

<!DOCTYPE html>
<html>

<head>
    <title>邮箱验证</title>
</head>

<body>
    <h2>邮箱验证</h2>

    <?php if (isset($_SESSION['error'])): ?>
        <div class="error"><?php echo $_SESSION['error']; ?></div>
    <?php unset($_SESSION['error']); endif; ?>

    <?php if (isset($_SESSION['success'])): ?>
        <div class="success"><?php echo $_SESSION['success']; ?></div>
    <?php unset($_SESSION['success']); endif; ?>
</body>

</html>
Copier après la connexion

Grâce aux étapes ci-dessus, nous avons réussi à créer un système d'enregistrement de connexion de base et à ajouter la fonction de vérification des e-mails. Une fois l'utilisateur inscrit, le système enverra automatiquement un e-mail de vérification à l'adresse e-mail fournie par l'utilisateur. L'utilisateur doit cliquer sur le lien pour terminer la vérification par e-mail. Ce n'est qu'après une vérification réussie qu'il pourra se connecter au système. Cela offre une expérience d’enregistrement et de connexion des utilisateurs plus sécurisée à notre site Web ou à notre application.

Cependant, assurez-vous que la fonction d'envoi d'e-mails de votre site Web ou de votre application est correctement configurée et remplacez les informations de configuration pertinentes par les parties correspondantes dans l'exemple de code.

J'espère que le contenu ci-dessus pourra vous aider !

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal