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 Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: простейшая
LEONeso
Отправлено: 03 Декабря, 2010 - 11:55:05
Post Id



Посетитель


Покинул форум
Сообщений всего: 499
Дата рег-ции: Янв. 2010  
Откуда: Россия, Москва


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




До сих пор пытаюсь сам что-то сделать, и не выходит, возможно в данном топике, чем либо помогут.

Требуется сделать процесс авторизации юзера сравнить в бд фио и пароль (жизнь сесии 30 мин).

Ковырял другие темы форума и вырвал вот тако кусок кода, чуток подправил под себя, но не доделанный он. Просто не понимаю весь этот процесс создания авторизации.

код: - с формой
PHP:
скопировать код в буфер обмена
  1. function show_form($message){
  2. echo "<form name=\"form\" method=\"POST\" action=\"index.php\" class=\"login\">
  3. <table cellspacing=\"0\" cellpadding=\"0\">
  4. <tbody>
  5. <tr><td colspan=\"2\"><input type=\"text\" name=\"fio\" id=\"fio\" value=\"\" maxlength=\"255\" ></td></tr>
  6. <tr><td colspan=\"2\"><input type=\"text\" name=\"password\" id=\"password\" value=\"\" maxlength=\"40\" ></td></tr>
  7. <tr><td colspan=\"2\"><input type=\"submit\" id=\"submit\" name=\"login\" value=\"войти\"></td></tr></tbody></table></form>";
  8.         die();  }
  9.  
  10.  
  11. if(!isset($_POST['fio']) OR !isset($_POST['password']) OR empty($_POST['fio']) OR empty($_POST['password']))
  12.     {show_form("Не правильная пара логин-пароль.");}
  13.  
  14.     $ciibbob='SECRETSTUFF'.$_SERVER['HTTP_USER_AGENT'].$_SERVER['HTTP_ACCEPT_CHARSET'];
  15.     $_SESSION['ciibbob']=md5($CIIBBOB.session_id());
  16.  
  17.  
  18. $user = mysql_escape_string($_POST['fio']);
  19. $pass = mysql_escape_string($_POST['password']);
  20. $result = mysql_query("SELECT * FROM user WHERE fio='$user' AND password='$pass'",$db);
  21.         // если есть - впускаем
  22.         if(mysql_num_rows($result)==true)
  23.         {
  24.             $_SESSION['id']=mysql_result($result,0);
  25.             $myrow=mysql_fetch_array($result);
  26.             echo $myrow['fio'];
  27.             }
  28.  
  29.         // если нет - пишем так.
  30.         else
  31.         {show_form("Incorrect login-password.");}
  32.  
взят из темы

таблица:
CODE (SQL):
скопировать код в буфер обмена
  1. CREATE TABLE IF NOT EXISTS `user` (
  2.   `id` int(11) NOT NULL AUTO_INCREMENT,
  3.   `fio` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  4.   `password` varchar(40) COLLATE utf8_unicode_ci NOT NULL,
  5.   PRIMARY KEY (`id`)
  6. ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=5 ;
  7.  

(Отредактировано автором: 03 Декабря, 2010 - 12:00:41)



-----
Для некоторых лучший способ написать что-нибудь осмысленное - это сесть _опой на клавиатуру.
 
 Top
LIME
Отправлено: 03 Декабря, 2010 - 12:11:34
Post Id


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


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


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




во первых у тебя die после вывода стоит без условия
тоесть скрипт прерывается всегда после вывода формы
(Добавление)
плин меня отвлекли чушь написал извините ))
 
 Top
DeepVarvar Супермодератор
Отправлено: 03 Декабря, 2010 - 12:15:41
Post Id



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


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


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




LIME die внутри ф-ции стоит - и правильно стоит...
(Добавление)
LEONeso
Запрос исправить на
PHP:
скопировать код в буфер обмена
  1. $result = mysql_query('SELECT * FROM user WHERE fio="$user" AND password="$pass"',$db);

или на
PHP:
скопировать код в буфер обмена
  1. #
  2. $result = mysql_query('SELECT * FROM `user` WHERE `fio` = "'.$user.'" AND `password` = "'.$pass.'"',$db);

и в конце добавить: OR die(mysql_error());
 
 Top
ALEN
Отправлено: 03 Декабря, 2010 - 13:12:42
Post Id



Участник


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


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




LEONeso
ну не мешай html с php пожалуйста, но не приятно даже читать такой код
(Добавление)
LEONeso
И еще пароль кодируй в мд5 и проверяй логин на наличие вредоносных знаков , а то я в поле логи введу нечто похожее на:
admin' or vio!='' or - и буду админом на твоем сайте
 
 Top
LEONeso
Отправлено: 03 Декабря, 2010 - 14:54:26
Post Id



Посетитель


Покинул форум
Сообщений всего: 499
Дата рег-ции: Янв. 2010  
Откуда: Россия, Москва


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




DeepVarvar пишет:
Запрос исправить на

дело в красоте написания? ведь сам запрос не изменился.

ALEN пишет:
ну не мешай html с php пожалуйста, но не приятно даже читать такой код

дурная привычка, нужно переучиваться на html <?php echo 'вписывание';?> html php кода

ALEN пишет:
И еще пароль кодируй в мд5 и проверяй логин на наличие вредоносных знаков , а то я в поле логи введу нечто похожее на:
admin' or vio!='' or - и буду админом на твоем сайте

я о безопасности в данный момент не думаю, дописать пару строк не проблема, проблема в работе авторизации, сам процесс сравнивания двух строк прост, но запоминание юзера, вот в чем проблема, там по сути он просто проверяет наличие и заполненность переменных $_POST и открывает дальнейший код, но больше ничего не делает. Могу списать любые данные в форму и они будут действительны по if-else, но сессии не будет, да и там вроде бы она не создается.... короче у меня не получается все сделать так чтоб работало.

Читал статьи про сессии, ковырял формум по темам авторизации, слизывал код, изменял, кувыркал, без толку. Читал статьи, где столько много написано, а у меня не работает.

Пытаюсь сделать минимум, сверка данных и запоминание юзера (30 минут +- )

(Отредактировано автором: 03 Декабря, 2010 - 14:55:03)



-----
Для некоторых лучший способ написать что-нибудь осмысленное - это сесть _опой на клавиатуру.
 
 Top
DeepVarvar Супермодератор
Отправлено: 03 Декабря, 2010 - 14:57:50
Post Id



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


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


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




LEONeso пишет:
дело в красоте написания?

Дело в разнице обработки разными версиями БД одного и того же запроса, а еще дело в двойных кавычка ИМЕННО в которые заключаются строковые значения отправляемые в запросе к БД.
(Добавление)
CODE (SQL):
скопировать код в буфер обмена
  1. ...WHERE name = 'test'... вызовет ошибку

CODE (SQL):
скопировать код в буфер обмена
  1. ...WHERE name = "test"... отработает как надо
 
 Top
LEONeso
Отправлено: 03 Декабря, 2010 - 16:06:42
Post Id



Посетитель


Покинул форум
Сообщений всего: 499
Дата рег-ции: Янв. 2010  
Откуда: Россия, Москва


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




DeepVarvar пишет:
LEONeso пишет:
дело в красоте написания?

CODE (SQL):
скопировать код в буфер обмена
  1. ...WHERE name = 'test'... вызовет ошибку

CODE (SQL):
скопировать код в буфер обмена
  1. ...WHERE name = "test"... отработает как надо

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


-----
Для некоторых лучший способ написать что-нибудь осмысленное - это сесть _опой на клавиатуру.
 
 Top
OrmaJever
Отправлено: 03 Декабря, 2010 - 16:16:29
Post Id



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


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


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




LEONeso а почему ты решил что авторизация не работает? Если пользователь авторизировался успешно то добавляется только $_SESSION['id']. Попробуй вначале авторизировался а потом на другой странице вывести $_SESSION['id']


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
LEONeso
Отправлено: 03 Декабря, 2010 - 16:45:43
Post Id



Посетитель


Покинул форум
Сообщений всего: 499
Дата рег-ции: Янв. 2010  
Откуда: Россия, Москва


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




OrmaJever пишет:
LEONeso а почему ты решил что авторизация не работает? Если пользователь авторизировался успешно то добавляется только $_SESSION['id']. Попробуй вначале авторизировался а потом на другой странице вывести $_SESSION['id']

$_SESSION['id'] выводится, но при переходе по все той же странице (смена post/get данных) все забывается и опять требует ввод логин и пароль и так до бесконечности, но само по себе не выводит данные из БД, просто выполняет условие на наличие и заполненность текстовых инпутов.
PHP:
скопировать код в буфер обмена
  1. if(!isset($_POST['fio']) OR !isset($_POST['password']) OR empty($_POST['fio']) OR empty($_POST['password']))

(Отредактировано автором: 03 Декабря, 2010 - 16:47:54)



-----
Для некоторых лучший способ написать что-нибудь осмысленное - это сесть _опой на клавиатуру.
 
 Top
OrmaJever
Отправлено: 03 Декабря, 2010 - 17:30:05
Post Id



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


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


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




Ну если авторизцаия успешна то это уже другое дело.
Просто нужно весь кодс 13 по 32 строку написать в else


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
ALEN
Отправлено: 03 Декабря, 2010 - 19:40:14
Post Id



Участник


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


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




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


P.S. Если кому нужно, после завтра выложу универсальный класс для авторизации на сайте (2 методами, правда временно без защиты от перебора)
 
 Top
LEONeso
Отправлено: 03 Декабря, 2010 - 20:22:41
Post Id



Посетитель


Покинул форум
Сообщений всего: 499
Дата рег-ции: Янв. 2010  
Откуда: Россия, Москва


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




ALEN пишет:
LEONeso
Пиши сразу все аккуратно и правильно и тогда все само работает, ты ищешь одну мелочь, а она прячется за всем, что ты не хочешь решать.


P.S. Если кому нужно, после завтра выложу универсальный класс для авторизации на сайте (2 методами, правда временно без защиты от перебора)


Да, есть тут доля правды, долго пытался сделать форму авторизации и запомнить данные, чтобы открыть другие данные (контент), что уже на уровне теории - я уже заранее делаю провал. Обычно я в начале все обдумываю и код сам по себе складывается в голове, остается только написать и отладить, но все это идет от опыта и уровня знаний.

Жду Ваш класс, думаю будет познавательно, ну а если еще и сработает Радость


-----
Для некоторых лучший способ написать что-нибудь осмысленное - это сесть _опой на клавиатуру.
 
 Top
ALEN
Отправлено: 03 Декабря, 2010 - 20:25:06
Post Id



Участник


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


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




LEONeso
Ну класс точно будет работать, но будет на сессиях без куков (так же временно)
 
 Top
LEONeso
Отправлено: 06 Декабря, 2010 - 12:04:30
Post Id



Посетитель


Покинул форум
Сообщений всего: 499
Дата рег-ции: Янв. 2010  
Откуда: Россия, Москва


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




ALEN пишет:
LEONeso
Ну класс точно будет работать, но будет на сессиях без куков (так же временно)

Однако ожидать класс?


-----
Для некоторых лучший способ написать что-нибудь осмысленное - это сесть _опой на клавиатуру.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Напишите за меня, пожалуйста »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB