Ввод данных и их проверка
1. Фильтрация и проверка введенных пользователем данных
Для разработчика на PHP часто встает задача получения данных от пользователя получаемых через GET/POST запросы или из Cookie. Использование встроенных переменных $_GET, $_POST, $_COOKIE (и т.п.) на прямую, без какой либо фильтрации данных не безопасно и может привести к проблемам отображения страниц, потере данных и даже взлому системы. Именно поэтому внутри Cotonti везде используется специальная функция cot_import():
function cot_import($name, $source, $filter, $maxlen = 0, $dieonerror = false, $buffer = false)
Параметры функции:
- $name - имя поля ввода данных в HTML форме.
- $source - источник данных. Допустимые значения:
- 'G' или 'GET' - для GET запросов;
- 'P' или 'POST' - для POST данных;
- 'C' или 'COOKIE' - для получения данных из cookie;
- 'R' или 'REQUEST' - для импорта из PHP переменной $_REQUEST;
- 'D' или 'DIRECT' - используется для фильтрации данных переданных в параметре $name;
- 'PUT' - для импорта данных из HTTP PUT запроса (для REST сервисов);
- 'DELETE' - для импорта данных из HTTP DELETE запроса (для REST);
- 'PATCH' - для импорта данных из HTTP PATCH запроса (для REST).
- $filter - имя фильтра, который будет использован для проверки данных. Доступные (встроенные) фильтры:
- 'ALP' - фильтрует (удаляет) все символы, кроме символов латинского алфавита, цифр, дефиса и символа подчеркивания. Полезно использовать для ввода различных идентификаторов;
- 'ARR' - импортирует данные как массив. Значения всех элементов массива должны быть дополнительно отфильтрованы разработчиком;
- 'BOL' - импорт данных типа boolean, или чекбоксов. Возвращает TRUE, если чекбокс (флажок) выбран или получено значение 'on' или 1, FALSE если чекбокс не выбран или значение равно нулю, строке 'off'. Возвращает NULL в остальных случаях;
- 'HTM' - пропускает любой текст обрезая ведущие и закрывающие пробелы, любые HTML теги и код будет оставлен без изменений;
- 'INT' - пропускает только целые числовые значения, возвращает данные типа PHP (int). Возвращает NULL, если данне не являются целым числом;
- 'NOC' - фильтр-пустышка (no check), пропускает любые данные без изменений;
- 'NUM' - пропускает только числовые значения, возвращая переменную типа PHP (float) или NULL, если проверка не прошла;
- 'PSW' - специальный фильтр для ввода паролей, удаляет символы кавычки, символы
&
, <
, >
и ограничивает строку до 32 знаков;
- 'TXT' - фильтр пропускает обычный текст, но фильтрует HTML код, путем замены части спец символов на их текстовые представления;
$maxlen
- задает максимальный размер импортируемых данных, 0 означает без ограничений;
$dieonerror
- указывает скрипту остановить выполнение если импортируемые данные не прошли фильтр;
$buffer
- включает использование буфера данных, который используется в API форм (Form API).
Таким образом, возвращаемое значение это фильтрованные данные или NULL в случае, если данные не прошли фильтр и пользователь должен ввести их повторно. Приведем несколько примеров:
$title = cot_import('title', 'P', 'TXT');
$code = cot_import('code', 'P', 'ALP');
$count = cot_import('count', 'P', 'INT');
$text = cot_import('text', 'P', 'HTM');
$notify = cot_import('notify', 'P', 'BOL');