首页 > 解决方案 > 电子邮件激活链接未按预期工作

问题描述

我有一个可以正常工作的注册和登录系统……在某种程度上。用户注册后,将发送一封包含激活码的电子邮件。预期的行为是,单击电子邮件激活链接时,我的数据库中已注册但未经验证的“状态”列将从默认整数值 0 重置为 1。但是,“状态”仅在发送电子邮件时更新,没有用户必须点击激活链接!

我搜索了 Stack Overflow 站点,查看了教程,并在代码上尝试了许多排列,但均未成功。

    if (isset($_GET['email']) AND isset ($_GET['vkey'])){

    if ($stmt = $link->prepare('SELECT email, vkey FROM members WHERE email = ? AND vkey = ?')) {
    $stmt->bind_param('ss', $_GET['email'], $_GET['vkey']);
    $stmt->execute();
    // Store the result so we can check if the account exists in the database.
    $stmt->store_result();
    if ($stmt->num_rows ==1) {


    if ($stmt = $link->prepare('UPDATE members SET status = 1 WHERE email = ? AND vkey = ?')) {
    // Set status to 1
    //$status = 1;
    $stmt->bind_param('ss', $_GET['email'], $_GET['vkey']);
    $stmt->execute();
    echo 'Your account is now activated. You can now login.<br><a href="login.php">Login</a>';
    }
    } else {
        echo 'Your account is already activated or doesn\'t exist!';
    }
}

我希望仅当用户单击电子邮件中的验证链接时才会更新数据库“状态”列,但它会立即更新电子邮件发送。

标签: phpmysql

解决方案


确保您发送电子邮件的 API 没有单击电子邮件内的链接。一些电子邮件提供商会这样做。

您可以通过记录请求并在单击链接之前检查它是否被调用来进行检查。


推荐阅读