Получение данных о пользователе

Получение данных из списка

Получение текста и проверка на безопасность

Получение данных о дате и времени

Присвоение статуса сообщению

Обработка полученных файлов

 

У обработчика формы есть три основные задачи:

  • получить данные из массива и проверить их на безопасность;
  • произвести с данными какие-либо действия;
  • вывести результат (при помощи файла шаблона).

В этой главе рассматривается первая задача - получение данных и проверка безопасности (фильтрация).

 

Получение данных о пользователе

  35    // ОБРАБОТКА ПОЛУЧЕННЫХ ДАННЫХ И СОЗДАНИЕ ПЕРЕМЕННЫХ
  36    $h_cook_user = JFactory::getUser(); 
  37    if (!($h_cook_user->guest)) {
  38         $name = $h_cook_user->username;
  39         $eml = $h_cook_user->email;
  40    }

Метод JFactory::getUser() позволяет получить так называемый объект пользователя, содержащий все необходимые данные, после чего эти данные можно вывести (получить). В строке 36 переменная $h_cook_user получает объект пользователя, отправившего сообщение.

Далее в строке 37 происходит проверка: является ли пользователь гостем или нет? Если $h_cook_user->guest выдаст TRUE (пользователь является гостем), то ! поменяет это значение на противоположное, т.е. на FALSE, и соответственно, строки 38-39 выполнены не будут. В принципе, такой вариант практически не возможен, так как сама форма открывается только зарегистрированным пользователям. Если пользователь не гость, выполняются строки 38 и 39, в результате чего переменной $name будет присвоено имя пользователя, а переменной $eml - его адрес электронной почты.

 

Получение данных из списка

  41    $type_mess = $_POST['t-dish']

Переменной $type_mess присваивается значение из списка, выбранное пользователем.

 

Получение текста и проверка на безопасность

 Любой полученный текст должен обязательно проходить фильтрацию и проверку на безопасность.

Для чего это нужно?

В полученным тексте может содержаться какой-либо вредоносный код, который может наделать много различных проблем. Это могут быть различные нарушения в работе сайта, получение доступа к базе данных, данным пользователей и многое, многое другое. Поэтому любой полученный текст должен обязательно тут же пропускаться через специальные фильтры, удаляющие из текста отдельные слова и символы.

  42    $text_mess2 = $_POST['mess_text'];
  43    $text_mess1 = mb_eregi_replace('(</script>)|(<script>)|(</div>)|(<div>)|(</p>)|(<p>)|(\<\?php)|(\?\>)|  (value)|(echo)', '', $text_mess2);  
  44    $text_mess = mb_eregi_replace('[\{\}\$]', '', $text_mess1);

В строке 42 переменная $text_mess2 принимает из $_POST['mess_text'] текст сообщения, написанного пользователем. В строке 43 функция mb_eregi_replace сканирует текст, содержащийся в переменной $text_mess2, для поиска совпадений со словами, тегами и символами, указанными в регулярном выражении

'(</script>)|(<script>)|(</div>)|(<div>)|(</p>)|(<p>)|(\<\?php)|(\?\>)|  (value)|(echo)'

и в случае обнаружения совпадений заменяет этот символ (слово, тег) на пустое значение, т.е. проще говоря, удаляет его. Полученный в результате отфильтрованный текст присваивается переменной $text_mess1

В строке 44 функция mb_eregi_replace делает тоже самое со скобками и символом $.

Теперь текст очищен от слов, тегов и символов, которые могут быть использованы для написания вредоносного кода. Так же сюда можно включить любые другие слова и символы, которые нежелательны для использования на вашем сайте.

 

Получение данных о дате и времени

  45    $date_mess = date('Y-m-d');     // Дата создания обращения
  46    $time_mess = date('H:i:s');      // Время создания обращения

Переменные $date_mess и $time_mess получают данные при помощи функций PHP date('d.m.Y') и date('H:i:s') соответственно.

 

Присвоение статуса сообщению

  47    $status_mess = '1';      // Статус обращения (1 - новое)

Вновь поступившему сообщению присваивается статус 1 ("Новое").

 

Получение IP пользователя

  48    $ip_client = $_SERVER['REMOTE_ADDR']; // IP пользователя

 IP автора получается из массива переменной  $_SERVER (индекс 'REMOTE_ADDR'). 

 

Обработка полученных файлов

Любые полученные файлы должны быть так же в первую очередь проверены на безопасность.  

  49    // УСТАНОВКА ФОТО
  50    if (!($_FILES['mess_img_1']['tmp_name'] == NULL)) {
  51    if (is_uploaded_file($_FILES['mess_img_1']['tmp_name'])) {
  52   move_uploaded_file($_FILES['mess_img_1']['tmp_name'], (JPATH_COMPONENT . '/images/' .                             $_FILES['mess_img_1'] ['name']));
  53    $image_1 = ('/images/' . $_FILES['mess_img_1']['name']);
  54    }
  55    }

Для начала проверяется, существует ли вообще загруженный файл, или переменная $_FILES['mess_img_1']['tmp_name'] пустая (строка 50). Данные в переменной $_FILES содержатся в двойном массиве (один вложен в другой);  ['mess_img_1'] указывает имя поля для ввода файлов, а ['tmp_name'] - адрес временного размещения и новое временное имя загруженного файла (см. главу 14). Если в $_FILES['mess_img_1']['tmp_name'] есть значение, то будет выполнен дальнейший код (строки 51-54); если значение NULL - эти строки будут проигнорированы.

В строке 51 функция PHP is_uploaded_file определяет, был ли файл, указанный в $_FILES['mess_img_1']['tmp_name'],  загружен при помощи HTTP POST. Это необходимо для защиты сайта (более подробно см. PHP, функция is_uploaded_file). Если файл был загружен как положено, то выполняется код в строке 52.

В строке 52 функция PHP move_uploaded_file перемещает загруженный файл, содержащийся во временной папке $_FILES['mess_img_1']['tmp_name'], в необходимое место и присваивает ему имя, указанные далее в скобках:

(JPATH_COMPONENT . '/images/' . $_FILES['mess_img_2'] ['name'])

В данной строке применяется константа JPATH_COMPONENT, указывающая полный путь на сервере к компоненту, включая папку  com_feedback_form  . Далее к ней прибавляется название папки для изображений  images  и имя самого файла, которое было получено при загрузке. Обратите внимание: код строки размещается в одну строку (редактор это позволяет).

В строке 53 переменной $image_1 присваивается значение в виде адреса и имени установленного файла.

Далее всё тоже самое выполняется и для двух других полей:

  56    if (!($_FILES['mess_img_2']['tmp_name'] == NULL)) {
  57    if (is_uploaded_file($_FILES['mess_img_2']['tmp_name'])) {
  58    move_uploaded_file($_FILES['mess_img_2']['tmp_name'], (JPATH_COMPONENT . '/images/' .                             $_FILES['mess_img_2'] ['name']));
  59    $image_2 = ('/images/' . $_FILES['mess_img_2']['name']);
  60    }
  61    } 
  62    if (!($_FILES['mess_img_3']['tmp_name'] == NULL)) {
  63    if (is_uploaded_file($_FILES['mess_img_3']['tmp_name'])) {
  64    move_uploaded_file($_FILES['mess_img_3']['tmp_name'], (JPATH_COMPONENT . '/images/'.                          $_FILES['mess_img_3']['name']));
  65    $image_3 = ('/images/' . $_FILES['mess_img_3']['name']);
  66    }
  67    } 

 Обратите внимание: сохранять изображения можно и по-другому - непосредственно в базе данных; для этого используются специальные поля типа BLOB. Подробно о сохранении изображений в БД читайте в статье "Как вносить изображения в базу данных". В этом случае в строках 49-67 данного скрипта прописывается другой код; так же меняется содержимое атрибута src в теге <img> для вывода изображения из БД (читайте указанную статью).  Не забудьте в базе данных изменить тип соответствующих столбцов на MEDIUMBLOB.

-------

Следующая глава будет полностью посвящена работе с базой данных: выполнению подключения, созданию строк и внесению в них данных, получению данных из имеющихся ячеек и так далее. 

 

 

Добавлять комментарии и ответы могут только пользователи, прошедшие регистрацию!
Зарегистрируйтесь и напишите своё мнение или ответ!