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]   

> Описание: помогите сделать форму авторизации
Extazy
Отправлено: 10 Января, 2010 - 11:04:28
Post Id


Посетитель


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


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




Здравствуйте.
Помогите сделать форму авторизации на сайте.
Имеется база данных с таблицей USERS, в этой таблице 2 поля LOGIN и PASSWORD. И в этой запись о 10 пользователях.

Научите, пожалуйста, как на php написать, чтобы форма авторизации на сайте проверяла введённые данные.. чтобы авторизация проходила только в том случае, если у существующего LOGIN'a был введён правильный PASSWORD.

Очень мне надо щас в этом разобраться.. буду благодарен за помощь. А то по учебнику непонятно написано..
 
 Top
Champion Супермодератор
Отправлено: 10 Января, 2010 - 11:09:43
Post Id



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


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


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




Вот написал бы ты, что именно тебе в учебнике не понятно и как ты пробовал, и что из этого получилось.
 
 Top
Extazy
Отправлено: 10 Января, 2010 - 11:20:32
Post Id


Посетитель


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


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




кажется вначале надо сделать select таблицы:

CODE (text):
скопировать код в буфер обмена
  1. mysql_query("SELECT (login, password) FROM users");


а потом может как-то с функцией isset надо отработать?... читал эту справку.. увы, не сумел понять.. если мне поможет другой источник, дайте, пожалуйста, ссылку
 
 Top
RomAndry Администратор
Отправлено: 10 Января, 2010 - 11:53:56
Post Id



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


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


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




PHP:
скопировать код в буфер обмена
  1.  
  2. $sql = 'SELECT * FROM WHERE `login`="'.$login.'" AND `password`="'.$password.'" LIMIT 1';
  3. $res = mysql_query($sql) or die(mysql_error());
  4.  
 
My status
 Top
Extazy
Отправлено: 10 Января, 2010 - 12:21:02
Post Id


Посетитель


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


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




чтото я запутался в вашем коде.. я так понимаю вы же написали только тот кусок кода, который отвечает за поиск таких полей, в которых уже имеется полученный login и password...

тамже наверное ещё надо дописать типа:
PHP:
скопировать код в буфер обмена
  1. if($sql)
  2.  print "авторизация успешна";
  3. else
  4.  print "данные неверны";


или не?? подскажите более подробно, пожалуйста
(Добавление)
выполнил в phpmyadmin этот запрос:

CODE (SQL):
скопировать код в буфер обмена
  1. SELECT * FROM users WHERE login='admin' AND pass='pass'


вернуло именно то что мне надо..

а на php не получается этот перевести... как правильно написать?

PHP:
скопировать код в буфер обмена
  1.                 $sql = mysql_query("SELECT * FROM users WHERE login='admin' AND pass='pass'");
  2.                 if($sql)
  3.                 {
  4.                     echo "вы автризованы";
  5.                 }
  6.                 else
  7.                 {
  8.                     echo "непрально";
  9.                 }

(Добавление)
ура! получилось!
всем большое спасибо!!
 
 Top
Antosha
Отправлено: 10 Января, 2010 - 15:06:12
Post Id


Гость


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


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




Extazy пишет:
Помогите сделать форму авторизации на сайте.


Если не трудно можешь (будь добр) выложи скрипт авторизации))
Я хочу посмотреть чем он отличаеться от моего ну и вообше для развития
(я так же как и ты новичёк)

Спасибки Закатив глазки
 
 Top
Extazy
Отправлено: 10 Января, 2010 - 15:16:47
Post Id


Посетитель


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


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




мм,)
ну вот мой вариант.. только тут надо кукисы ещё подключить... а я до их изучения пока не дошёл.. потом доработаюУлыбка

PHP:
скопировать код в буфер обмена
  1.             <?PHP
  2.             if($_POST['login'] & $_POST['pass'])
  3.             {
  4.                 $login=$_POST['login'];
  5.                 $pass=$_POST['pass'];
  6.  
  7.                 $server="localhost";
  8.                 $database_name="user_baza";
  9.                 $dbuser="user_vlad";
  10.                 $dbpassword="pass";
  11.  
  12.                 @mysql_connect($server,$dbuser,$dbpassword) or die("Ошибка: ".mysql_error());
  13.                 @mysql_select_db($database_name) or die("Введено неправильное название базы данных.");
  14.  
  15.                 $sql = mysql_query("SELECT * FROM users WHERE login='$login' AND pass='$pass'");
  16.                 if(mysql_num_rows($sql)==1)
  17.                 {
  18.                     echo "Вы авторизовались!";
  19.                 }
  20.                 else
  21.                 {
  22.                     echo "Введённые данные неверны!";
  23.                 }
  24.             }
  25.             else
  26.             {
  27.                 echo "Авторизация:
  28.            <br /><form name=\"input\" action=\"index.php\" method=\"post\">
  29.            <br /><input type=\"text\" name=\"login\" onclick=\"this.value=''\" value=\"Введите логин\" />
  30.            <br /><input type=\"text\" name=\"pass\" onclick=\"this.value=''\" value=\"Введите пароль\" />
  31.            <input type=\"submit\" value=\"Войти\" /></form>";


ну и регистрационные данные пользователей храню в mysql базе.. её создать таким кодом:

CODE (text):
скопировать код в буфер обмена
  1.          mysql_query("CREATE TABLE users(
  2.             id INT NOT NULL AUTO_INCREMENT,
  3.             PRIMARY KEY(id),
  4.             login VARCHAR(10),
  5.             pass VARCHAR(10),
  6.             name VARCHAR(10),
  7.             email VARCHAR(30) )") or die("Ошибка: ".mysql_error());
 
 Top
Antosha
Отправлено: 10 Января, 2010 - 15:57:10
Post Id


Гость


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


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




Вот установил себе


вылезает ошибка при авторизации...

CODE (SQL):
скопировать код в буфер обмена
  1. Warning: mysql_num_rows() expects parameter 1 TO be resource, BOOLEAN given IN C:\Program Files\xampplite\htdocs\www\reg\autorize_controller.php ON line 16

(Отредактировано автором: 10 Января, 2010 - 16:00:50)

 
 Top
Extazy
Отправлено: 10 Января, 2010 - 16:00:42
Post Id


Посетитель


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


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




взгляни на мой код и на свойУлыбка жди помощи от кого другого.. тут ребята хорошие сидят. помогут Подмигивание
 
 Top
Antosha
Отправлено: 10 Января, 2010 - 16:01:59
Post Id


Гость


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


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




Extazy пишет:
взгляни на мой код и на свойУлыбка жди помощи от кого другого.. тут ребята хорошие сидят. помогут Подмигивание


Ладна Улыбка
Спасибо и на ЭтОМ)
 
 Top
Hunter
Отправлено: 16 Января, 2010 - 08:56:07
Post Id



Частый гость


Покинул форум
Сообщений всего: 214
Дата рег-ции: Дек. 2009  
Откуда: Блага


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




Antosha, Extazy
предлагаю такой вариант проверки:
извлекаем данные из таблици и строим ассоциативный массив в котором например значения ключей будут равны значениям логинов, а значения элементов соответственно значениям паролей, затем функцией in_array ищем в полученном массиве ключ равный введенному значению логина, если такой ключ сравниваем значение элемента со значением введенного пароля, если верно то определенные действия если нет то отправляем снова на страницу входа.
почему так? ну это позволяет исключить иньекции в базу данных т.к. пользователь не обращается напрямую к БД, можно использовать логины абсолютно любого вида и любой длинны)))
хотя вариантов много, а если нужен просто пример то вот мой: http://forum.php.su/topic.php?fo...=35&topic=75 там и все файлы вроде имеются и запрос для создания БД.. в общем поковыряйся, посмотри, думаю что нибудь для себя извлечешь)
 
 Top
Мелкий Супермодератор
Отправлено: 16 Января, 2010 - 13:50:11
Post Id



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


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


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




Hunter, вариант покомпактнее - запросить только логин, а пароль пусть сравнивает скрипт.

И зачем вообще массив? Почему бы в таком случае (запрашивая все пары логин-пароль) не проверять сходство сразу в цикле получения данных?


-----
PostgreSQL DBA
 
 Top
Hunter
Отправлено: 17 Января, 2010 - 08:34:06
Post Id



Частый гость


Покинул форум
Сообщений всего: 214
Дата рег-ции: Дек. 2009  
Откуда: Блага


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




Мелкий в том то и дело что если проверять сразу то надо заботиться о безопасности, а что касается компактности - ведь при авторизации речь идет не только о логине но и о пароле, поэтому я сразу и беру пары логин - пароль в масив.. на самом деле я делаю не так а мысль только тут пришла Подмигивание но сдается мне что обработка массива с количеством элементов в несколько тысяч займет побольше времени чем выборка из базы с таким же количеством записей нужного логина Подмигивание
 
 Top
Мелкий Супермодератор
Отправлено: 17 Января, 2010 - 12:57:56
Post Id



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


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


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




Hunter пишет:
но сдается мне что обработка массива с количеством элементов в несколько тысяч займет побольше времени чем выборка из базы с таким же количеством записей нужного логина

А почему в сравнении? Ведь чтобы получить массив, нужно выбрать записи из базы! А зачем нам получать массив? Т.е.
PHP:
скопировать код в буфер обмена
  1. $auth = false;
  2. $a = mysql_query("select `login`,`pass` from `auth`");
  3. while ($r = mysql_fetch_assoc($a)) {
  4. if ($r['login'] = $login && $r['pass'] == $pass) {$auth = true; break;}
  5. }
  6. if ($auth) echo "мы авторизовались!";


Хотя с точки зрения скорости всё равно неповоротливый вариант.

(Отредактировано автором: 17 Января, 2010 - 13:01:17)



-----
PostgreSQL DBA
 
 Top
Hunter
Отправлено: 17 Января, 2010 - 15:10:58
Post Id



Частый гость


Покинул форум
Сообщений всего: 214
Дата рег-ции: Дек. 2009  
Откуда: Блага


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




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

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

вообще раз парни спрашивают об авторизации то наверно о моментах безопасности не стоит забывать..
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB