За последние 24 часа нас посетили 72622 программиста и 1650 роботов. Сейчас ищут 856 программистов ...

Небольшая php обработка добавление user|ов

Тема в разделе "PHP для новичков", создана пользователем askanim, 17 окт 2016.

  1. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    PHP:
    1. <?php
    2.     namespace App\Models\Admin\Configuration;
    3.     /*
    4.     *   Создана модель
    5.     *
    6.     */
    7.  
    8.     use System\Http\Model\Model;
    9.  
    10.     class Register extends Model
    11.     {
    12.         private $post = []; // Массив с данными в запросе
    13.         public $err = []; // Массив с ошибками
    14.         private $user = []; // Массив в который ложим информацию о новом пользователе
    15.         public function index () {
    16.             if(isset($_POST)){
    17.                 $this->post = $_POST;
    18.             }
    19.             elseif(isset($_GET)){
    20.                 $this->post = $_GET;
    21.             }
    22.             if(isset($post['submit'])){
    23.                 // Сделаем проверку на получаемые поля о личной информации пользователя
    24.                 // первый аргумент - это имя в базе или же ключ в массиве user
    25.                 // второй аргумент - это name в html
    26.                 // третий аргумент - это ключ в массиве ошибок
    27.                $this->_is_pre('user_name', 'firstname', 'er_fname');
    28.                $this->_is_pre('user_last_name', 'lastname', 'er_lname');
    29.                $this->_is_pre('user_tel', 'telephone', 'er_tel');
    30.                $this->_is_pre('user_email', 'email', 'er_email');
    31.  
    32.                 if(!empty($this->err)){
    33.                     // В результате после поверок, если массив с ошибками не пуст то вернём его
    34.                     return $this->err;
    35.                 }
    36.                 // теперь проверим полученный нами пароль
    37.                 // Он не должен быть менее 4 знаков
    38.                 // И состоять должен из английского алфавита и цифр
    39.                 // А также должен совподать со вторым полем пароля
    40.  
    41.                 $password = $this->protect_pass('password', 'confirm');
    42.                 // если $password пуст вернём массив ошибок
    43.                 if(empty($password)) {
    44.                     return $this->err;
    45.                 }
    46.                 // Если $password оказался не пустым то теперь хешируем пароль
    47.                 // и кладём в массив user данные о пароле
    48.                 $password_hash = password_hash($password, PASSWORD_DEFAULT);
    49.                 $this->user['user_password'] = $password_hash;
    50.  
    51.                 // В моей форме есть ешё возможность подписаться
    52.                 // Но она не обязательна поэтому я проверю её просто на существование
    53.  
    54.                 if (isset($this->post['newsletter'])){
    55.                     if($this->post['newsletter'] == 1) {
    56.                         $this->user['user_letter'] = 1;
    57.                     }
    58.                     else {
    59.                         $this->user['user_letter'] = 0;
    60.                     }
    61.                 }
    62.                 // Также у меня есть поле обязательное на подтверждение лиц соглашения при регистрации
    63.                 // Что пользователь соглашается с правилами нашего сайта, при регистрации на проекте.
    64.                 if (isset($this->post['license_agree'])){
    65.                     if($this->post['newsletter'] == 1) {
    66.                         $this->user['license_agree'] = 1;
    67.                     }
    68.                     else {
    69.                         return $this->err['license'] = 2;
    70.                     }
    71.                 }
    72.                 else {
    73.                     return $this->err['license'] = 2;
    74.                 }
    75.                 // Все поля проверены и добавлены в массив данных пользователе
    76.                 // Теперь нужно добавить это в базу данных в таблицу пользователей
    77.                 // Я использую свой дао pattern но вы можете заюзать и обычное добавление
    78.  
    79.                 $this->table('UsersSite')->Insert($this->user);
    80.  
    81.             }
    82.             $result = $this->table('UsersSite')->get();
    83.             return $result;
    84.         }
    85.         private function protect_pass($query_value, $confirm) {
    86.             // функция проверки пароля
    87.             // Давайте сразу проверим поля на пустоту и существование
    88.             if(isset($this->post[$query_value]) && !empty($this->post[$query_value]) ) {
    89.             $this->post[$query_value];
    90.                 // Во первых проверка на количество введённых символов
    91.                 // По моему хотению оно не должно быть менее 4 символов
    92.                 if (strlen($this->post[$query_value]) < 4) {
    93.                     $this->err[$query_value] = 2;
    94.                 }
    95.                 else {
    96.                     // Также оно должно состоять только из цифр и букв Англ. алфавита
    97.                     if (!preg_match("/^[a-zA-Z0-9]+$/", $this->post[$query_value])) {
    98.                         $this->err[$query_value] = 2;
    99.                     }
    100.                     else {
    101.                         // Если всё хорошо идём дальше
    102.                         // Нам нужно перед добавлением данных в массив
    103.                         // проверить идентичность данных с поля confirm
    104.                         if($this->post[$confirm] == $this->post[$query_value]) {
    105.                             // Если они равны тогда всё хорошо, то вернём пароль
    106.                             return $this->post[$query_value];
    107.                         }
    108.                         else {
    109.                             $this->err[$confirm] = 2;
    110.                         }
    111.  
    112.                     }
    113.                 }
    114.                 // вернём пустые данные если мы вышли из условия;
    115.                 return '';
    116.             }
    117.             else {
    118.                 //Если поля не существует то заполним массив ошибок двоечкой
    119.                 // Также используем здесь для ключа сам name поля
    120.                 $this->err[$query_value] = 2;
    121.             }
    122.         }
    123.         private function _is_pre($key_value, $query_value, $error_value) {
    124.             if($query_value == 'telephone') {
    125.                 // Добавим особую проверку если это телефон
    126.                 if (!preg_match("/((8|\+7)-?)?\(?\d{3,5}\)?-?\d{1}-?\d{1}-?\d{1}-?\d{1}-?\d{1}((-?\d{1})?-?\d{1})?/", $this->post[$query_value])) {
    127.                     $this->err[$error_value] = 2;
    128.                 }
    129.                 else {
    130.                     $this->user[$key_value] = $this->post[$query_value];
    131.                 }
    132.  
    133.             }
    134.             else if($query_value == 'email') {
    135.                 // Добавим особую проверку если это поле email
    136.                 if (!filter_var($this->post[$query_value], FILTER_VALIDATE_EMAIL)) {
    137.                     $this->err[$error_value] = 2;
    138.                 }
    139.                 else {
    140.                     $this->user[$key_value] = $this->post[$query_value];
    141.                 }
    142.  
    143.             }
    144.             else if(!empty($this->post[$query_value])){
    145.                 // И просто проверка для остальных текстовых полей
    146.                 $this->user[$key_value] = $this->post[$query_value];
    147.             }
    148.             else {
    149.                 $this->err[$error_value] = 2;
    150.             }
    151.         }
    152.     }
    153.  
    154.        
     
    #1 askanim, 17 окт 2016
    Последнее редактирование: 17 окт 2016
  2. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    Мож кому пригодится...
    Правда там местами написано ложим, а надо кладём... Ну не чё страшного надеюсь =_=
     
  3. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    И правда чё то я забыл про проверку наличия пользователей в системе ;D
    Торопилса сильна... :D
     
  4. Васяня

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

    С нами с:
    2 окт 2016
    Сообщения:
    238
    Симпатии:
    32
    Адрес:
    Россия, Приморский край, г. Находка.
    А что делает метод _is_pre? Что возвращает? И собственно где комментарии?

    Откуда юзается System\Http\Model\Model? Может из какого-то фрэймворка?

    А где объявляется функция password_hash или это стандартная?
     
  5. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    это функция php для хеширования.

    нет это моя собственная библиотека. В данном случае это подключение dao pattern. Там идёт оболчка работы с базой данных. За место неё можешь заюзать, либо mysqli или же pdo.

    Там всё в комментариях. Даже слишком много я бы сказал комментариев. Там всё написано.
    --- Добавлено ---
    @Васяня здесь не хватает только проверки наличия существующих пользователей в базе по e-mail и телефону. Потому что эти поля уникальны.
    --- Добавлено ---
    Разве не понятно ?
    --- Добавлено ---
    Но я уже слегка переделал её... Доработал до того, что мне надо...
    --- Добавлено ---
    Там не isset, а !empty у меня ну да ладно. Это был первый блин комом. Просто скинул ожидал комминтариев типо гавно, ну и разворота ответа почему... Но никто не чего не сказал =(

    Получилось бы как рефакторинг... А то писать кучи строк кода подряд... Начинает потихоньку голова гудеть и не видишь всех ошибок пока всё не отдебажишь...
     
    #5 askanim, 17 окт 2016
    Последнее редактирование: 17 окт 2016
  6. Васяня

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

    С нами с:
    2 окт 2016
    Сообщения:
    238
    Симпатии:
    32
    Адрес:
    Россия, Приморский край, г. Находка.
    @askanim _is_pre это валидатор что ли? Получше бы что нибудь придумал бы для своего движка, я думаю в будущем понадобиться проверять запросы. Наверное не в прикол будет всё время писать новую функцию _is_pre для каждой обработки формы. Вынести лучше в отдельный класс.
     
  7. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    @Васяня Это не для движка, это просто так. Форма. У меня нет никакого движка. Я забил на него, я просто пишу на php и периодически пополняю свою библиотеку нужными мне функциями. Я так же юзаю другие библиотеки иногда.
    framework по моему мнению это бред. Если уже и юзать то рабочий двиг. Либо взять и написать всё самому.
    Есть задачи под которые не заточена конкретная функция, а изворачиваться и писать кучу говна... Не.. Я лучше напишу пару лишних строк тип, но работать будет быстрее.
    Я хочу написать движок для сбора mvc. Простого и удобного.
    Но пока я далёк от идеала, поэтому я пока просто работаю.
    --- Добавлено ---
    @Васяня у меня всегда разная _is_pre в разных объектах.
    Потому что делает разные вещи. Суть одна но делает разное.
     
  8. Васяня

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

    С нами с:
    2 окт 2016
    Сообщения:
    238
    Симпатии:
    32
    Адрес:
    Россия, Приморский край, г. Находка.
    А я лучше на хостинге php7 поставлю и redis для кэширования, и не буду из вращаться в погоне за байтами.

    Я вообще считаю что написание велосипедов это полезно только в целях обучения и то после того как посмотрел на сторонную реализацию дабы не городить огород.
     
    romach нравится это.
  9. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    Ты о чём?
    Я сказал на чистом php. Берёшь паттерн mvc и единую точку входа за основу и пишешь. Да может быть дольше, чем на фреймворк, но зато ты каждый дюйм программы контроллируешь. Потому что ты знаешь, что ты написал.
    --- Добавлено ---
    @Васяня не поймёшь наверное. Посмотри статистику сколько людей использует пых без framework. И она порядочная.
     
  10. Васяня

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

    С нами с:
    2 окт 2016
    Сообщения:
    238
    Симпатии:
    32
    Адрес:
    Россия, Приморский край, г. Находка.
    А как быть с поддержкой кода?
     
  11. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    @Васяня свои проекты сам и поддерживаешь. Отсюда прибыль и деньги.
    --- Добавлено ---
    @Васяня да и как бы если ты не гавнокодишь, то нормальный программист, сможет после код поддерживать.
     
  12. Васяня

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

    С нами с:
    2 окт 2016
    Сообщения:
    238
    Симпатии:
    32
    Адрес:
    Россия, Приморский край, г. Находка.
    А ты хитрый
     
  13. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    Бизнес, всегда хитрый.
    Но если на то дело пошло на ларе можно нагавнокодить так, что не один программист поддерживать это не будет...
    И скажет переписать, заново если только.
     
  14. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Нет. Нормальный таки пошлет лесом, потому как кроме бизнес-логики проекта ему придется разбираться ещё и в самописных реализациях давно придуманных вещей. И отлавливать там хитрые, лишь одному автору понятные баги.
     
    Васяня нравится это.
  15. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    @romach если там не гавнокод, то там всё нормально будет, а не гавно код подрузумевает, что всё чудно работает везде всё помечено комментариями ит.д разве нет? Мне например приятно смотреть в чистенький комментированный php код на стандарте четвёртом... Для меня всё становится ясненько. Вот если конечно там дикий ужс, то туда без слёз не заглянешь.
    --- Добавлено ---
    @romach интересно госпади а на ларе будет не так : D ? Не смешите)
    Model View Controller у всех один принцип, и стандарт четвёртый, остальное это уже накрученные библиотеки.
     
  16. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    будет полная документация?
     
  17. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    @denis01 к чему ? К проекту за три копейки?
    Если заплатят сделаю документацию. Если нет, то простите. У вас работает - работает.. Хорошо работает? Да хорошо работает всё супер. Какие вопросы?) Программисту если хорошо заплатят он разглядит то, что даже автор ввиду не имел.
    Я представляю что вполне себе представляю что там навояет программер на ларе за 30к в месяц допустим.
    А если программисту предложат 100к. Он и в гавнокоде поковыряется и поправит если надо будет. Вот вам и все дела...
    На mvc логика проследуется, да это время. Я вот мучаюсь со своим кодом, который написал три месяца назад. И даже если бы я писал на чёртовой ларе, я бы вообще плюнул и заного написал.
     
  18. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    И не без разницы тебе, какой текст в хеш передавать, из английского алфавита или из арабского?
    --- Добавлено ---
    Или вообще не из алфавита. Вот такой, к примеру
    Код (Text):
    1. hv&RIo@vPU!yUi6ql#frS5pmu3tR9
     
  19. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Какое ещё к MVC? Далеко не все в этом мире должно плеваться страничками. Вот нужно мне к примеру сделать так, что бы изменения в БД синхронизировались с индексами в каком-нибудь elastic или скажем отправлять почту не через smtp, а через api какого-нибудь сервиса или наоборот, принимать её, ибо много и дохрена или ещё что-то в этом духе. Я не хочу разбираться при этом в потрохах очередной самописи пытаясь понять из скольки десятков мест в коде оно происходит. Хотя бы потому что это бессмысленная и тупая война с кодом, которой просто не должно быть и которая не принесет реальной пользы.
     
    Васяня нравится это.
  20. Poznakomlus

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

    С нами с:
    12 сен 2014
    Сообщения:
    96
    Симпатии:
    19
    Адрес:
    Киев
    для работы с входящими данными нужны классы валидации и фильтрации в проекте 2 отдельных независимых класса
    $this->_is_pre ? isValid, validate ведь так понятнее
     
    Васяня нравится это.
  21. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    @romach не поддержу в этом вопросе я ярый фанат mvc и psr-4
    @mkramer не понял тебя... У меня с пасом всё просто проходит только если англ буквы или же они цифры или же то или другое... В чём вопрос при чём тут без разницы?
    Наверно вы имеете ввиду методы?
    Тогда скажу так для меня pre - это prepare ( что в переводе с англ. Подготовка), чтобы не писать длинное имя функции я сократил и как видите там не просто валидация, там в конце ещё всё кладётся в массив данных для запроса к бд. Так что называть это валидацией не совсем точно.
     
  22. Poznakomlus

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

    С нами с:
    12 сен 2014
    Сообщения:
    96
    Симпатии:
    19
    Адрес:
    Киев
    это называется экономия на спичках
    это называется говнокод
    я пишу так как думаю,
    может класс User так все нормальные люди пишут. Вам нужно потренироваться называть переменные, чтоб другим понятно было.
    что такой метод в модели делает? я бы вас понял если бы он в контроллере был
    как strlen работает с кириллицей?
    а ведь это только начало :)
     
  23. Васяня

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

    С нами с:
    2 окт 2016
    Сообщения:
    238
    Симпатии:
    32
    Адрес:
    Россия, Приморский край, г. Находка.
    Согласен, для того что бы узнать http метод, автор юзай массив $_SERVER.

    Ну так и пиши.
    --- Добавлено ---
    А почему пользователи добавляются get методом?
    --- Добавлено ---
    Мне кажется что модель должна работать с базой. Ты концепцию MVC не соблюдаешь.
     
  24. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Какая связь между MVC и PSR-4, когда одно - шаблон проектирования, а другое - набор рекомендаций к коду?

    Более того, только с хранилищем данных. Модель не должна регистрировать, валидировать или выполнять ещё какие-либо действия не связанные напрямую с хранением, выборкой и изменением данных. Собственно, валидация - это задача контроллера, а бизнес-логика работы с юзером по хорошему должна лежать в сервисном слое, правда я хз, как нынче это принято обзывать ))
     
    Васяня нравится это.
  25. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    Да в теории так. Но у себя в движке я сделал по другому. У меня контроллер служит только для связи вьюшки и моделей. При чём система такая в контроллере собираются массивы которые получены в моделе, а после отправляются во вью где они разбираются и выводятся.
    --- Добавлено ---
    Вообще тебя не понял... Какой то бред написал, в данной строке....