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]   

> Без описания
koras
Отправлено: 11 Ноября, 2011 - 18:36:00
Post Id



Частый гость


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


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




Хочу правильно научиться писать код. Как уже писал в одной теме красиво и лаконично, но не сокращено.

Просьба просмотреть кусок кода и подсказать что здесь не так или как бы вы написали. Спасибо.

морда

PHP:
скопировать код в буфер обмена
  1.  
  2. // сперва делаем проверку
  3. // залогинен ли пользователь
  4. if ($obj_user -> admin_user()) {
  5. // пользователь залогинен
  6.                         echo "work pages";
  7. } else {
  8.                 if ($obj_user -> check_user() == true) {
  9.                         echo "defaul pages";
  10.                 }else{
  11.                          // пользователь незалогинен и сессия у него пустая
  12.                         $smarty -> display('admin/login.tpl');
  13.                 }
  14. }


Класс проверки и авторизации.
PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3. <?PHP
  4. class useradmin extends db {
  5.  
  6. private $pass;
  7. private $login;
  8.  
  9. public function admin_user() {
  10. /* Проверка информации  по пользователям из сесии*/
  11. if (isset($_SESSION['login']) && isset($_SESSION['pass'])) {
  12. $ifuser = $this -> getNumRows($this -> query(
  13. "SELECT * FROM user WHERE login='" . $_SESSION['login'] . "'
  14. AND pass= '" . $_SESSION['pass'] . "' LIMIT 1;
  15. "));
  16. if ($ifuser == 1) {
  17. return true;
  18. }
  19. }
  20. return false;
  21. }
  22.  
  23. public function check_user() {
  24. // Проверка информации из формы авторизации
  25. if (isset($_POST['login'])
  26.  && isset($_POST['pass']) && $_POST['login'] != ''
  27.  && $_POST['pass'] != '') {
  28. // делаем проверку на всякие плохие символы и так далее.
  29.  
  30. list($this -> pass, $this -> login) = checkword::usermatch($_POST['pass'], $_POST['login']);
  31.  
  32. $data =         $this -> query("
  33. SELECT * FROM user
  34. WHERE login='" .  $this -> login . "' AND pass='" . $this -> pass . "' limit 1;");
  35.                
  36.                
  37. $user_db = $this -> getAssocRow($data);
  38.                        
  39. if ($this -> getNumRows($data) != 1) {
  40. // такого пользователя нет в базе
  41. return false;
  42. } else {
  43.  // пользователь найден
  44.  // запиываем данные в сессию
  45.  $_SESSION['id'] = $user_db['id'];
  46.  $_SESSION["login"] = $this -> login;
  47.  $_SESSION["pass"] = $this -> pass;
  48. return true;
  49. }
  50. }
  51. return false;
  52.  
  53. }
  54.  
  55. }
  56.  
  57.  


Пока нет md5, попозже как добью добавлю.

(Отредактировано автором: 11 Ноября, 2011 - 20:08:48)

 
 Top
Мелкий Супермодератор
Отправлено: 11 Ноября, 2011 - 19:33:52
Post Id



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


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


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




koras пишет:
extends db

Зачем вам по экземпляру базы данных каждому классу?
Надеюсь, хоть не забываете следить, чтобы открывалось 1 соединение, а не сколько классов?


-----
PostgreSQL DBA
 
 Top
koras
Отправлено: 11 Ноября, 2011 - 20:01:19
Post Id



Частый гость


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


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




Цитата:
Зачем вам по экземпляру базы данных каждому классу?

Так проще , по мне, а как правильней по вашему мнению ?
 
 Top
Мелкий Супермодератор
Отправлено: 11 Ноября, 2011 - 20:19:57
Post Id



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


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


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




Выносить базу данных в singleton или фабрику (factory). Одноимённые паттерны проектирования.


-----
PostgreSQL DBA
 
 Top
koras
Отправлено: 11 Ноября, 2011 - 20:22:44
Post Id



Частый гость


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


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




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

(Отредактировано автором: 11 Ноября, 2011 - 20:24:02)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Объектно-ориентированное программирование »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB