Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 28.07.2016
Сообщений: 2

Нужна критика :)

28.07.2016, 23:26. Показов 654. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет!
Дело такое, изучаю php, сравнительно недавно. Начал писать скрипт регистрации на сайт и вот хочу услышать критику по коду. Где что не так, может где то недопустимо так делать как я делаю

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
<?php
 
   class RegLog{
       
       protected $loginReg;
       protected $passReg;
       protected $passRegRepeat;
       protected $mailReg;
       
       public function __construct($loginReg,$passReg,$passRegRepeat,$mailReg){
           $this->loginReg = $loginReg;
           $this->passReg = $passReg;
           $this->passRegRepeat = $passRegRepeat;
           $this->mailReg = $mailReg;
           $this->loginReg=$this->removeTag($this->loginReg);
           $this->passReg=$this->removeTag($this->passReg);
           $this->cheking();
           if($this->cheking()){
               $this->db();
           }
           
       }
       protected function removeTag($value){
           $res = trim($value);
           $res = stripslashes($value);
           $res = strip_tags($value);
           $res = htmlspecialchars($value);
           return $res;
       }
       
       public function cheking(){
           if(empty($this->loginReg) or strlen($this->loginReg)<=3)
           {
               throw new Exception("Логин должен состоять из миним 4-ех символов");
           }elseif(empty($this->passReg) or strlen($this->passReg)<=3){
               throw new Exception("Пароль должен состоять из миним 4-ех символов");
           }elseif($this->passReg != $this->passRegRepeat){
               throw new Exception("Пароли не совпадают");
           }else{
               return true;
           }
       }
       
       protected function db(){
           require_once('./core/config.php');
           require_once('./core/db/db.php');
           $dateReg = date(Y.m.j);
           $ipReg = $_SERVER['REMOTE_ADDR'];
           $permission = 'user';
           $db = new db(DBhost,DBlogin,DBpass,DBname,DBport);
           $regSelDb = "SELECT `id` FROM `users` WHERE `login` = '$this->loginReg'";
           $regInsDb = "INSERT INTO `users` (`login`,`password`,`mail`,`ip`,`datereg`) VALUES ('$this->loginReg','$this->passReg','$this->mailReg','$ipReg','$dateReg')";
           $db->queryDb($regSelDb);
           if($db->numRows() > 0){
               throw new Exception ('Данный логин зарегестрирован');
           }else{
               $db->queryDb($regInsDb);
           }
       }
   }
   
   class Login extends RegLog{
       
   }
жду ваших Буууаа... )
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.07.2016, 23:26
Ответы с готовыми решениями:

Нужна критика скрипта
Здравствуйте, недавно начал изучать php. В качестве учебника выбрал Самоучитель PHP 5/6 от Максима Кузнецова и собственно справку. ...

Нужна критика по готовому и рабочему скрипту PHP
Дайте здоровую критику по скрипту. Задача скрипта: на основе загружаемого файла с фамилиями и именами формирует csv с логинами, паролями...

Поиск, критика привествуется
$what=$_GET; $where=$_GET; $links=0; if (($what!=&quot;&quot;)&amp;($where!=&quot;&quot;)) { mysql_connect(&quot;localhost&quot;, &quot;admin&quot;, &quot;307a344site&quot;); ...

5
 Аватар для php10
146 / 105 / 44
Регистрация: 30.04.2016
Сообщений: 550
28.07.2016, 23:31
Для начала неплохо. Сразу читайте про PSR, а именно про оформление кода. Уже пора избавляться от require там, где не нужно, а реализовывать загрузчик и использовать namespace.
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
28.07.2016, 23:52
А после полного изучения основ переходит к паттернам проектирования
0
0 / 0 / 0
Регистрация: 28.07.2016
Сообщений: 2
29.07.2016, 00:00  [ТС]
Все понятно) спасибо!
0
 Аватар для php10
146 / 105 / 44
Регистрация: 30.04.2016
Сообщений: 550
29.07.2016, 00:10
Vampqwe, и да, забыл самое главное. Книги!
https://www.ozon.ru/context/detail/id/33506422/ - киллер книга, сам если честно так и не осилил ее, потому что банально не хватает времени, а читать нужно очень вдумчиво.
Второе - официальная дока.
Третье - SOLID
Четвертое - PSR

Судя по вашему коду, у меня есть вопросы относительно работы с базой данных. Вы используете обертку над MySQLi?
Дело в том, что mysql (без i) уже использовать не рекомендуется, а если выбирать между MySQLi и PDO, выбирайте сразу PDO. Он используется во всех крупных фреймворках, например в Yii2.

Не подставляйте переменные сразу в SQL запрос, таким образом вы избежите неприятности в виде SQL-Injection. Статья:
https://habrahabr.ru/post/137664/

Затем у меня есть вопросы по поводу функции checking();
Возьмите за правило, что функция должна возвращать только один тип значения, в крайнем случае (что распространено) это должно быть null.

По логике, функция checking должна возвращать true или false, вы же выбрасываете исключение, что не совсем корректно. Обработать ошибки можно методом getErrors(), который вернет массив ошибок. Т.е. проверку ввода я бы вынес в отдельный класс, который назвал бы RegValidation.php, вот его примерный интерфейс:

PHP
1
2
3
4
5
6
interface RegValidation
{
     public function validate();
     public function addError($propertyName, $text);
     public function getErrors();
}

Далее вопросы относительно функции db()

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

Вы при каждом вызове делаете соединение с базой данных. Сделайте класс Connection, в котором будет храниться соединение с базой данных и используйте его во всех местах, где нужно, не надо делать 10 соединений, так как на хостингах они ограничены.

И последнее.
Один класс == одно действие.
Класс User должен отвечать за данные пользователя, класс UserBalance за баланс пользователя (как пример) и так далее.
У вас не ясно, какая основная направленность класса. Из названия класса уже должно быть понятно, что это. Класс Request отвечает за запросы от пользователя (POST | GET), но никак не за ответ от сервера. А за что отвечает класс RegLog? Наверное за логгирование регистраций пользователя.

И в конце добавлю - читайте исходные коды фреймворков, как обычную книгу. Их умные дядьки писали, у них есть чему поучиться.

-----
Вроде бы все. Написал сумбурно, все выше мое мнение и мой опыт, а также опыт и мнения более опытных людей.
0
79 / 48 / 22
Регистрация: 30.06.2016
Сообщений: 187
29.07.2016, 00:40
просто рак мозга.
этого класса вообще не должно быть. должен быть класс пользователь.
класс логин зачем от него наследуется? конструктор придется перезагружать, общих методов не будет, общего между ними ничего
зачем он?


что, в каждом методе, который использует БД, будете плодить объекты для работы с базой?
strlen сулит проблемы с кодировкой > mb_strlen
$_SERVER['REMOTE_ADDR'] - ваш сайт взломают.
не вижу экранирования в sql - ваш сайт взломают.
trim делают после strip_tags
strip_tags делают чтобы вырезать теги. но вы же после этого делаете htmlspecialchars,
теги все равно не будут обработаны на выводе, зачем тогда strip_tags?
запретите тогда ненужные символы в логине, если хотите чтобы не писали билебирду в логинах
функция date принимает на вход первым параметрам строку. Вот ваш коллега объявит константу "Y" и у Вас глаза на лоб вылезут.

PHP
1
$this->cheking()
зачем вы его два раза вызываете мне тоже не понятно. переделайте в
PHP
1
2
3
4
 is_valid ?
   make action
 else
   throw expt
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.07.2016, 00:40
Помогаю со студенческими работами здесь

Критика видеокурсов по PHP+MySQL
Вот открыл и начал проходить курс по созданию интернет магазина на PHP &amp; MySQL. Автор Дмитрий Валак. Что то не сошлось у меня в коде или...

Требуется критика по коду
Приветствую! Я недавно начал заниматься фрилансом, пока что были заказы по HTML + CSS, JS, но теперь я хочу писать PHP-код на заказ. И я...

Нужна критика
Сделал прогу для детей она еще не закончена посоветуйте что здесь лишнее а что можно добавить (Например как вставить картинки чтобы их...

Нужна критика
http://payk.org/ - какие основные ошибки оптимизации, дизайна и т.д?...знаю чтоб внешних много...через недельку всё уберу. ...

Нужна критика
Здравствуйте! Проанализируйте сайт с точки зрения оптимизации! Сайт: www.fashion-tissues.ру Спасибо!


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Номеклатура. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru