Rumah > Artikel > pembangunan bahagian belakang > 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.
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 );
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>
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>
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!