Wie füge ich eine E-Mail-Verifizierungsfunktion hinzu, wenn ich ein Login-Registrierungssystem in PHP schreibe?

WBOY
Freigeben: 2023-08-18 10:24:01
Original
1247 Leute haben es durchsucht

Wie füge ich eine E-Mail-Verifizierungsfunktion hinzu, wenn ich ein Login-Registrierungssystem in PHP schreibe?

Wie füge ich eine E-Mail-Verifizierungsfunktion hinzu, wenn ich ein Login-Registrierungssystem in PHP schreibe?

Mit der Entwicklung des Internets sind Anmelde- und Registrierungsfunktionen zu wesentlichen Merkmalen jeder Website oder Anwendung geworden. Um die Sicherheit und Gültigkeit der Benutzerinformationen zu gewährleisten, kann das Hinzufügen der E-Mail-Verifizierungsfunktion das Benutzererlebnis und die Systemsicherheit effektiv verbessern. In diesem Artikel stellen wir vor, wie Sie mit PHP ein Login-Registrierungssystem schreiben und E-Mail-Verifizierungsfunktionen hinzufügen.

  1. Datenbank und zugehörige Tabellen erstellen

Zuerst müssen wir eine Datenbank und zwei zugehörige Tabellen erstellen, eine zum Speichern von Benutzerinformationen und die andere zum Speichern temporärer Verifizierungscodes und des Verifizierungsstatus für die E-Mail-Verifizierung.

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
);
Nach dem Login kopieren
  1. Registrierungsseite schreiben

Auf der Registrierungsseite müssen wir den vom Benutzer angegebenen Benutzernamen, die E-Mail-Adresse und das Passwort erfassen und eine Bestätigungs-E-Mail an die vom Benutzer angegebene E-Mail-Adresse senden.

<?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>
Nach dem Login kopieren
  1. Schreiben Sie eine E-Mail-Bestätigungsseite

Nachdem der Benutzer auf den Link in der Bestätigungs-E-Mail geklickt hat, muss die Gültigkeit des E-Mail-Bestätigungscodes überprüft und der Bestätigungsstatus des Benutzers aktualisiert werden.

<?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>
Nach dem Login kopieren

Durch die oben genannten Schritte haben wir erfolgreich ein grundlegendes Login-Registrierungssystem erstellt und die E-Mail-Verifizierungsfunktion hinzugefügt. Nachdem sich der Benutzer registriert hat, sendet das System automatisch eine Bestätigungs-E-Mail an die vom Benutzer angegebene E-Mail-Adresse. Der Benutzer muss auf den Link klicken, um die E-Mail-Verifizierung abzuschließen. Erst nach erfolgreicher Überprüfung kann er sich beim System anmelden. Dies sorgt für eine sicherere Benutzerregistrierung und Anmeldung auf unserer Website oder Anwendung.

Bitte stellen Sie jedoch sicher, dass die E-Mail-Versandfunktion Ihrer Website oder Anwendung korrekt konfiguriert ist, und ersetzen Sie die relevanten Konfigurationsinformationen durch die entsprechenden Teile im Codebeispiel.

Ich hoffe, der obige Inhalt kann Ihnen helfen!

Das obige ist der detaillierte Inhalt vonWie füge ich eine E-Mail-Verifizierungsfunktion hinzu, wenn ich ein Login-Registrierungssystem in PHP schreibe?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage