GET-параметры - это данные, которые передаются в строке запроса после знака вопроса; каждый параметр типа ключ/значение разделяется амперсандом, например:
https://web-development-school.ru/index.php?option=com_abcde&task=rec
В данном примере после "?" следуют два параметра:
- option=com_abcde
- task=rec
Любой из этих параметров можно получить в скрипте при помощи функции JRequest::getVar():
$task = JRequest::getVar('task');
Однако не всё так просто! Проблема в том, что таким простым способом можно легко передать любые, в том числе и вредоносные данные; соответственно, все полученные данные следует обязательно проверять и фильтровать.
Рассмотрим пример такого фильтра.
Задача: получить для дальнейшей работы значение параметра number, который указывает номер страницы и может содержать только цифры.
1 $num = JRequest::getVar('number');
2 $number = mb_eregi_replace('[^0-9]', '', (int)$num);
3 if (is_int((int)$number)) {
4 if ($number == 0) {
5 echo 'Ошибка в запросе! (номер страницы = 0)';
6 exit;
7 }
8 } else {
9 echo 'Ошибка в запросе! (Номер материала содержит неверные данные)';
10 exit;
11 }
12 if ($number == NULL) {
13 echo 'Ошибка в запросе! (Не передан номер материала)';
14 exit;
15 } else {ОСНОВНОЙ КОД
* }
Рассмотрим всё построчно.
В строке 1 переменная $num получает значение параметра number, переданного методом GET.
В строке 2 переменная $num при помощи (int) преобразуется в число, после чего функция mb_eregi_replace отбрасывает все символы, кроме цифр от 0 до 9 и присваивает полученное значение переменной $number. Здесь важно понимать, что числа могут указываться в различных форматах, поэтому в строке применяется двойная система фильтрации.
В строке 3 управляющая конструкция if проверяет, является ли тип переменной $number целым числом. Если является, то в строках 4-7 проверяется, не равно ли значение этой переменной нулю: если равно, то выводится сообщение об ошибке (строка 5) и выполнение скрипта останавливается (строка 6).
Если же тп переменной $number не является целым числом (строка 8), то так же выводится сообщение об ошибке (строка 9) и выполнение кода прекращается (строка 10).
В строке 12 проверяется, не является ли значение $number переменной NULL: если является - вывод сообщения и остановка выполнения скрипта, если переменная является целым числом - выполняется весь дальнейший код страницы.
