电子邮件和数据库有不同的验证码

时间:2017-12-16 15:22:39

标签: php mysql

 // Check input errors before inserting in database
    if(empty($username_err) && empty($password_err) && empty($confirm_password_err) && empty($mobile_err)){
        $ran_code=mt_rand(100000, 999999);
        // Prepare an insert statement
        $sql = "INSERT INTO users (username, password, email, mobile, code) VALUES (:username, :password, :email, :mobile, :code)";

        if($stmt = $dbh->prepare($sql)){
            // Bind variables to the prepared statement as parameters
            $stmt->bindParam(':username', $param_username, PDO::PARAM_STR);
            $stmt->bindParam(':password', $param_password, PDO::PARAM_STR);
            $stmt->bindParam(':email', $param_email, PDO::PARAM_STR);
            $stmt->bindParam(':mobile', $param_mobile, PDO::PARAM_STR);
            $stmt->bindParam(':code', $code);
            // Set parameters
            $param_username = $username;
            $param_password = password_hash($password, PASSWORD_DEFAULT); // Creates a password hash
            $param_email = $email;
            $param_mobile = $mobile;
            $code = $ran_code;

            // Attempt to execute the prepared statement
            if($stmt->execute()){
              $_SESSION['username']=$email;
                // Send registration confirmation link (verify.php)
              $_SESSION['to']      = $email;
              $_SESSION['subject']  = 'Account Verification ( paper.com )';
              $_SESSION['body'] = '
              Hello '.$username.',

              Thank you for signing up!

              Your verification code is'.$ran_code.'.'; 


              require '../Mailer/hotmail.php';

                header("location:confirmation.php?email=".$email);


            } else{
                echo "Something went wrong. Please try again later.";
            }
        }

        // Close statement
        unset($stmt);
    }

    // Close connection
    unset($dbh);}

成功注册后,确认代码将发送到电子邮件并存储在数据库中。我在电子邮件中得到一组6个代码,在database.i中完全不同的5位数代码。我已经尝试了10多次,结果是一样的。每次我在电子邮件中获得新密钥,在数据库中密钥是相同的,即32767。 我正在做的是在注册后我检查我的电子邮件并检查数据库,代码不同然后我删除行并继续使用相同的电子邮件地址重新注册。我不认为这是问题,只是为了让你们知道。

1 个答案:

答案 0 :(得分:0)

因为,你在两种情况下都传递了不同的值

你有随机数

 $ran_code=mt_rand(100000, 999999);

但是,你正在向数据库保存其他内容

 $stmt->bindParam(':code', $code);

在上面的代码之后,你有以下代码行,假设在上面(请注意,在使用$ran_code的电子邮件中,它具有正确的值)

 $code = $ran_code;

而且,这就是您在电子邮件和数据库中获得不同价值的原因。要纠正您的问题,您需要在

之后移到上面的代码行
$ran_code=mt_rand(100000, 999999);
$code = $ran_code; // move here