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
Форумы портала PHP.SU :: Версия для печати :: Форма и процесс авторизации.
Форумы портала PHP.SU » PHP » Напишите за меня, пожалуйста » Форма и процесс авторизации.

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

1. LEONeso - 03 Декабря, 2010 - 11:55:05 - перейти к сообщению
До сих пор пытаюсь сам что-то сделать, и не выходит, возможно в данном топике, чем либо помогут.

Требуется сделать процесс авторизации юзера сравнить в бд фио и пароль (жизнь сесии 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.  
2. LIME - 03 Декабря, 2010 - 12:11:34 - перейти к сообщению
во первых у тебя die после вывода стоит без условия
тоесть скрипт прерывается всегда после вывода формы
(Добавление)
плин меня отвлекли чушь написал извините ))
3. DeepVarvar - 03 Декабря, 2010 - 12:15:41 - перейти к сообщению
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());
4. ALEN - 03 Декабря, 2010 - 13:12:42 - перейти к сообщению
LEONeso
ну не мешай html с php пожалуйста, но не приятно даже читать такой код
(Добавление)
LEONeso
И еще пароль кодируй в мд5 и проверяй логин на наличие вредоносных знаков , а то я в поле логи введу нечто похожее на:
admin' or vio!='' or - и буду админом на твоем сайте
5. LEONeso - 03 Декабря, 2010 - 14:54:26 - перейти к сообщению
DeepVarvar пишет:
Запрос исправить на

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

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

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

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

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

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

Пытаюсь сделать минимум, сверка данных и запоминание юзера (30 минут +- )
6. DeepVarvar - 03 Декабря, 2010 - 14:57:50 - перейти к сообщению
LEONeso пишет:
дело в красоте написания?

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

CODE (SQL):
скопировать код в буфер обмена
  1. ...WHERE name = "test"... отработает как надо
7. LEONeso - 03 Декабря, 2010 - 16:06:42 - перейти к сообщению
DeepVarvar пишет:
LEONeso пишет:
дело в красоте написания?

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

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

буду учитывать, но лично работаю с MySQL 5, хотя нельзя сказать, что глубоко нем, чисто так, хранение данных и запросы в php (ошибок не выводилось, ни разу).
8. OrmaJever - 03 Декабря, 2010 - 16:16:29 - перейти к сообщению
LEONeso а почему ты решил что авторизация не работает? Если пользователь авторизировался успешно то добавляется только $_SESSION['id']. Попробуй вначале авторизировался а потом на другой странице вывести $_SESSION['id']
9. LEONeso - 03 Декабря, 2010 - 16:45:43 - перейти к сообщению
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']))
10. OrmaJever - 03 Декабря, 2010 - 17:30:05 - перейти к сообщению
Ну если авторизцаия успешна то это уже другое дело.
Просто нужно весь кодс 13 по 32 строку написать в else
11. ALEN - 03 Декабря, 2010 - 19:40:14 - перейти к сообщению
LEONeso
Пиши сразу все аккуратно и правильно и тогда все само работает, ты ищешь одну мелочь, а она прячется за всем, что ты не хочешь решать.


P.S. Если кому нужно, после завтра выложу универсальный класс для авторизации на сайте (2 методами, правда временно без защиты от перебора)
12. LEONeso - 03 Декабря, 2010 - 20:22:41 - перейти к сообщению
ALEN пишет:
LEONeso
Пиши сразу все аккуратно и правильно и тогда все само работает, ты ищешь одну мелочь, а она прячется за всем, что ты не хочешь решать.


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


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

Жду Ваш класс, думаю будет познавательно, ну а если еще и сработает Радость
13. ALEN - 03 Декабря, 2010 - 20:25:06 - перейти к сообщению
LEONeso
Ну класс точно будет работать, но будет на сессиях без куков (так же временно)
14. LEONeso - 06 Декабря, 2010 - 12:04:30 - перейти к сообщению
ALEN пишет:
LEONeso
Ну класс точно будет работать, но будет на сессиях без куков (так же временно)

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

 

Powered by ExBB FM 1.0 RC1