Случайные числа генерируются дважды при проверке электронной почты - PullRequest
0 голосов
/ 28 мая 2019

Я новичок в PHP.В настоящее время я проверяю электронную почту.Мой код должен генерировать случайное число, отправлять пользователю по электронной почте и проверять его при входе пользователя.

Вот мой код:

<?php

require 'PHPMailer/PHPMailerAutoload.php';

session_start();

// initializing variables
$email = $_SESSION ['email'];
$user_code = "";
$errors = array();

// generate a four digit random number
$gen_code = strval (rand (10000, 99999));

// send code to user email

// connect to the database
$db = mysqli_connect('localhost', 'root', '', 'register');

// REGISTER USER
if (isset($_POST['email_confirm'])) {

  // receive all input values from the form
  $user_code = mysqli_real_escape_string($db, $_POST['code']);

  // check whether both codes match
  if ($user_code != $gen_code) { array_push($errors, "The codes do not match"); }
  else {
    // set isConfirmed == true
    if (count($errors) == 0) {
        $query = "UPDATE user_database SET isConfirmed = true WHERE email = '$email'";
        mysqli_query($db, $query);
        $_SESSION['email'] = $email;
        header('location: user_details.php');
    }
  }
}
?>

Здесь email_confirm - это имяМоя кнопка отправки и code - это имя текстового поля.

Все отлично работает при первой загрузке страницы.Я получаю письмо со случайным целым числом.

Проблема начинается, когда я нажимаю кнопку подтверждения.Я получил другое письмо с другим номером, и уже введенный номер не совпадает с номером, полученным по электронной почте.

Пожалуйста, помогите

1 Ответ

0 голосов
/ 28 мая 2019

Если это более простое и экспериментальное приложение, вы должны сохранить gen_code в этом сеансе вскоре после его отправки на электронное письмо с подтверждением пользователя. В противном случае сохраните код в базе данных и извлеките его, когда ваше приложение получит запрос подтверждения POST по электронной почте, и сравните код, отправленный пользователем, с сеансом или базой данных, где бы вы ни хранили его.

if (isset($_POST['email_confirm'])) { 
    // receive all input values from the form
    $code = $_SESSION['gen_code']; // in case you would wish to store and retrieve code from db, replace this code with one which retrieved from db by email id... SELECT code from user where email=$email
    $user_code = mysqli_real_escape_string($db, $_POST['code']);
    // check whether both codes match
    if ($user_code != $code) { 
        array_push($errors, "The codes do not match");
    } else {
        if (count($errors) == 0) {
            $query = "UPDATE user_database SET isConfirmed = true WHERE email = '$email'"; 
            mysqli_query($db, $query);
            $_SESSION['email'] = $email;
            header('location: user_details.php');
        }
     }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...