|
|
|
|
<?php
session_start();
/* устанавливаем соединение с БД */
require_once("config.php");
///////////////////////////////////////////////////////////ОБРАБОТЧИК ФОРМЫ /////////////////////////////////////////////////////////
if(isset($_POST['sub_log'])){
/* делаем запрос к БД, который возвращает кол-во записей, удовлетворяющех паролью и логину */
$query = ("SELECT COUNT(*) FROM `user_list` WHERE `login` = '".$_POST['login']."' AND `password` = '".md5($_POST['password'])."'");
$us_out = mysql_query($query);
if(!$us_out) echo("<p class='info'>Ошибка авторизации</p>").mysql_error();
/* получаем кол-во записей */
if(mysql_result($us_out,0) > 0) define("USER_OUT",1); else echo "нет константы".mysql_error();
}
/* если кол-во записей больше 0, заносим данные о пользователе в сессию */
if (defined("USER_OUT")){
$_SESSION['login'] = $_POST['login'];
$_SESSION['password'] = md5($_POST['password']);
/* и переходим на главную страницу */
echo "<html><head><meta http-equiv='refresh' content='0; url=../user.php'></head></html>";
exit();
}
else echo mysql_error();
}
else echo "нет".mysql_error();
?>
|
далее идёт простой html, форма.
проблема в том, что тупо не работает, хотя в другом приложении, в другой папке, с другой таблицей работает.
проверил всё несколько раз, пути, имена переменных, таблицы и т.д., но при определении константы выдаёт нет константы
ошибок ни каких не выдаёт, выставил уровень ALL.
этот же файл прекрасно работает в другом приложении, меняю только название таблицы и переменных логин и пароль.
может кто то подскажет в чём причина такого поведения файла? | |
|
|
|
|
|
|
|
для: Slo_Nik
(07.04.2009 в 14:23)
| | совесем достал этот скрипт, ни чего не могу придумать как выловить ошибку.
ПОДСКАЖИТЕ КТО НИБУДЬ, ПОЖАЛУЙСТА. | |
|
|
|
|
|
|
|
для: Slo_Nik
(07.04.2009 в 17:21)
| | ну если смотреть по коду, то константа не причем )
сообщение нет константы выдает этот код
if(mysql_result($us_out,0) > 0) define("USER_OUT",1); else echo "нет константы".mysql_error();
|
то есть mysql_result() возвращает 0. То есть надо смотреть сам запрос )
P.S. авторизация жесть ) я бы такую не стал использовать ) | |
|
|
|
|
|
|
|
для: skor
(07.04.2009 в 17:34)
| | я понимаю какая строка выдаёт сообщение "нет константы".
но этот же скрипт работает с другим приложением, в запросе меняю только имя таблицы, имена переменных логин и пароль, ну и файл подключения к базе другой.
стоит прописать в запросе указанную выше таблицу - работать отказывается.
проверил всё что можно, создал похожий скрипт на получение данных из таблицы - всё работает....
а где искать дальше не пойму :( | |
|
|
|
|
|
|
|
для: Slo_Nik
(07.04.2009 в 19:19)
| | при чем тут другое приложение?
У Вас в этом приложении mysql_query() возвращает признак ошибки.
Вы в этом приложении не вызываете mysql_error(), и не видите, что происходит.
и кстати на больше / меньше сравнивать результат mysql_query() я бы поостерегся. | |
|
|
|
|
|
|
|
для: Trianon
(07.04.2009 в 19:39)
| | не сочтите за труд, ткните носом где надо поставить вызов mysql_error() что бы я увидел ошибку.
просто запарился и не могу сообразить | |
|
|
|
|
|
|
|
для: Slo_Nik
(07.04.2009 в 20:22)
| | Прошу извинить. Погорячился.
Все необходимые проверки есть.
Просто у Вас сообщения перепутаны.
Вместо ошибка авторизации должно быть Ошибка доступа к БД
А вместо нет константы должно быть как раз таки Ошибка авторизации
Ну или нет такого пользователя | |
|
|
|
|
|
|
|
для: Trianon
(07.04.2009 в 20:34)
| | в данном случае я думаю не важно как назвать ошибку, главное что бы был вывод mysql_error(), а его как раз и нет.
получается, что я получаю сообщение об ошибке, но саму ошибку я не вижу, поэтому и не могу её устранить.
вот и обратился за помощью, как ещё можно увидеть ошибку? | |
|
|
|
|
|
|
|
для: Slo_Nik
(07.04.2009 в 20:44)
| | Так не ошибка это .
Вам запрос вернул успешный результат из одной строки и одного поля.
И в поле этом - нуль.
В смысле число строк в таблице с указанным логином и хешем пароля равно нулю.
Это, собственно и означает, что набранный логин/пароль - неверный.
И конечно, никакой mysql_error() в той ветви вызывать не нужно. | |
|
|
|
|
|
|
|
для: Trianon
(07.04.2009 в 21:04)
| | тогда вообще ни чего понять не могу.
в таблице и так один единственный логин/пароль....
может ли кодировка влиять на запрос?
в другом файле я обращаюсь к той же таблице и всё проходит нормально, правда использую функцию mysql_fetch_array(). | |
|
|
|
|
|
|
|
для: Slo_Nik
(07.04.2009 в 22:31)
| | нужно вывести текст запроса на экран , скопировать его в буфер и попытаться исполнить в phpMyAdmin или другом достоверно рабочем клиенте. И поглядеть на результат.
Кодировка может влиять если в логине есть русские буквы (точнее, знаки не попадающие в набор latin-0 ) .
Может также влиять наличие обратных слэшей и кавычек в логине / пароле.
Потому как четкого отделения экранирования от magic quotes в тексте скрипта не видно. | |
|
|
|
|
|
|
|
для: Trianon
(07.04.2009 в 22:42)
| | >нужно вывести текст запроса на экран , скопировать его в буфер и попытаться исполнить в phpMyAdmin или другом достоверно рабочем клиенте. И поглядеть на результат.
если правильно понял, то зашёл в phpmyadmin, открыл соответсвующюю базу и на закладке SQL "выполнить SQL запросы..." вот такой запрос сделал "SELECT * FROM `user_list`"б вернуло "Показывает записи 0 - 1 (2 всего, Запрос занял 0.0039 сек)"
>Кодировка может влиять если в логине есть русские буквы (точнее, знаки не попадающие в набор latin-0 ) .
в БД внёс два логина, на русском и англ. ни то ни другой не дали положительного результата.
>Может также влиять наличие обратных слэшей и кавычек в логине / пароле.
>Потому как четкого отделения экранирования от magic quotes в тексте скрипта не видно.
кавычек, слешей, или ещё каких то символов в логине/пароле нет.
а magic_quotes убрал, что бы сократить сообщение | |
|
|
|
|
|
|
|
для: Slo_Nik
(07.04.2009 в 23:10)
| | неправильно поняли.
Нужно было вставить строку echo $query;
И запрос брать не абы какой, а выведенный скриптом. | |
|
|
|
|
|
|
|
для: Trianon
(07.04.2009 в 23:17)
| | echo $query дало
"SELECT COUNT(*) FROM `user_list` WHERE `login` = 'first' AND `password` = '934b535800b1cba8f96a5d72f72f1611'"
выполнил как выше писал, выдало
COUNT(*) 0
второй был
SELECT * FROM `user_list` WHERE `login` = 'first' AND `password` = '934b535800b1cba8f96a5d72f72f1611'
результат тот же
MySQL вернула пустой результат (т.е. ноль рядов). (Запрос занял 0.0040 сек)
посмотрел внимательно на сам хеш, что то сильно подозрительный он :)
поковыряю ещё, потом отпишу | |
|
|
|
|
|
|
|
для: Slo_Nik
(07.04.2009 в 23:32)
| | Значит правильно говорит, что нет такого пользователя ( с логином first и паролем 2222 )
Что и требовалось доказать. | |
|
|
|
|
|
|
|
для: Trianon
(07.04.2009 в 23:56)
| | а он есть.... т.е. в базе такая запись есть.
но тут другая проблема в другом скрипте, решу её и решится эта трабла.
даже не думал на какой то другой скрипт.
спасибо за подсказку, заставили внимательно посмотреть на хеши паролей, а они все одинаковые :):):):):):)
при регистрации какая то фигня творится, полез проверять. | |
|
|
|
|
|
|
|
для: Slo_Nik
(07.04.2009 в 14:23)
| | С такой обработкой входящих данных вас ломанет любой "пацанчик", что "бодрячком" | |
|
|
|
|
|
|
|
для: mihdan
(07.04.2009 в 18:46)
| | обработку данных я убрал, что бы не растягивать сообщение, выложил только необходимое.
ну а пример взят из "Головоломки на PHP для хакера" не безизвестных авторов. | |
|
|
|