Сценарий сброса пароля срабатывает только наполовину - PullRequest
0 голосов
/ 04 октября 2009

У меня был неэффективный кусок кода для сброса паролей, когда пользователь вводил либо свое имя пользователя, либо свой адрес электронной почты. PHP-скрипт разветвляется в зависимости от используемого идентификатора. Я свернул его в один, который теперь работает, если пользователь вводит свое имя пользователя, но не если он вводит свой адрес электронной почты. Вот характерный код:

$identifier = isset($_POST["username"])?"username":"email";
$ident = isset($_POST["username"])?trim(mysqli_real_escape_string($mysqli,(check_chars_username($_POST["username"])))):trim(mysqli_real_escape_string($mysqli, (check_chars_email($_POST["email"]))));


    //create and issue the query
    $sql = "SELECT * FROM aromaMaster WHERE $identifier = '$ident'";
    $sql_res =mysqli_query($mysqli, $sql) or die(mysqli_error($mysqli));

    if(mysqli_num_rows($sql_res) == 0) {
      //wrong login info
      header("Location: password_reset_form.html/error=$ident");
      exit();
    }
      $info = mysqli_fetch_array($sql_res);
        $userid = $info["id"];
        $username = stripslashes($info["username"]);
        $email = stripslashes($info["email"]);

Я проверил и дважды проверил, что поле формы электронной почты называется электронной почтой, и это так. Это заставило меня почесать голову. Особенно интересным является перенаправление заголовка. Когда я ввожу адрес электронной почты и перенаправлен, переменная $ identifier кажется пустой.

1 Ответ

0 голосов
/ 04 октября 2009

Как вы отметили в своем комментарии, вы должны проверить, чтобы переменная username массива $_POST была пустой.

Также неплохо проверить, находится ли переменная вообще на первом месте, в дополнение к тому, и до того, как вы проверите, чтобы она была пустой.

$identifier = 
 (isset($_POST["username"]) && !empty($_POST["username"])) ? "username":"email";

Когда вы отправляете форму, все поля ввода текста будут проходить, даже если они пустые. Пробел - это не то же самое, что пустой. Вот почему первая часть троичного оператора всегда true в вашем исходном коде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...