Где ошибка в скрипте авторизации? Написал легкую сис-му авторизации на ОПП, которая в свою очередь работает на сессиях. Собственно сама функция.function login() { if (!empty($_POST)) {
$login = mysql_real_escape_string(htmlspecialchars($_POST['login'])); //немного профильтруем логин $password = md5($_POST['password']); //хешируем пароль т.к. в базе именно хеш $user = $this->db->query("SELECT * FROM rust_users WHERE login = ? AND password = ?",$login,$password)->assoc();
//header("Location: /"); } else $this->error = 'Неправильный емейл или пароль'; } $this->out('login.php'); } Ошибка: Warning: mysql_num_rows() expects parameter 1 to be resource, null given in Y:\home\oop.ru\www\app\ctrlIndex.php on line 21. Я понимаю, что в mysql_num_rows() ничего не приходит, но не могу разобраться из-за чего.
Ошибка возникает потому, что вы используете неправильное соединение с базой данных в вашем запросе. Вместо использования mysql_num_rows() и mysql_fetch_assoc(), вы должны использовать методы вашего объекта $user, который в данном случае является результатом выполнения запроса к базе данных. Вместо этого используйте методы fetch_assoc() и num_rows() для работы с результатами запроса.
Исправленный код должен выглядеть примерно так:
function login() { if (!empty($_POST)) { $login = mysql_real_escape_string(htmlspecialchars($_POST['login'])); //немного профильтруем логин $password = md5($_POST['password']); //хешируем пароль т.к. в базе именно хеш $user = $this->db->query("SELECT * FROM rust_users WHERE login = ? AND password = ?", $login, $password)->assoc(); if ($user->num_rows() == 1) { $row = $user->fetch_assoc(); $_SESSION['id'] = $row['id']; $_SESSION['login'] = $row['login']; setcookie("CookieMy", $row['id'], time() + 60 * 60 * 24 * 10); //header("Location: /"); } else { $this->error = 'Неправильный емейл или пароль'; } } $this->out('login.php'); }
Помимо этого, убедитесь, что у вас правильно настроено соединение с базой данных в свойстве $db вашего объекта.
Ошибка возникает потому, что вы используете неправильное соединение с базой данных в вашем запросе. Вместо использования mysql_num_rows() и mysql_fetch_assoc(), вы должны использовать методы вашего объекта $user, который в данном случае является результатом выполнения запроса к базе данных. Вместо этого используйте методы fetch_assoc() и num_rows() для работы с результатами запроса.
Исправленный код должен выглядеть примерно так:
function login() {if (!empty($_POST)) {
$login = mysql_real_escape_string(htmlspecialchars($_POST['login'])); //немного профильтруем логин
$password = md5($_POST['password']); //хешируем пароль т.к. в базе именно хеш
$user = $this->db->query("SELECT * FROM rust_users WHERE login = ? AND password = ?", $login, $password)->assoc();
if ($user->num_rows() == 1) {
$row = $user->fetch_assoc();
$_SESSION['id'] = $row['id'];
$_SESSION['login'] = $row['login'];
setcookie("CookieMy", $row['id'], time() + 60 * 60 * 24 * 10);
//header("Location: /");
} else {
$this->error = 'Неправильный емейл или пароль';
}
}
$this->out('login.php');
}
Помимо этого, убедитесь, что у вас правильно настроено соединение с базой данных в свойстве $db вашего объекта.