У меня был неэффективный кусок кода для сброса паролей, когда пользователь вводил либо свое имя пользователя, либо свой адрес электронной почты. 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 кажется пустой.