Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP для начинающих
Войти
Регистрация
Восстановить пароль
 
Vampqwe
0 / 0 / 0
Регистрация: 28.07.2016
Сообщений: 2
#1

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

28.07.2016, 23:26. Просмотров 221. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.07.2016, 23:26
Ответы с готовыми решениями:

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

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

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

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

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

5
php10
143 / 104 / 42
Регистрация: 30.04.2016
Сообщений: 544
28.07.2016, 23:31 #2
Для начала неплохо. Сразу читайте про PSR, а именно про оформление кода. Уже пора избавляться от require там, где не нужно, а реализовывать загрузчик и использовать namespace.
0
Jewbacabra
Эксперт PHP
3366 / 2807 / 1265
Регистрация: 24.04.2014
Сообщений: 8,503
28.07.2016, 23:52 #3
А после полного изучения основ переходит к паттернам проектирования
0
Vampqwe
0 / 0 / 0
Регистрация: 28.07.2016
Сообщений: 2
29.07.2016, 00:00  [ТС] #4
Все понятно) спасибо!
0
php10
143 / 104 / 42
Регистрация: 30.04.2016
Сообщений: 544
29.07.2016, 00:10 #5
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
sadn3r
35 / 35 / 17
Регистрация: 30.06.2016
Сообщений: 129
29.07.2016, 00:40 #6
просто рак мозга.
этого класса вообще не должно быть. должен быть класс пользователь.
класс логин зачем от него наследуется? конструктор придется перезагружать, общих методов не будет, общего между ними ничего
зачем он?


что, в каждом методе, который использует БД, будете плодить объекты для работы с базой?
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
29.07.2016, 00:40
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.07.2016, 00:40

Нужна критика
собственно хотелось бы узнать насколько граматно написано и можно ли что нить...

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

Нужна критика
Добрый день, сразу скажу что критику на счет дизайна можете оставить при себе...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru