Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: не заноситсятся данные в константу
 
 автор: Slo_Nik   (07.04.2009 в 14:23)   письмо автору
 
 

<?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) > 0define("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 в 17:21)   письмо автору
 
   для: Slo_Nik   (07.04.2009 в 14:23)
 

совесем достал этот скрипт, ни чего не могу придумать как выловить ошибку.
ПОДСКАЖИТЕ КТО НИБУДЬ, ПОЖАЛУЙСТА.

  Ответить  
 
 автор: skor   (07.04.2009 в 17:34)   письмо автору
 
   для: 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. авторизация жесть ) я бы такую не стал использовать )

  Ответить  
 
 автор: Slo_Nik   (07.04.2009 в 19:19)   письмо автору
 
   для: skor   (07.04.2009 в 17:34)
 

я понимаю какая строка выдаёт сообщение "нет константы".
но этот же скрипт работает с другим приложением, в запросе меняю только имя таблицы, имена переменных логин и пароль, ну и файл подключения к базе другой.
стоит прописать в запросе указанную выше таблицу - работать отказывается.
проверил всё что можно, создал похожий скрипт на получение данных из таблицы - всё работает....
а где искать дальше не пойму :(

  Ответить  
 
 автор: Trianon   (07.04.2009 в 19:39)   письмо автору
 
   для: Slo_Nik   (07.04.2009 в 19:19)
 

при чем тут другое приложение?
У Вас в этом приложении mysql_query() возвращает признак ошибки.
Вы в этом приложении не вызываете mysql_error(), и не видите, что происходит.

и кстати на больше / меньше сравнивать результат mysql_query() я бы поостерегся.

  Ответить  
 
 автор: Slo_Nik   (07.04.2009 в 20:22)   письмо автору
 
   для: Trianon   (07.04.2009 в 19:39)
 

не сочтите за труд, ткните носом где надо поставить вызов mysql_error() что бы я увидел ошибку.
просто запарился и не могу сообразить

  Ответить  
 
 автор: Trianon   (07.04.2009 в 20:34)   письмо автору
 
   для: Slo_Nik   (07.04.2009 в 20:22)
 

Прошу извинить. Погорячился.
Все необходимые проверки есть.

Просто у Вас сообщения перепутаны.
Вместо ошибка авторизации должно быть Ошибка доступа к БД

А вместо нет константы должно быть как раз таки Ошибка авторизации
Ну или нет такого пользователя

  Ответить  
 
 автор: Slo_Nik   (07.04.2009 в 20:44)   письмо автору
 
   для: Trianon   (07.04.2009 в 20:34)
 

в данном случае я думаю не важно как назвать ошибку, главное что бы был вывод mysql_error(), а его как раз и нет.
получается, что я получаю сообщение об ошибке, но саму ошибку я не вижу, поэтому и не могу её устранить.
вот и обратился за помощью, как ещё можно увидеть ошибку?

  Ответить  
 
 автор: Trianon   (07.04.2009 в 21:04)   письмо автору
 
   для: Slo_Nik   (07.04.2009 в 20:44)
 

Так не ошибка это .
Вам запрос вернул успешный результат из одной строки и одного поля.
И в поле этом - нуль.
В смысле число строк в таблице с указанным логином и хешем пароля равно нулю.
Это, собственно и означает, что набранный логин/пароль - неверный.
И конечно, никакой mysql_error() в той ветви вызывать не нужно.

  Ответить  
 
 автор: Slo_Nik   (07.04.2009 в 22:31)   письмо автору
 
   для: Trianon   (07.04.2009 в 21:04)
 

тогда вообще ни чего понять не могу.
в таблице и так один единственный логин/пароль....
может ли кодировка влиять на запрос?
в другом файле я обращаюсь к той же таблице и всё проходит нормально, правда использую функцию mysql_fetch_array().

  Ответить  
 
 автор: Trianon   (07.04.2009 в 22:42)   письмо автору
 
   для: Slo_Nik   (07.04.2009 в 22:31)
 

нужно вывести текст запроса на экран , скопировать его в буфер и попытаться исполнить в phpMyAdmin или другом достоверно рабочем клиенте. И поглядеть на результат.
Кодировка может влиять если в логине есть русские буквы (точнее, знаки не попадающие в набор latin-0 ) .
Может также влиять наличие обратных слэшей и кавычек в логине / пароле.
Потому как четкого отделения экранирования от magic quotes в тексте скрипта не видно.

  Ответить  
 
 автор: Slo_Nik   (07.04.2009 в 23:10)   письмо автору
 
   для: 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 убрал, что бы сократить сообщение

  Ответить  
 
 автор: Trianon   (07.04.2009 в 23:17)   письмо автору
 
   для: Slo_Nik   (07.04.2009 в 23:10)
 

неправильно поняли.
Нужно было вставить строку echo $query;
И запрос брать не абы какой, а выведенный скриптом.

  Ответить  
 
 автор: Slo_Nik   (07.04.2009 в 23:32)   письмо автору
 
   для: 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 сек)
посмотрел внимательно на сам хеш, что то сильно подозрительный он :)
поковыряю ещё, потом отпишу

  Ответить  
 
 автор: Trianon   (07.04.2009 в 23:56)   письмо автору
 
   для: Slo_Nik   (07.04.2009 в 23:32)
 

Значит правильно говорит, что нет такого пользователя ( с логином first и паролем 2222 )
Что и требовалось доказать.

  Ответить  
 
 автор: Slo_Nik   (08.04.2009 в 00:24)   письмо автору
 
   для: Trianon   (07.04.2009 в 23:56)
 

а он есть.... т.е. в базе такая запись есть.
но тут другая проблема в другом скрипте, решу её и решится эта трабла.
даже не думал на какой то другой скрипт.
спасибо за подсказку, заставили внимательно посмотреть на хеши паролей, а они все одинаковые :):):):):):)
при регистрации какая то фигня творится, полез проверять.

  Ответить  
 
 автор: mihdan   (07.04.2009 в 18:46)   письмо автору
 
   для: Slo_Nik   (07.04.2009 в 14:23)
 

С такой обработкой входящих данных вас ломанет любой "пацанчик", что "бодрячком"

  Ответить  
 
 автор: Slo_Nik   (07.04.2009 в 19:15)   письмо автору
 
   для: mihdan   (07.04.2009 в 18:46)
 

обработку данных я убрал, что бы не растягивать сообщение, выложил только необходимое.
ну а пример взят из "Головоломки на PHP для хакера" не безизвестных авторов.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования