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 :: Версия для печати :: Создание профиля пользователя [2]
Форумы портала PHP.SU » » Вопросы новичков » Создание профиля пользователя

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

16. salim - 27 Октября, 2011 - 19:30:23 - перейти к сообщению
Вот вам самый простой, но верный способ определения пользователя.
Даю код из своей CMS Улыбка

PS простите за такие большие табуляции
PSS прочитал ваше последнее сообщение, смысл поста отменяется, но пусть висит, может кому и потребуется

PHP:
скопировать код в буфер обмена
  1.  
  2. function isUser()
  3. {
  4.         global $DB, $prefix;
  5.         @include 'modules/user/conf/config.php';
  6.         if ($_COOKIE[$USR['cookie']])
  7.                 {
  8.                         $info = explode(':', base64_decode($_COOKIE[$USR['cookie']]) );
  9.                         if (count($info) == 3)
  10.                                 {
  11.                                         $sql = "SELECT * FROM {$prefix}_users WHERE id='$info[0]' AND user_name='$info[1]' AND user_pwd='$info[2]'";
  12.                                         $r = $DB->query($sql);
  13.                                         if (mysql_num_rows($r))
  14.                                                 {
  15.                                                                 while($USER = mysql_fetch_array($r))                                                                    {
  16.                                                                         return $USER;
  17.                                                                 }
  18.                                                 }
  19.                                         else
  20.                                                 {
  21.                                                         return false;
  22.                                                                                 }
  23.                                 }
  24.                         else
  25.                                 {
  26.                                         return false;
  27.                                 }
  28.                 }
  29.         else
  30.                 {
  31.                         return false;
  32.                 }
  33. }
  34.  
17. Itan - 27 Октября, 2011 - 19:32:54 - перейти к сообщению
Жееесть. Мне кажется, что у вас так быстро базу сольют через инъекцию. Хотя, я, может, ошибаюсь. Но я бы сделал серию проверок, перед запросом.
18. etoYA - 27 Октября, 2011 - 19:32:55 - перейти к сообщению
Ну я про это же...
19. salim - 27 Октября, 2011 - 19:38:33 - перейти к сообщению
Itan нет у меня проверяются ВСЕ COOKIES и ВСЕ ГЕТ и ПОСТ запросты еще до подключения библиотек и выпопленеия запросов.
Ребята, я c PHP работаю 5 лет..., и уж поверьте, то что я вчера у вас зарегислся не значит, что я еще молодой
(Добавление)
Itan, etoYA пример инъекции будьте добры опираясь на мой код.
Может и правда нужно что-то изменить
20. etoYA - 27 Октября, 2011 - 19:41:17 - перейти к сообщению
salim, не Вы не поняли, я не про иньекцию писал "И я про это же", я всего лишь новичек...
(Добавление)
И кстате, по профилю. Вот к примеру у меня есть ссылка на профиль http://mysite[dot]ru/index.php?act=profile - откроет профиль пользователя. А допустим как открыть профиль другого пользователя гет запросом? http://mysite[dot]ru/index.php?act=profile&id=1

Так правильно?

PHP:
скопировать код в буфер обмена
  1. SELECT * FROM users WHERE id='{$_SESSION['id']}' ORDER BY 'id' LIMIT 1
21. Itan - 27 Октября, 2011 - 19:58:54 - перейти к сообщению
Да, правильно.

salim, http://forum[dot]antichat[dot]ru/showthread.php?t=7122
22. salim - 27 Октября, 2011 - 20:22:55 - перейти к сообщению
Itan, я не сомневаюсь в вашей осведомленности...
я не сомневаюсь что вы знаете много ссылок и знакомы с теорией хакинга...
я как-бы тоже не одну тонну подобной инфы перелопатил...

мне только интересно на что вы делали уклон когда дали мне эту ссыоку?
на присутствие "пустого логина/пароля", на наличие зашифрованных COOKIE (т.е кукисы вида admin:md5(пароль))

Не дерзю и не понтуюсь, давайте подискутируем Улыбка

Признаюсь, я вам тоже соврал
в этом месте
на самом деле запись вида
PHP:
скопировать код в буфер обмена
  1. AND user_pwd='".$MC->HashPwd($info[2])."
'
где $MC - MainClass
23. EuGen - 27 Октября, 2011 - 20:33:50 - перейти к сообщению
salim, говорите 5 лет работаете, а первые же строки кода..
include внутри функции-блока, да еще и через @ или скажем нетипизированный результат функции (поясню - функция должна всегда возвращать результат строго одного типа или же null, не должно быть так, чтобы когда-то она возвращала false, когда-то массив, когда-то целое и т.п.)
В общем, это не по теме, но все же уровень знаний зависит не от (или далеко не только от) количества лет в опыте программирования

Это строго не по теме, поэтому если будет желание продолжить, лучше не здесь.
24. salim - 27 Октября, 2011 - 20:43:56 - перейти к сообщению
EuGen объясняю (но не отмазываюсь)
CMS модульная...
да, согласен символ @ здесь не уместен... спасибо, видимо забыл убрать (ну, все бывает) можно было бы зделать

Цитата:
include внутри функции-блока
а по вашему конфиг-инклуд лучше сделать в начале библиотеки? и на кой он мне здался "поверх" всех скриптов?
PHP:
скопировать код в буфер обмена
  1. функция должна всегда возвращать результат строго одного
Вы уверены ?
моя функция возвращаем массив данных о пользователе и вы не представляете как это удобно!
PHP:
скопировать код в буфер обмена
  1. поэтому если будет желание продолжить, лучше не здесь.

Вызываете тет-а-тет? Улыбка
25. etoYA - 27 Октября, 2011 - 20:49:26 - перейти к сообщению
Думаю не тет-а-тет, а просто вне этого топика)
26. EuGen - 27 Октября, 2011 - 20:59:58 - перейти к сообщению
Вне топика мы можем обсудить те конкретные недостатки, которые я имел ввиду (судя по Вашему комментарию, вы пока еще не поняли сути)
27. DlTA - 27 Октября, 2011 - 22:37:56 - перейти к сообщению
EuGen пишет:
функция должна всегда возвращать результат строго одного типа или же null, не должно быть так, чтобы когда-то она возвращала false, когда-то массив

почему? это же удобно
28. snikers987 - 27 Октября, 2011 - 23:00:26 - перейти к сообщению
DlTA пишет:
EuGen пишет:
функция должна всегда возвращать результат строго одного типа или же null, не должно быть так, чтобы когда-то она возвращала false, когда-то массив

почему? это же удобно


чем удобно? если не понятно какое значение вернет функция, с которым дальше нужно както работать, писать кучу проверок что вернула функция, а потом только работать с результатом?

К примеру скрипт ждет что функция вернет bool , а она ему возвращает массив, это по Вашему удобно?

Поправьте если не прав. ИМХО
29. DeepVarvar - 28 Октября, 2011 - 01:03:45 - перейти к сообщению
snikers987 пишет:
Поправьте если не прав. ИМХО

Вы арендуете вагоны.
В этот раз вы заказали 10 вагонов (array).
Вы ожидаете 10 вагонов.
Приезжает пустой тепловоз (null).

Если судить по вашему, то:
Даже если вагонов нет, всеравно должны быть вагоны.
Хоть один... Ну хоть старый и ржавый... (array).
Где их взять то? Радость Радость Радость
30. etoYA - 28 Октября, 2011 - 01:21:42 - перейти к сообщению
Немогу понять как сделать если пользовател не авторизирован, но зашел в профиль index.php?act=profile вывод сообщения "вы не авторизированы"

PHP:
скопировать код в буфер обмена
  1.  
  2. <?
  3. require_once('config.php');
  4.  
  5. // Если гет существует гет запрос, то открыть профиль пользователя по ID
  6. if ($_GET['id']) {
  7.         $query = "SELECT * FROM `users` WHERE id='{$_GET['id']}' LIMIT 1";
  8. }
  9. //Иначе открыть профиль авторизованого пользователя
  10. else {
  11.         $query = "SELECT * FROM `users` WHERE id='{$_SESSION['user_id']}' LIMIT 1";
  12. }
  13. $sql = mysql_query($query) or die(mysql_error());
  14. // Если пользователь с таким айди существует, то вывести его профиль
  15. if (mysql_num_rows($sql) == 1) {
  16.         $row = mysql_fetch_array($sql);
  17.         echo $row['login'];
  18.         if (isset($_SESSION['user_id']) AND $_SESSION['user_id'] == $row['id']) {
  19.                 profile();
  20. }
  21. // Если айди гет запроса совпадает с айди сессии, то это профиль авторизованого пользователя
  22.         elseif (isset($_SESSION['user_id']) AND $_GET['id'] == $_SESSION['user_id']) {
  23.                 profile();
  24.  
  25. }
  26. }
  27. else{
  28.         echo 'Такого пользователя не сущесвтует';
  29. }
  30. // Функция редактирования персонального профила
  31. function profile() {
  32.         echo '<br/> Personal profile';
  33. }
  34. ?>
  35.  


И вообще, оцените и укажите на недостатки профиля

 

Powered by ExBB FM 1.0 RC1