У меня есть простая структура сброса пароля для пользователей, чтобы обновить свои существующие пароли в случае потери. Пользователь переходит по ссылке, где он вводит свою электронную почту, токен создается и сохраняется в назначенной таблице для пользователя с забытым паролем. Пользователю отправляется электронное письмо со ссылкой, к которой прикреплен токен. Когда пользователь нажимает на эту ссылку, он переходит на страницу для сброса пароля. Если токен, хранящийся в БД, совпадает с токеном в $_GET
, я разрешаю им сбросить пароль. простой.
Проблема в том, что я не могу обновить их конкретную строку в БД. Я пытаюсь идентифицировать их, проверяя их электронную почту, которую они ввели против своей электронной почты в БД. Я могу обновить строку пароля ВСЕХ таблиц, но при указании одного пользователя происходит сбой.
if(isset($_POST['sub_settings'])){
$query = "SELECT * FROM `Password_Reset` WHERE `token` = '".$token."' AND `email` = '".$user_email."'";
$request = mysql_query($query,$connection) or die(mysql_error());
$result = mysql_fetch_array($request);
$token = $result['token'];
$alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcedfghijklmnopqrstuvwxyz1234567890";
$rand = str_shuffle($alpha);
$salt = substr($rand,0,40);
$hashed_password = sha1($salt . $_POST['password']);
$user_email = $result['email'];
if($_GET['token'] == $token) {
header("Location: index.php");
exit;
}else{
if(empty($_POST['Password'])) {
$valid = false;
$error_msgs[] = 'Whoops! You must enter a password.';
}
if($_POST['Password'] != $_POST['passwordConfirm'] || empty($_POST['Password'])) {
$valid = false;
$error_msgs[] = "Your password entries didn't match...was there a typo?";
}
if($valid) {
$query = "UPDATE `Users` SET `encrypted_password` = '$hashed_password' WHERE `Email` = '$user_email'";
mysql_query($query,$connection);
}
}
}
Большое спасибо заранее