Рекомендації щодо оформлення PHP коду — CRM система

  • Робочий стіл
  • Стартова сторінка Новий
  • Мобільна версія Новий
  • Мобільні програми Новий
  • Оплата НОВЕ
  • Відключення копірайту Новий
  • Техпідтримка Новий
  • Маски введення текстових полів (шаблон заповнення)
  • Система оновлення конфігурацій
  • Система повідомлень
  • Багатомовність конфігурації
  • Зміна режимів скролла вікна
  • Статистика
  • Вибір мови програми
  • Призначення іншого імені домену
  • Проксі-сервер
  • Менеджер файлів
  • Контекстне меню Новий
  • Різні приклади
  • Онлайн консультант
  • Бізнес-процеси Оновлено
  • Поштовий модуль Новий
  • Зниження навантаження на сервер
  • Гарячі клавіші Нове
  • Лого та кольори
  • Загальні налаштування Новий
  • Модуль Telegram Новий
  • Знеособлення суб'єкта Новий
  • Модуль інтеграції з vk.com Новий

Для полегшення читання коду CRM системи сторонніми програмістами, а також захисту даних від зовнішніх проникнень, в процесі написання обчислень рекомендується дотримуватися наступних стандартів у написанні коду.

Стандарт коду

Настійно рекомендується, при написанні коду слідувати загальноприйнятому стандарту PSR, зокрема за такими пунктами:

  • Усі блоки коду у фігурних дужках необхідно писати з відступами. Для відступів слід використовувати чотири пробіли (але не знак табуляції).
  • Фігурна дужка, що відкриває, у визначенні функції повинна розташовуватися на новому рядку, а фігурна дужка, що закриває, повинна розташовуватися на наступному рядку після тіла функції.
  • Відкриваюча фігурна дужка в конструкціях, що управляють, повинна розташовуватися в тому ж рядку, що і сама конструкція, афігурна дужка, що закриває, повинна розташовуватися на наступному рядку після тіла конструкції.
  • Після ключових слів у керуючих конструкціях повинен розташовуватися один пробіл, а після викликів функцій не повинен.
  • Після круглої дужки, що відкриває, і перед круглою дужкою, що закриває, в керуючих конструкціях не повинна бути пробілу.
  • У коді можна використовувати лише теги
  • Кодування php файлів має бути UTF-8 без BOM-байт.

Оформлення запитів sql

Всі прості запити рекомендується писати за допомогою таких функцій:

  • Вибірка даних із таблиці

Вибір даних з таблиці за певними параметрами здійснюється з використанням data_select, приклад:

Зокрема, перший параметр - ім'я таблиці, далі йдуть умови вибірки.

Важливо: Між "`id`=" і $line_id в даному випадку стоїть кома.

Кожен непарний параметр вважається змінним і буде оброблений. Наприклад, $line_id буде застосовано floatval. Якщо змінна $line_id обрамляється одинарними лапками, вважається, що це рядкова змінна, і до неї буде застосовано addslashes. Приклад вибірки при використанні рядка в умові:

У разі використання вибірки in з числовими значеннями, можна використовувати конструкцію зі дужками замість одинарних лапок. У цьому випадку параметр розглядається як масив чисел. Приклад вибірки при використанні IN:

  • Вибірка даних із певного поля таблиці

Якщо необхідно вибрати лише певні поля таблиці, а не весь рядок, слід використовувати функцію:

Функція відрізняється від першого прикладу тим, що другим параметром ви можете вказати, які саме поля ви вибираєте з таблиці.

Досить часто буває необхідно вибрати відразу весь рядок з таблиці масив, без використання циклу (while). У цьому випадку можна використовувати функцію:

У цьому випадку буде раховано лише 1 рядок з бази даних, якщо потрібно вважати весь масив, можна використовувати функцію наступним чином:

Режимом зчитування всіх рядків слід користуватися обережно, тільки якщо ви впевнені, що кількість рядків у вибірці буде мало. Інакше слід скористатися стандартним циклом while та функцією sql_fetch_assoc.

  • Вставка даних у таблицю

Вставка даних у таблицю здійснюється з використанням функції:

Ця функція має лише два параметри: ім'я таблиці та масив полів і значень, які будуть вставлені в таблицю. Якщо при вставці рядка в таблицю необхідно спрацювання обчислень необхідно використовувати параметр 'EVENTS_ENABLE'. Наприклад:

Також при використанні прапора 'EVENTS_ENABLE' відбувається встановлення полів значень за замовчуванням.

  • Зміна даних у рядку

Зміна даних у рядку здійснюється за допомогою функції:

Ця функція є середнім між наведеними раніше функціями вставки даних у таблицю та вибіркою даних у таблиці (sql_insert та sql_select відповідно). Так, другий параметр – це масив полів, який потрібно змінити. Далі йдуть умови, в яких саме рядках необхідно змінити. Якщо при зміні рядків у таблиці, необхідно спрацювання обчислень необхідно використовувати параметр 'EVENTS_ENABLE'. Наприклад:

  • Видалення рядків

Видалення рядків здійснюється за допомогою функції:

Якщо видалення рядків у таблиці, необхідно спрацювання обчисленьнеобхідно використовувати параметр 'EVENTS_ENABLE' аналогічно до перерахованих вище функцій. Увага, на відміну від перерахованих вище функцій, при роботі з діапазоном рядків, параметр 'EVENTS_ENABLE' сильно знижує швидкодію програми.

  • Загальний опис

Усі перелічені функції мають аналоги з приставкою sql, наприклад sql_select(TABLE_FIELDS, "`id`=",$field_id). Перший параметр даних функцій не id таблиці, а ім'я. У разі неуспішного запиту функції завершують роботу з виведенням повідомлення на екран. Розширене повідомлення про помилку sql виводиться тільки користувачам з правами адміністратора. Якщо потрібно не завершувати роботу скрипту при помилці синтаксису, слід використовувати конструкцію з символом @, наприклад @sql_select, в цьому випадку функція поверне false.

Важливо: Для виведення запиту, сформованого функціями sql_select і т.п. Необхідно встановити глобальної змінної $show_sql_request значення '1'.

Важливо: Не слід використовувати українські імена як найменування полів тощо. український текст повинен бути присутнім лише як дані в запиті.

Важливо: Найменування полів слід укладати в апострофи.

Важливо: Замість функції mysql_query слід використовувати sql_query, замість mysql_fetch_array використовувати sql_fetch_assoc і т.д.

У разі непростих запитів, запит попередньо формується у рядок:

Складні запити можна розбивати кілька рядків, як це зроблено вище. Рекомендовано не використовувати функцію sql_query, а розбивати її на кілька функцій типу sql_select.

Важливо: У разі використання sql_query ваші дані не фільтруються. Для захисту від SQL-ін'єкцій про це необхідно подбати самостійно. Усеможливі НЕчислові дані повинні йти з функцією addslashes. Вхідні числові параметри повинні бути приведені до або за допомогою intval(), або використовуючи floatval();

Безпека коду

Введення даних

Усі вхідні дані $_REQUEST, $_GET, $_POST, $_FILES, $_COOKIE тощо повинні фільтруватися. Якщо у обчисленні очікується введення певного типу даних, повинні бути введені дані саме цього типу.

Введення числових параметрів:

Рядки – найскладніший вид фільтрації. При введенні в скрипт, рядок повинен проходити очищення від лапок, що примусово розставляються (у разі використання magic_quotes), за допомогою функції form_input.

У разі використання рядкового значення функції sql_query, обов'язково екранувати значення за допомогою addslashes.

Робота з рядковими значеннями

При роботі з рядками часто виникає помилка при порівнянні з числовими значеннями, наприклад, при роботі наступного коду буде виведено '1234':

У зв'язку з чим, під час роботи з рядками слід використовувати умову ===.

Робота з числовими значеннями

При перевірці числового значення на 0, необхідно явно перевіряти значення з 0. Наприклад, під час роботи наступного коду буде виведено '0.0':

Введення даних та зміна даних

Всі зміни даних, а також введення нових повинні бути захищені від атак типу CSRF. Введення даних, зміна, створення, видалення будь-якого, будь-яка дія, що призводять до зміни стану, має відправлятися за допомогою методу POST. У разі використання форм введення слід використовувати в шаблоні Smarty: . Якщо дія здійснюється за посиланням, до посилання необхідно додати клас: class='href_post'. Якщо в посилання є свій обробник onclick, слідвикористовувати змінну href_post для запобігання відправленню форми.

Так виглядає форма введення логіну та паролю із захистом від CSRF атак:

Виведення значень

При виведенні значень застосовується функція form_display для всіх можливих рядкових значень.

Для виведення числових значень потрібно використовувати функцію form_local_number.

Для виведення дат необхідно використати функцію form_local_time.

Використання зворотних посилань

У разі використання механізму зворотних посилань у формах слід передавати значення back_url використовуючи input type hidden.