За последние 24 часа нас посетили 20127 программистов и 1726 роботов. Сейчас ищет 1631 программист ...

MVC (куда чего пихать?)

Тема в разделе "Вопросы от блондинок", создана пользователем html-программист, 17 апр 2012.

  1. html-программист

    html-программист Активный пользователь

    С нами с:
    10 фев 2012
    Сообщения:
    831
    Симпатии:
    4
    Адрес:
    Kiev
    В общем делаю авторизацию. И в общем не знаю, куда чего пихать. Пользователь вводит логин-пароль, это мы передаем в контроллер, из контроллера передаем запрос в модель. Модель ищет в базе данных совпадения... Куда mysql_num_rows пихать - в модель или контроллер?

    Добавлено спустя 11 минут 53 секунды:
    Контроллер:
    Код (PHP):
    1. <?php
    2. //антивзлом
    3.     if (!defined(XCONT)){
    4.         die("huck");
    5.     }
    6. //антивзлом end
    7.  
    8.     require_once "models/mauthuser.php";
    9.  
    10.     class CAuthUser extends MAuthUser{
    11.         public $auth_access; // не знаю, зачем я ее паблик сделал...
    12.  
    13.         function check_auth($post) { 
    14.  
    15.                 $solt="solt"; // соль
    16.                 $post['user_password']=crypt($post['user_password'],$solt); // сверяем пароль пользователя
    17.  
    18.                 $rows=$this->auth_user($post); // проверка совпадения в базе данных
    19.                 $rows_num=mysql_num_rows($rows); // считаем количество совпадений
    20.                 if($rows_num>0){
    21.                     $row_array=mysql_fetch_assoc($rows); 
    22.                     $this->sess_input($row_array); // отправляем данные в сессию
    23.  
    24.                     $cook_array['id']=$row_array['id']; // сочиняем кукезы
    25.                     $cook_array['hash']=crypt($row_array['username']); // крипт без соли всегда разные хеши генерирует
    26.                     $this->cook_input($cook_array['hash']); // отправляем хеш в куки
    27.                     $session_rows=$this->db_test($cook_array['id']); // проверяем табличку сессий
    28.                     $session_num_rows=mysql_num_rows($session_rows); // считаем совпадения
    29.                     $this->db_input($cook_array, $session_num_rows); // записываем в табличку сессий хеш из кукезов
    30.                     
    31.  
    32.                     $auth_access="Вы вошли в систему";
    33.                 }else{
    34.                     $auth_access="Не верно введен логин или пароль";
    35.                 }
    36.  
    37.  
    38.             return $auth_access;
    39.         }
    40.     }
    41.     
    42.     $vauthuser = new CAuthUser() ;
    43.  
    44. ?>
    Модель:
    Код (PHP):
    1. <?php
    2. //тута будет файл отправляющий запрос регистрации пользователей в БД
    3.  
    4. //антивзлом
    5.     if (!defined(XCONT)){
    6.         die("huck");
    7.     }
    8. //антивзлом end
    9.  
    10.     require_once "config/db.php"; 
    11.  
    12.  
    13.     class MAuthUser extends Db{
    14.         function auth_user($post){
    15.             $sql="SELECT * FROM users WHERE username='{$post['username']}' AND user_password='{$post['user_password']}'";
    16.             $test=$this->sql($sql);
    17.             return $test;
    18.         }
    19.  
    20.         function get_user($post){
    21.             $sql="SELECT * FROM users WHERE id='{$post['id']}' ";
    22.             $test=$this->sql($sql);
    23.             return $test;
    24.         }
    25.         
    26.         function sess_input($post){
    27.             $_SESSION['flag']=true;
    28.             $_SESSION['name']=$post['username'];
    29.             $_SESSION['access']=$post['user_access'];
    30.             $_SESSION['points']=$post['user_points'];        
    31.         }
    32.  
    33.         function cook_input($post){
    34.             setcookie("hash", $post, time()+60*60*24*30); // эта часть пока бесполезна
    35.         }
    36.  
    37.  
    38.         function db_test($post){
    39.             $sql="SELECT sessid FROM sessions WHERE userid='{$post}'"; // вот здесь мы из таблички сессий извлекаем
    40.             $test=$this->sql($sql);
    41.             return $test;
    42.         }
    43.  
    44.         function db_input($post, $num){ // а здесь, стало быть проверяем количество извлеченного
    45.             if($num>0){ // это можно и в модели и контроллере делать... не знаю, как более кошерно
    46.                 $sql="UPDATE sessions SET hash='{$post['hash']}' WHERE userid='{$post['id']}'";
    47.             }else{
    48.                 $sql="INSERT INTO sessions (userid, hash) VALUES ('{$post['id']}','{$post['hash']}')";
    49.             }
    50.             $this->sql($sql);
    51.             return true;
    52.         }
    53.  
    54.  
    55.     }
    56. ?>
    Смотрю я на весь этот код и думаю, может мне вообще не стоит заниматься программированием?
     
  2. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Из кода ничего не понял, но модель нужна чтобы отгородиться от sql, поэтому она либо вернет инфу юзера в массиве, или объект юзера, или не вернет ничего, соответственно num_rows в ней.
     
  3. html-программист

    html-программист Активный пользователь

    С нами с:
    10 фев 2012
    Сообщения:
    831
    Симпатии:
    4
    Адрес:
    Kiev
    В общем где-то так: http://xcont.com/x/
    Если кто шарит - проверьте его на всякие там инъекции. Я хз, что у меня там с безопасностью.

    PS. Чего-то в моем Модель-Вид-Контроллер напрочь отсутствует Вид :(
     
  4. Апельсин

    Апельсин Активный пользователь

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    Введи в поле Name:
    Код (Text):
    1. "/><script>alert(123);</script>
    и отправь.
     
  5. html-программист

    html-программист Активный пользователь

    С нами с:
    10 фев 2012
    Сообщения:
    831
    Симпатии:
    4
    Адрес:
    Kiev
    Это из-за этого?
    Код (Text):
    1. value="<?php echo $_POST['username'] ?>"
    Как исправить?
     
  6. Апельсин

    Апельсин Активный пользователь

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    Как-как. Если я просто отвечу - будет не интересно и ты свой скил владения гуглом на +1 не прокачаешь.
    Это вовсе простые вещи, про которые нужно знать еще до mvc.
     
  7. html-программист

    html-программист Активный пользователь

    С нами с:
    10 фев 2012
    Сообщения:
    831
    Симпатии:
    4
    Адрес:
    Kiev
    С этим разобрался. Еще будут замечания?
     
  8. Апельсин

    Апельсин Активный пользователь

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    Код (Text):
    1. $sql="SELECT * FROM users WHERE username='{$post['username']}' AND user_password='{$post['user_password']}'";
    если у тебя ничего не фильтруется - то это плохо.
    хотя, и так не особо хорошего есть в твоем коде.
     
  9. html-программист

    html-программист Активный пользователь

    С нами с:
    10 фев 2012
    Сообщения:
    831
    Симпатии:
    4
    Адрес:
    Kiev
    Уже фильтруется немножко

    Код (PHP):
    1.         function check_auth($post) {
    2.  
    3.  
    4.             $is_ok_name = preg_match("/[^(\w)|(\x7F-\xFF)|(\s)]/", $post['username']);
    5.             $is_ok_password = preg_match("/[^(\w)|(\x7F-\xFF)|(\s)]/", $post['user_password']);
    6.             if ($is_ok_name){
    7.                 if ($is_ok_password){
    8.                     $reg_error="Некорректно введено имя пользователя и пароль";
    9.                     return $reg_error;
    10.                 }else{
    11.                     $reg_error="Некорректно введено имя пользователя";
    12.                     return $reg_error;
    13.                 }
    14.             }
    15.             if ($is_ok_password){
    16.                 $reg_error="Некорректно введен пароль";
    17.                 return $reg_error;
    18.             }
    19. ... 
     
  10. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    блR, столько умных слов чтобы сделать один запрос в бд
     
  11. html-программист

    html-программист Активный пользователь

    С нами с:
    10 фев 2012
    Сообщения:
    831
    Симпатии:
    4
    Адрес:
    Kiev
    главное, чтобы работало
     
  12. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    усомнюсь в таком подходе.
     
  13. html-программист

    html-программист Активный пользователь

    С нами с:
    10 фев 2012
    Сообщения:
    831
    Симпатии:
    4
    Адрес:
    Kiev
    Если проект находится в состоянии "under construction" уже 4 месяца - то таки главное, чтобы работало, а как работает - это уже дело десятое.
     
  14. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    у меня год уже андер констракшн =)
     
  15. html-программист

    html-программист Активный пользователь

    С нами с:
    10 фев 2012
    Сообщения:
    831
    Симпатии:
    4
    Адрес:
    Kiev
    Тоже пива много пьешь?
     
  16. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    нет. пишу и работаю по другим задачам.
    объем кода там немалый, а я один. =)