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


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

> Описание: вопрос про авторизацию
antobra
Отправлено: 29 Октября, 2010 - 22:44:41
Post Id


Посетитель


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


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




Здравствуйте. Недавно изучаю PHP и уже относительно хорошо продвинулся. И вообще рад, что занялся этим. Это оказалось очень интересно!

У меня возник вопрос по авторизации пользователей, а именно вот в чем.

Как передавать данные о пользователе между страницами скрипта, когда пользователь ходит по страницам сайта?

Объясню. Вот входит пользователь, сверяется логин и пароль. Это страница index.php, на этой странице можно вывести все данные из базы о данном пользователе и что-либо с ними сделать. И, сайт имеет еще страницы: profile.php, to_do.php и т.п. И когда пользователь переходит на профайл.пхп, то на странице уже никакие данные о пользователе не выводятся из базы. Т.е. просто в нужных местах пустота.

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

Я уже сделал через кукис... догадался сам. Т.е. при авторизации записываются кукисы и потом вверх всех страниц profile.php, to_do.php и т.д. вставил код, который вынимает кукисы и снова их проверяет в mysql на правильность через SELECT .... WHERE login=$login AND password=$password. Правильно ли я сделал? Как это делают все сайты? И как положено? Расскажите плиз. Слышал что-то про какие-то сессии...

Заранее спасибо каждому, кто ответит.

P.S. Сайт оч понравился, буду частым гостем!
 
 Top
OrmaJever Модератор
Отправлено: 29 Октября, 2010 - 22:58:55
Post Id



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


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


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




Когда пользователь авторизируется ему можно добавить куки


И в начале каждой страницы проверять пользователя.

PHP:
скопировать код в буфер обмена
  1. $result = mysql_query("SELECT * FROM users WHERE pass='".$_COOKIE['user']."'")
  2. if(!$result) $user = false;
  3. else {
  4. $x = mysql_fetch_object($result);
  5. $user = $x->login;
  6. }


Ну вот как то так

(Отредактировано автором: 29 Октября, 2010 - 22:59:25)



-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
OverNik
Отправлено: 29 Октября, 2010 - 23:20:35
Post Id



Частый гость


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


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




Печенька хороша но сессия лучше.
Прочти: http://php.su/articles/?cat=exam...les&page=070
Все очень просто и элементарно
 
 Top
Uchkuma
Отправлено: 30 Октября, 2010 - 00:04:33
Post Id



Участник


Покинул форум
Сообщений всего: 1539
Дата рег-ции: Март 2010  
Откуда: Киров


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




OverNik пишет:
Печенька хороша но сессия лучше.
Печенька для авторизации очень плоха. Да, конечно же сессии!

Жеванная пережеванная тема на самом деле. Стабильно раз в месяц на этом форуме появляется новичок, который делает авторизацию на куках.
 
 Top
OrmaJever Модератор
Отправлено: 30 Октября, 2010 - 00:14:55
Post Id



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


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


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




Uchkuma пишет:
OverNik пишет:
Печенька хороша но сессия лучше.
Печенька для авторизации очень плоха. Да, конечно же сессии!


тут или я плохо прочитал или вы правдо написали что печеньки для авторизации не подходят? Не понял

1) Как это большинсво сайтов их используют тогда? Однако
2) Сесия заканчивается когда браузер закрывают. Апотом открыть и снова авторизироватся? Однако
3) ДЛя чего тогда печеньки придуманы? Однако


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Uchkuma
Отправлено: 30 Октября, 2010 - 00:32:47
Post Id



Участник


Покинул форум
Сообщений всего: 1539
Дата рег-ции: Март 2010  
Откуда: Киров


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




1. Они используются, но с другой целью. В куках хранится только уникальный id пользователя, который, собственно и используется в механизме сессий.

2. Когда закрывается браузер, сессия остается (она ведь хранится на сервере!), а вот кука может быть удалена (и то в зависимости от настроек, с которыми она была установлена) и тогда связь с сессией будет прервана. В этом случае сервер назначит новый id и создаст новую сессию.

3. Для хранения НЕконфиденциальных данных. Т.е. не логина и пароля.
 
 Top
OverNik
Отправлено: 30 Октября, 2010 - 00:47:09
Post Id



Частый гость


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


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




В разделе "напиши за меня" есть очень много примеров по этой теме. Их вылаживали наверное все с просьбой проверить скрипт.
И вобще я сам иногда бываю читаю инфу на форуме за 2008 год, так сказать припомнить, доучить или схватить что-то новое, с тех пор думаю PHP далеко не пошел, разве что клиентская часть...

По теме, да сессию можно востановить (если на сервере не был запущен destroy)

(Отредактировано автором: 30 Октября, 2010 - 00:50:28)

 
 Top
Uchkuma
Отправлено: 30 Октября, 2010 - 00:49:22
Post Id



Участник


Покинул форум
Сообщений всего: 1539
Дата рег-ции: Март 2010  
Откуда: Киров


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




А у php есть клиентская часть? )))
(Добавление)
Вот что мне не нравится на php.su, это что ни одна статья не датирована Недовольство, огорчение А иногда очень полезно знать, свежая информация или нет.
 
 Top
OverNik
Отправлено: 30 Октября, 2010 - 00:52:20
Post Id



Частый гость


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


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




Ну чуточку не правельно выразился Улыбка Бывает... Ниндзя

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

Хотя почти все примеры с php 4.*

(Отредактировано автором: 30 Октября, 2010 - 00:54:01)

 
 Top
antobra
Отправлено: 30 Октября, 2010 - 08:15:01
Post Id


Посетитель


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


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




Спасибо, буду разбираться в сессиях.
(Добавление)
Друзья, сел за чтение информации про сессии и тут же возник вопрос:

чем отличаются сессии, которые пишут идентификаторы - http://php.su/articles/?cat=exam...les&page=070

и те, которые описываются тут http://www[dot]softtime[dot]ru/bookphp/gl8_1.php

Чем отличается? Что лучше? что удобней?
 
 Top
Саныч Модератор
Отправлено: 30 Октября, 2010 - 08:49:03
Post Id



Участник


Покинул форум
Сообщений всего: 1365
Дата рег-ции: Июль 2010  
Откуда: Украина, Запорожье


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




ничем не отличаются, это об одном и томже только по разному написано


-----
Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
 
 Top
antobra
Отправлено: 30 Октября, 2010 - 12:22:18
Post Id


Посетитель


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


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




Саныч спасибо.

С авторизацией я разобрался. Все сделал, прям молодец)))) Но перед этим возникли еще вопросы, позвольте:

1. Хочу вытащить из БД все строки, например где id_user=1, таких строк несколько.
Я составляю таблицу:

<table>
<tr><td>name</td><td>first</td><td>second</td></tr>
<tr><td>$userinfo[name]</td><td>$userinfo[first]</td><td>$userinfo[second]</td></tr>
</table>

Но если все сделать так, то скрипт выводит только одну строку (последнюю), а мне нужно чтоб он вывел все строки и в рамках таблицы т.е. вот так:

<table>
<tr><td>name</td><td>first</td><td>second</td></tr>
<tr><td>Петя</td><td>Бла-бла</td><td>Бам-бам</td></tr>
<tr><td>Миша</td><td>Туц-туц</td><td>Пам-пам</td></tr>
и т.д.
</table>

Как это осуществить? с помощью чего?

2. Как осуществить запись в базу нажатием на ссылку. Объясню: на страничке есть рейтинг, и если нажимаешь на плюс, то в базу записывается в нужную строку +1 к существующему значению, если минус, то минус соответственно. После нажатия делается изменение в базе и снова открывается эта же страничка

Вопрос: как это создать? через какой запрос. Просто не очень понимаю как от нажатия ссылки можно ввести данные в базу и плюс еще перезагрузить страницу. В общем схема не понятна. Как делают большинство сайтов?

Буду очень признателен, если Вы мне подскажите.
 
 Top
OverNik
Отправлено: 30 Октября, 2010 - 12:37:33
Post Id



Частый гость


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


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




1. Дай свой SQL запрос
2:
Допустим у тебя есть ссылька <a href="?rate=1&user=user_id">+1</a>
Дальше
PHP:
скопировать код в буфер обмена
  1.  
  2. if(isset($_GET['rate']))
  3. {
  4.  
  5.    $rate = intval($_GET['rate']);
  6.    $sql = "UPDATE  `users` SET `rate` = `rate`+ `".$rate."` WHERE user = \"".mysql_real_escape_string($_GET['user'])."\" LIMIT 1";
  7. if(mysql_query($sql))
  8. {
  9.    #Если запрос прошел успешно
  10. }
  11. else
  12. {
  13.    #Если не очень успешно :)
  14. }
  15.  
  16. }
  17.  

Аналогично делаешь и в минус.
Только нужно сделать проверку что бы $rate был не больше 1 и не менше -1, а то наклацают...

(Отредактировано автором: 30 Октября, 2010 - 12:42:22)

 
 Top
antobra
Отправлено: 30 Октября, 2010 - 12:42:41
Post Id


Посетитель


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


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




$auth_profile = mysql_query("SELECT * FROM user_bu WHERE id='$userinfo[id]' ");
$userinfo_profile = mysql_fetch_array($auth_profile);

echo "
<table border=0 width=100%>
<tr><td>Дата</td><td>Описание операции</td><td>Сумма</td><td>Комментарий</td></tr>
<tr><td>$userinfo_profile[date]</td><td>$userinfo_profile[about]</td><td>$userinfo_profile[money]</td><td>$userinfo_profile[comment]</td></tr>

</table>";

---
Воть
 
 Top
OverNik
Отправлено: 30 Октября, 2010 - 12:48:07
Post Id



Частый гость


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


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




PHP:
скопировать код в буфер обмена
  1.  
  2. $auth_profile = mysql_query("SELECT `date`,`about`,`comment`,`money` FROM `user_bu` WHERE id=\"".$userinfo['id']."\" LIMIT 1");
  3. $userinfo_profile = mysql_fetch_array($auth_profile);
  4.  
  5. echo "
  6. <table border=0 width=100%>
  7. <tr><td>Дата</td><td>Описание операции</td><td>Сумма</td><td>Комментарий</td></tr>
  8. <tr><td>$userinfo_profile[date]</td><td>$userinfo_profile[about]</td><td>$userinfo_profile[money]</td><td>$userinfo_profile[comment]</td></tr>
  9.  
  10. </table>";

1. Работало бы в цикле, но увы ты не поставил LIMIT 1, а сервер то не знает что имено ты от него хочь, это нужно все указивать в запросе.
2. Отвыкай от быспредела в запросах, ставь кавычки
3. SELECT * - ты точно все хочь вытянуть, или просто влом прописать что имено тебе нужно от mysql сервера? Не экономишь ты ресурсы - так нельзя, ведь скорость скрипта - вот его плюс...
 
 Top
Страниц (3): [1] 2 3 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB