Bagaimana untuk menambah fungsi pengesahan e-mel semasa menulis sistem pendaftaran log masuk dalam PHP?

WBOY
Lepaskan: 2023-08-18 10:24:01
asal
1221 orang telah melayarinya

Bagaimana untuk menambah fungsi pengesahan e-mel semasa menulis sistem pendaftaran log masuk dalam PHP?

Bagaimana untuk menambah fungsi pengesahan e-mel semasa menulis sistem pendaftaran log masuk dalam PHP?

Dengan perkembangan Internet, fungsi log masuk dan pendaftaran telah menjadi ciri penting mana-mana tapak web atau aplikasi. Untuk memastikan keselamatan dan kesahihan maklumat pengguna, menambah fungsi pengesahan e-mel boleh meningkatkan pengalaman pengguna dan keselamatan sistem dengan berkesan. Dalam artikel ini, kami akan memperkenalkan cara menggunakan PHP untuk menulis sistem pendaftaran log masuk dan menambah fungsi pengesahan e-mel.

  1. Buat pangkalan data dan jadual berkaitan

Pertama, kita perlu mencipta pangkalan data dan dua jadual berkaitan, satu untuk menyimpan maklumat pengguna dan satu lagi untuk menyimpan kod pengesahan sementara dan status pengesahan untuk pengesahan e-mel.

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
);
Salin selepas log masuk
  1. Tulis halaman pendaftaran

Di halaman pendaftaran, kami perlu mengumpulkan nama pengguna, e-mel dan kata laluan yang diberikan oleh pengguna, dan menghantar e-mel pengesahan ke alamat e-mel yang diberikan oleh pengguna.

<?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>
Salin selepas log masuk
  1. Tulis halaman pengesahan e-mel

Selepas pengguna mengklik pautan dalam e-mel pengesahan, adalah perlu untuk mengesahkan kesahihan kod pengesahan e-mel dan mengemas kini status pengesahan pengguna.

<?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>
Salin selepas log masuk

Melalui langkah di atas, kami berjaya mencipta sistem pendaftaran log masuk asas dan menambah fungsi pengesahan e-mel. Selepas pengguna mendaftar, sistem akan menghantar e-mel pengesahan secara automatik ke alamat e-mel yang diberikan oleh pengguna Pengguna perlu mengklik pada pautan untuk melengkapkan pengesahan e-mel Hanya selepas pengesahan berjaya mereka boleh log masuk ke sistem. Ini memberikan pendaftaran pengguna dan pengalaman log masuk yang lebih selamat ke tapak web atau aplikasi kami.

Walau bagaimanapun, sila pastikan fungsi penghantaran e-mel tapak web atau aplikasi anda dikonfigurasikan dengan betul, dan gantikan maklumat konfigurasi yang berkaitan dengan bahagian yang sepadan dalam contoh kod.

Semoga kandungan di atas dapat membantu anda!

Atas ialah kandungan terperinci Bagaimana untuk menambah fungsi pengesahan e-mel semasa menulis sistem pendaftaran log masuk dalam PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!