I7uoHep
@I7uoHep

Восстановление пароля на php, как исправить?

Привет, делаю восстанавливалку пароля для сайта.
Но при попытке отправить запрос выдает ошибку
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in /restore.php on line 9

Вот сам код:
<?php
include_once("../../include/dbconnect.php");
$email = $_POST['email'];
$title = "Password Restoring";
if (empty($email)){
    echo "Enter Email";
} else {
    $restoreCheck = mysql_query("SELECT * FROM p286168_reserv.`people` WHERE `mail` = '$email'", $connect) || die(mysql_error());
    $restoreArray = mysql_fetch_array($restoreCheck) || die(mysql_error());
    if (empty($restoreArray)) {
        echo "You are not registred";
    } elseif (mysql_num_rows($restoreCheck) > 0) {
        $chars = "qazxswedcvfrtgbnhyujmkiolp1234567890QAZXSWEDCVFRTGBNHYUJMKIOLP";
        $max = 10;
        $size = StrLen($chars)-1;
        $password = null;
        
        while($max--) {
            $password.=$chars[rand(0,$size)];
        }
        $hashedPassword = md5($password);
        $message = "Your new password: $password";
        if (mail($email, $title, $message)) {
            mysql_qury("UPDATE `people` SET `password` = '$hashedPassword' WHERE `mail` = '$email'");
            echo "New password sent";
        } else {
            echo "We are unable to send message";
        }
    }
}
?>

Собственно, что с ним не так, где я наломал дров?
  • Вопрос задан
  • 2618 просмотров
Решения вопроса 1
conf
@conf
Ruby developer
Строка №8 должна выглядеть вот так:
// or вместо ||
    $restoreCheck = mysql_query("SELECT * FROM p286168_reserv.`people` WHERE `mail` = '$email'", $connect) or die(mysql_error());

Тогда выйдет сообщение об ошибке mysql, скорее всего проблема с коннектом к базе.
Плюс у вас еще и SQL-инъекция в `mail` = '$email', т.к. $email не фильтруется, а берется напрямую из $_POST.
А вообще, поддержу ребят: mysql-расширение уже удаляют и в PHP 7 его уже не будет. Переписывайте пока есть время на mysqli или pdo.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
thewind
@thewind
php программист, front / backend developer
Если уж вы используете столь устаревшие функции, то очевидно, что ваш запрос содержит ошибку или, что скорее всего, соединение не устанавливается (запрос вроде синтаксически верный). Поэтому mysql_query возвращает FALSE (php.net/manual/ru/function.mysql-query.php)
Ответ написан
Комментировать
eucalipt
@eucalipt
Самоделкин.
Попробуй
mysql_fetch_assoc

И еще, 2015 год на дворе, пора переходить на ООП и MySQLi (советую PDO) ;)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы