Электронная почта и база данных имеют разные коды подтверждения

0
 // 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 кода по электронной почте и совершенно другой 5-значный код в базе данных. Я пробовал это более 10 раз, и результат тот же. Каждый раз, когда я получаю новый ключ в электронной почте, где, как и в базе данных, ключ такой же, как и 32767. а также то, что я делаю, после регистрации я проверяю свою электронную почту и проверяю базу данных, код отличается от того, что я удаляю строку и начинаю подписывать снова с тем же адресом электронной почты. я не думаю, что это проблема, но просто чтобы вы, ребята, знали.

Теги:

1 ответ

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
  • 0
    Вы имеете в виду, что параметр должен быть установлен перед привязкой значений к подготовленному выражению
  • 0
    Вы имеете в виду, что параметр должен быть установлен перед привязкой значений к подготовленному Statement.1st, если ($ stmt = $ dbh-> prepare ($ sql)) {2nd $ code = $ ran_code; 3-й $ stmt-> bindParam (': code', $ code);}
Показать ещё 13 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню