激活电子邮件地址后PHP设置用户密码

时间:2018-01-24 16:13:59

标签: php

我正在尝试实施此流程:

  1. 用户使用电子邮件地址注册
  2. 用户收到带有验证链接的电子邮件
  3. 用户跟随指向要设置密码的页面的链接
  4. 用户设置密码
  5. 这是我到目前为止的代码:

    $email = $_GET['email'];
    $verification_code = $_GET['verification_code'];
    $validation_message = "";
    $self = htmlspecialchars($_SERVER["PHP_SELF"]);
    
    if(isset($_POST['submit'])) {
        if ($_POST['password'] == "") {
            $validation_message = "Please enter a password";
            echo "<form id='verify-email-form' action='$self' method='post'><h1 id='set-password-input' class='h1-splash h1-password'>Choose a password</h1><input type='hidden' name='email' value='$email'><input type='hidden' name='verification_code' value='$verification_code'><input type='password' name='password' class='text-input' placeholder='Password'><button type='submit' name='submit' id='submit-input-splash'>Go!</button></form><p id='validation-message'>$validation_message</p>";
        }
        else {
            echo $_POST['email'];
            echo $_POST['password'];
        }
    }
    else {
        require 'connect.php';
        $sql = "SELECT * FROM users WHERE email='$email' AND verification_code='$verification_code' AND active='0'";
        $result = $con->query($sql);
        if ($result->num_rows > 0) {
            echo "<form id='verify-email-form' action='$self' method='post'><h1 id='set-password-input' class='h1-splash h1-password'>Choose a password</h1><input type='hidden' name='email' value='$email'><input type='password' name='password' class='text-input' placeholder='Password'><button type='submit' name='submit' id='submit-input-splash'>Go!</button></form><p id='validation-message'>$validation_message</p>";
        }
        else {
            echo "Invalid activation code.";
    
        }
    }
    ?>
    

    网址采用以下格式:www.example.com/activate.php?email=name@example.com+verification_code=1234567890

    我正在绊倒用户按下提交而不在密码字段中输入任何内容的可能性。它将页面重新加载到activate.php但没有URL中的变量,因此如果用户输入密码,则无法提交电子邮件地址。

    是否有针对此的解决方法,或者更好的构建方法?

1 个答案:

答案 0 :(得分:0)

您将这些变量作为POST发送并尝试将其作为GET读取:$ _GET ['verification_code'];

只需将表单方法更改为GET或将变量读取为POST。