Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Авторизация или проблемы с куками

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Описание: Помогите выявить ошибку, я себе уже всю голову сломал.
Felliks
Отправлено: 29 Января, 2010 - 14:35:11
Post Id


Новичок


Покинул форум
Сообщений всего: 16
Дата рег-ции: Янв. 2010  


Помог: 0 раз(а)




Народ, помагите))) я себе уже всю голову сломал)))

В этом коде мы получаем переменные $_POST["login"] и $_POST["pass"], фильтруем их и проверяем есть ли в БД поле с записью $login, дальше проверяем $pass и если все совпадает создаем куки и перенаправляем пользователя.

Вот код:

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. define("IN_FCMS", 1);
  4.  
  5. include("../inc/system.php");
  6.  
  7.  $login = htmlspecialchars($_POST["login"]);
  8.  $pass = htmlspecialchars($_POST["pass"]);
  9.  
  10.  $sql = mysql_query("SELECT * FROM 'users' WHERE 'login' = '".$login."' LIMIT 1");
  11.  
  12.  if (mysql_num_rows($sql) == 0) {
  13.   echo "Ошибка логина";
  14.   exit; }
  15.  
  16.  $user = mysql_fetch_array($sql);
  17.  
  18.  if (md5($pass) != $user["password"]) {
  19.   echo "Ошибка пароля";
  20.   exit; }
  21.  
  22.  $cid = base64_encode($user["id"]);
  23.  $cps = base64_encode($pass);
  24.  
  25.  SetCookie("cid", $cid, time()+3600);
  26.  SetCookie("cps", $cps, time()+3600);
  27.  
  28.  header(Location: htt://w1p.in);
  29.  
  30. ?>



Мне выдает абсолютно пустую страницу, я уже не знаю что делать Недовольство, огорчение )))
(Добавление)
Вот код формы:

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. define ("IN_FCMS", 1);
  4. $title = "Авторизация";
  5.  
  6. include ("../inc/system.php");
  7. include ("../inc/head.php");
  8.  
  9. echo "<div class='header'>Авторизация</div>";
  10.  
  11. echo "<form action='login.php' method='post'>
  12. <b>Логин:</b><input type='text' name='login' maxlength='15'><b>Пароль:</b><input type='password' name='pass' maxlength='32'><input type='submit' name='submit' value='Вход'>";
  13.  
  14. include "../inc/foot.php";
  15.  
  16. ?>


Отредактировано модератором: Champion, 29 Января, 2010 - 15:10:20
Используй кнопочку [PHP], а то мы будем возмущаться
 
 Top
RomAndry Администратор
Отправлено: 29 Января, 2010 - 14:41:59
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 913
Дата рег-ции: Янв. 2008  


Помог: 6 раз(а)




</form> Забыли =)
 
My status
 Top
Felliks
Отправлено: 29 Января, 2010 - 14:50:58
Post Id


Новичок


Покинул форум
Сообщений всего: 16
Дата рег-ции: Янв. 2010  


Помог: 0 раз(а)




Спс, но все равно когда жму кнопу "Вход", кидает на страницу login.php и ничего не выдает, просто белый экран.
 
 Top
Champion Супермодератор
Отправлено: 29 Января, 2010 - 15:11:57
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




http://phpfaq[dot]ru/debug - познавай искусство отладки. Конкретно этого вопроса там нет, но ты поймешь как локализовать ошибку.
 
 Top
Мелкий Супермодератор
Отправлено: 29 Января, 2010 - 15:16:53
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




А я вижу ошибку для SQL инъекции:
htmlspecialchars в режиме по-умолчанию не преобразует одинарные кавычки. Т.е. в поле логина можно дописать чего-нибудь нехорошего.

А по теме вопроса:
почему аргумент header'a передаётся без кавычек? И вообще этот кусок кода выполняется?


-----
PostgreSQL DBA
 
 Top
JustUserR
Отправлено: 29 Января, 2010 - 15:31:59
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Felliks Ну ошибку же видно сразу - для именования полей в Mysql используются не прямые одиночные кавычки ' а обратные ` (Или вообще не используются если имя состоит только из латинский букв и цифр)
Так что код хотя бы вот такой сделайте$sql = mysql_query("SELECT * FROM `users` WHERE `login` = '".$login."' LIMIT 1");


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Felliks
Отправлено: 29 Января, 2010 - 15:39:45
Post Id


Новичок


Покинул форум
Сообщений всего: 16
Дата рег-ции: Янв. 2010  


Помог: 0 раз(а)




Спасибо, header() поправил, насчет htmlspecialchars() я сначала рабочий код пишу а после защиту ставлю. А насчет выполнения кода, хз, вообще никакой ошибки не выдает, просто пустая страница.

(Отредактировано автором: 29 Января, 2010 - 15:47:09)

 
 Top
PeaceDuke
Отправлено: 29 Января, 2010 - 16:37:20
Post Id



Новичок


Покинул форум
Сообщений всего: 19
Дата рег-ции: Янв. 2010  


Помог: 0 раз(а)

[+]


PHP:
скопировать код в буфер обмена
  1.  
  2. $login = htmlspecialchars(trim(mysql_real_escape_string($_POST["login"])));
  3.  
  4. $sql = mysql_fetch_array(mysql_query("SELECT * FROM `users` WHERE `login` = '".$login."' LIMIT 1"));
  5.  
  6. if (!trim($sql)) {
  7.  
  8. echo "Ошибка логина"; exit;
  9.  
  10. }else{
  11.  
  12. if (md5($pass) != $sql["password"]) {  
  13.  
  14. echo "Ошибка пароля";  exit;
  15.  
  16. }
  17.  
  18. $cid = base64_encode($sql["id"]);
  19. $cps = base64_encode($pass);
  20.  
  21. setcookie("cid", $cid, time()+3600);
  22. setcookie("cps", $cps, time()+3600);
  23.  
  24. header("Location: http://site.ru");
  25.  
  26. }
  27.  


А вообще что бы постоянно не использовать такой бред:


Лучше написать функцию!

(Отредактировано автором: 29 Января, 2010 - 16:41:45)



-----
[Coder] and [Designer]
 
 Top
Felliks
Отправлено: 29 Января, 2010 - 16:44:51
Post Id


Новичок


Покинул форум
Сообщений всего: 16
Дата рег-ции: Янв. 2010  


Помог: 0 раз(а)




Спасибо, вечером проверю)))
 
 Top
Felliks
Отправлено: 30 Января, 2010 - 22:03:51
Post Id


Новичок


Покинул форум
Сообщений всего: 16
Дата рег-ции: Янв. 2010  


Помог: 0 раз(а)




Спасибо всем кто помогал, я исправил недостатки и сделал дебаг. Но cookies всеравно не хотят создоваться.

Вот ошибка которая выводится:

Warning: Cannot modify header information - headers already sent by (output started at /home/felliks/domains/w1p.in/public_html/auth/login.php:1) in/home/felliks/domains/w1p.in/p ublic_html/auth/login.php on line26

Warning: Cannot modify header information - headers already sent by (output started at /home/felliks/domains/w1p.in/public_html/auth/login.php:1) in/home/felliks/domains/w1p.in/p ublic_html/auth/login.php on line27

Warning: Cannot modify header information - headers already sent by (output started at /home/felliks/domains/w1p.in/public_html/auth/login.php:1) in/home/felliks/domains/w1p.in/p ublic_html/auth/login.php on line 29

--------------

Вот код страницы:

PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3.  
  4. if (!isset($_POST["submit"])) {
  5.  die("Error: restricted access"); }
  6.  
  7. define("IN_FCMS", 1);
  8.  
  9. require_once("../inc/system.php");
  10.  
  11. $login = filter($_POST["login"]);
  12. $pass = filter($_POST["pass"]);
  13.  
  14. $sql = mysql_query("SELECT * FROM `users` WHERE `login`='".$login."' LIMIT 1");
  15.  
  16. if (!trim($sql)) {
  17.  die("Ошибка логина"); }
  18.  
  19. $sql = mysql_fetch_array($sql);
  20.  
  21. if (md5($pass) != $sql["password"]) {
  22.  die("Ошибка пароля"); }
  23.  
  24. $cid = base64_encode($sql["id"]);
  25. $cps = base64_encode($pass);
  26.  
  27. setcookie("cid", $cid, time()+3600*24);
  28. setcookie("cps", $cps, time()+3600*24);
  29.  
  30. header("Location: digest.php");
  31.  
  32. ?>
  33.  


----------

Насколько я понял проблема в заголовках, но я не смог понять где они создаются. Если понадобится, то я могу дать исходники подключаемых файлов.
 
 Top
Мелкий Супермодератор
Отправлено: 30 Января, 2010 - 22:17:02
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Проблема в том, что начали отправлять данные. Даже написано, где:
Цитата:
output started at /home/felliks/domains/w1p.in/public_html/auth/login.php:1


пробелы, символы перевода строки - так же считаются за начало вывода информации


-----
PostgreSQL DBA
 
 Top
Felliks
Отправлено: 30 Января, 2010 - 22:39:22
Post Id


Новичок


Покинул форум
Сообщений всего: 16
Дата рег-ции: Янв. 2010  


Помог: 0 раз(а)




И как мне это исправить? Удалить все пробелы и символы перевода?

P.S. я просто впервые с заголовками работаю, смотрел другие примеры, там вроде также и работает норм.
 
 Top
Мелкий Супермодератор
Отправлено: 30 Января, 2010 - 23:48:53
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Да, убрать весь вывод в браузер перед началом скрипта. Например, в приведённом листинге - 1 строка - уже вывод в браузер, необходимо, чтобы первой строкой скрипта было <?php


-----
PostgreSQL DBA
 
 Top
JustUserR
Отправлено: 31 Января, 2010 - 01:34:08
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Felliks пишет:
И как мне это исправить? Удалить все пробелы и символы перевода?
К примеру можно включить буферизацию - а еще лучше использовать JS-редирект и соответствующую обработку cookie на стороне клиента если требуется (По мне это гораздо лучше буферизации в случае когда PHP-скрипт уже практически невозможно поменять чтобы он ничего не выводил Улыбка


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Felliks
Отправлено: 31 Января, 2010 - 02:10:44
Post Id


Новичок


Покинул форум
Сообщений всего: 16
Дата рег-ции: Янв. 2010  


Помог: 0 раз(а)




JustUserR пишет:

К примеру можно включить буферизацию - а еще лучше использовать JS-редирект и соответствующую обработку cookie на стороне клиента если требуется (По мне это гораздо лучше буферизации в случае когда PHP-скрипт уже практически невозможно поменять чтобы он ничего не выводил :-)


JS не вариант, я пишу под WAP, а там мало браузеров js поддержуют так как надо.

А насчет заголовков разобрался, просто у меня текстовый редактор добавлял сигнатуру в начале кода, вот и получалось что перед тем как откроется <?php стоял знак ?<, тоесть был символ за пределами обработки php. Теперь все ок, но куки всеравно глючат. Когда захожу на Дайджест, меня авторизирует. А когда захожу на индексную, то нет. Завтра с этим разберусь =)
(Добавление)
Мелкий пишет:
Например, в приведённом листинге - 1 строка - уже вывод в браузер, необходимо, чтобы первой строкой скрипта было <?php


Это я когда писал сообщение напутал с bb кодами, со смарта не удобно просто =)
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB