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

Сделать код лучше

03.02.2019, 18:19. Показов 550. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Написал класс для работы с базой данных. Все работает, но это мой первый класс думаю можно сократить или сделать более читабельным. Нужна помощь и советы по улучшению:
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
            class to_base
            {
                protected $table;
                protected $r;
                protected $where;
 
                public function table($table)
                {
                    $this->table = $table;
                }
 
                public function cols(...$col)
                {
                    $r = [];
                    foreach ($col as $c) {
                        $r[] = $c;
                    }
                    $this->r = $r;
                }
 
                public function where($val)
                {
                    $this->where = $val;
                }
                public function add(...$val)
                {
                        global $db;
                        $val = implode("','", $val);
                        $c = implode(",", $this->r);
                        $sql = "INSERT INTO " . $this->table . "(" . $c . ") VALUES('" . $val . "')";
                        $db->query($sql);
                        return $db;
                    }
                public function update(...$val)
                {
                    global $db;
                    $do = "";
                    foreach (array_combine($this->r, $val) as $col => $value) {
                        $do = $do . $col . "=" . "'" . $value . "'" . ",";
                    }
                    $sql = "UPDATE " . $this->table . " set " . substr($do, 0, -1) . " WHERE " . $this->where;
                    $db->query($sql);
                    return $db;
                }
 
                public function del()
                {
                    global $db;
                    $sql = "DELETE FROM " . $this->table . " WHERE " . $this->where;
                    $db->query($sql);
                    return $db;
                }
 
                public function sql($query)
                {
                    global $db;
return($db->query($query));
                }
            }
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.02.2019, 18:19
Ответы с готовыми решениями:

как лучше сделать?
Привет всем. У есть в базе около 70 категорий написанных буквами. Эти категории мне надо выводить на каждой страничке. Эти категории...

Как лучше сделать?
Задача. Подсчитать кол-во друзей. Друзья хранятся в отдельной таблице. Там лежат тупо ключи, кто добавил и кого добавил. Как лучше...

Посоветуйте как лучше сделать
Система такая, юзер переходит по ссылке(ссылка не прямая, перекидывает через сервис) на страницу(на том же сайте) где генерируется код....

8
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
03.02.2019, 18:39
Нет подготовленных запросов и экранирования => уязвимость к sql-инъекциям.

global здесь не нужен, лучше передавать $db через конструктор.

Названия таблиц и столбцов надо обрамлять обратными кавычками ``, чтобы не было проблем с названиями, совпадающими с ключевыми словами MySQL.
1
1 / 1 / 0
Регистрация: 07.01.2019
Сообщений: 11
03.02.2019, 18:48  [ТС]
Если поставить нужный уровень проверки входных данных это предотвратит инъекцию или данный класс все равно будет уязвимостью ?
0
31 / 46 / 19
Регистрация: 18.07.2018
Сообщений: 578
03.02.2019, 18:49
Jodah, ещё бы подключиться для начала и загуглить, что такое бинд
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
03.02.2019, 19:04
Цитата Сообщение от eminem_713 Посмотреть сообщение
это предотвратит инъекцию
Нет. Вернее, вы же не можете знать наверняка, зачем юзер передал кавычку в строке - потому что она там действительно должна быть или потому что он хочет совершить инъекцию.
0
1 / 1 / 0
Регистрация: 07.01.2019
Сообщений: 11
03.02.2019, 19:06  [ТС]
Цитата Сообщение от Jodah Посмотреть сообщение
Нет.
А что на счет класса он безопасен или все лучше самому писать
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
03.02.2019, 19:25
Цитата Сообщение от eminem_713 Посмотреть сообщение
А что на счет класса он безопасен
Нет, я же только что про sql-инъекции написал.
Цитата Сообщение от eminem_713 Посмотреть сообщение
или все лучше самому писать
Если писать будете также, то и уязвимость будет та же.
0
1 / 1 / 0
Регистрация: 07.01.2019
Сообщений: 11
03.02.2019, 19:30  [ТС]
Спасибо за помощь постараюсь сделать класс более безопасным.
0
51 / 38 / 13
Регистрация: 20.01.2019
Сообщений: 115
04.02.2019, 01:31
$col уже массив, foreach избыточен.
Названия нужно делать согласно PSR. Переменные класса принято задавать в конструкторе.
PHP
1
2
3
4
5
6
7
8
public function __construct($table, $where, ...$cols)
{
    $this->table = $table;
    $this->where = $where;
    $this->r = $cols;
}
 
$tb = new to_base('users', 'active=1', 'field1', 'field2');
Троеточие тоже нужно грамотно использовать, оно тут ни к чему, можно просто передать массив
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.02.2019, 01:31
Помогаю со студенческими работами здесь

Как лучше организовать код (проектирование, работа с функциями)?
По мере изучения php, написанию все больших и сложных проектов, возникает все больше вопросов по организации кода. Я решил объединить...

Где лучше хранить код отправки по email - в БД или файле?
Здравствуйте, сайт сделал мультиязычным, при отправке email html кода много, его где лучше хранить: в mySQL или файле локализации(*.php)?

Как лучше сделать авторизацию на php?
У мня стоит ПХП+APACH+MySQL как найлучше єто сделать ? заранее благодарен.

Как лучше сделать? GD или html
Здравствуйте... интересует вопрос. Есть приложение для расчета количества изделий. Одним из результатов есть визуальное (схематическое, в...

Логика условия, может можно лучше сделать
Вот часть кода: $saOutItems = array (); $aStatusGood = array (); for ($x = 0; $x < $sTotalItemsByQuery; $x++) { if...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru