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 » SQL и Архитектура БД » авторизация на сайте

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

1. Extazy - 10 Января, 2010 - 11:04:28 - перейти к сообщению
Здравствуйте.
Помогите сделать форму авторизации на сайте.
Имеется база данных с таблицей USERS, в этой таблице 2 поля LOGIN и PASSWORD. И в этой запись о 10 пользователях.

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

Очень мне надо щас в этом разобраться.. буду благодарен за помощь. А то по учебнику непонятно написано..
2. Champion - 10 Января, 2010 - 11:09:43 - перейти к сообщению
Вот написал бы ты, что именно тебе в учебнике не понятно и как ты пробовал, и что из этого получилось.
3. Extazy - 10 Января, 2010 - 11:20:32 - перейти к сообщению
кажется вначале надо сделать select таблицы:

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


а потом может как-то с функцией isset надо отработать?... читал эту справку.. увы, не сумел понять.. если мне поможет другой источник, дайте, пожалуйста, ссылку
4. RomAndry - 10 Января, 2010 - 11:53:56 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1.  
  2. $sql = 'SELECT * FROM WHERE `login`="'.$login.'" AND `password`="'.$password.'" LIMIT 1';
  3. $res = mysql_query($sql) or die(mysql_error());
  4.  
5. Extazy - 10 Января, 2010 - 12:21:02 - перейти к сообщению
чтото я запутался в вашем коде.. я так понимаю вы же написали только тот кусок кода, который отвечает за поиск таких полей, в которых уже имеется полученный 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.                 }

(Добавление)
ура! получилось!
всем большое спасибо!!
6. Antosha - 10 Января, 2010 - 15:06:12 - перейти к сообщению
Extazy пишет:
Помогите сделать форму авторизации на сайте.


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

Спасибки Закатив глазки
7. Extazy - 10 Января, 2010 - 15:16:47 - перейти к сообщению
мм,)
ну вот мой вариант.. только тут надо кукисы ещё подключить... а я до их изучения пока не дошёл.. потом доработаюУлыбка

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());
8. Antosha - 10 Января, 2010 - 15:57:10 - перейти к сообщению
Вот установил себе


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

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
9. Extazy - 10 Января, 2010 - 16:00:42 - перейти к сообщению
взгляни на мой код и на свойУлыбка жди помощи от кого другого.. тут ребята хорошие сидят. помогут Подмигивание
10. Antosha - 10 Января, 2010 - 16:01:59 - перейти к сообщению
Extazy пишет:
взгляни на мой код и на свойУлыбка жди помощи от кого другого.. тут ребята хорошие сидят. помогут Подмигивание


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

И зачем вообще массив? Почему бы в таком случае (запрашивая все пары логин-пароль) не проверять сходство сразу в цикле получения данных?
13. Hunter - 17 Января, 2010 - 08:34:06 - перейти к сообщению
Мелкий в том то и дело что если проверять сразу то надо заботиться о безопасности, а что касается компактности - ведь при авторизации речь идет не только о логине но и о пароле, поэтому я сразу и беру пары логин - пароль в масив.. на самом деле я делаю не так а мысль только тут пришла Подмигивание но сдается мне что обработка массива с количеством элементов в несколько тысяч займет побольше времени чем выборка из базы с таким же количеством записей нужного логина Подмигивание
14. Мелкий - 17 Января, 2010 - 12:57:56 - перейти к сообщению
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 "мы авторизовались!";


Хотя с точки зрения скорости всё равно неповоротливый вариант.
15. Hunter - 17 Января, 2010 - 15:10:58 - перейти к сообщению
Мелкий да я тебя прекрасно понял, сам то я обрабатываю полученные данные, исключая возможность иньекции, и сравниваю сразу в запросе, выбирая из базы логин если таковой имеется а потом уже помещаю всю запись с этим логином в аасоциативный массив и использую эти данные по своему усмотрению, в том числе и проверяю пароль..

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

вообще раз парни спрашивают об авторизации то наверно о моментах безопасности не стоит забывать..

 

Powered by ExBB FM 1.0 RC1