Окончание кода файла обработчика формы обратной связи 

Расположение формы и кода обработчика в одном файле (на одной странице)

 

 102        } else { // Если последний номер в таблице не равен номеру введённого обращения,
 103   // то запускается файл вывода ошибки.
 104        include(JPATH_COMPONENT .'/err/err_save.php');
 105        }
 106   }            // закрывающая скобка (см. строку 18)
 107    ?>      

Здесь ничего сложного нет. Строка 102 является продолжением конструкции if, начатой в строке 75 (проверка сохранения сообщения в БД). Если окажется, что в базе данных последний (на момент проверки) номер строки, который одновременно является и номером обращения,  не совпадает с номером поступившего обращения, то это говорит о том, что обращение по каким-то причинам не сохранено; соответственно, об этом будет выведено информационное сообщение.

 

Расположение формы и кода обработчика в одном файле (на одной странице)

Иногда бывает более целесообразно не создавать отдельный файл-обработчик, а код для обработки формы прописать прямо в файле шаблона страницы, где находится и сама форма. Это особенно удобно в том случае, если после обработки полученных данных снова открывается эта же страница, т.е. фактически получается, что обработка происходит во время перезагрузки. Например, это очень удобно сделать на странице настроек компонента; в этом случае если пользователь вводит или изменяет какие-либо параметры и нажимает кнопку "Сохранить", происходит полная перезагрузка страницы, в результате чего данные сохраняются и тут же выводятся в обновлённом виде. Сделать это просто.

В качестве адреса обработчика указывается адрес самой страницы, а код для обработки помещается в блок php-кода (строки 14-21):

  1   <?php

  2   // Защита от несанкционированного доступа
  3      defined( '_JEXEC' ) or die( 'Доступ запрещен...' );

  4   // Функция getDocument класса JFactory присваивает $doc объект документа

  5      $doc = JFactory::getDocument();
  6   // Подключение файлов CSS и JavaScript
  7      $doc->addStyleSheet(JUri::base(). 'components/com_my_component/views/css/my_component.css');

  8   // ПОДКЛЮЧЕНИЕ К БАЗЕ ДАННЫХ И ПРОВЕРКА СОЕДИНЕНИЯ
  9      $db = JFactory::getDBO();
 10     if (!$db->connected()) {
 11        include(JPATH_COMPONENT .'/err/err.php');
 12        exit;
 13     }

 14  // ОБРАБОТКА ЗАПРОСА
 15     if (!($_POST[button_abc] == NULL)) {
 16        $address = $_POST[em_address];
 17        $address = mb_eregi_replace(' ... шаблон для замены (регулярное выражение) ... ', '',  $address);  
 18        $address = mb_eregi_replace('[\{\}\$]', '', $address);
 19        $db->setQuery("UPDATE #__tableName SET email =' " . $address . " ' WHERE id=1");
 20        $db->query();
 21     }

 22  // ПОЛУЧЕНИЕ ДАННЫХ ИЗ ТАБЛИЦЫ
 23     $db->setQuery("SELECT * FROM #__tableName WHERE id=1");
 24     $result = $db->LoadRow();

 25  ?>

 26  <!-- СОЗДАНИЕ ФОРМЫ -->
 27     <form name="component_configuration" method="post" action="index.php?option=com_my_component&view=my_component&task=adcdef" enctype="multipart/form-data">

 28  <!-- ПОЛЕ АДРЕСА -->
 29     <p>Адрес: <input type='text' name='em_address' class='em_address' value="<?php echo $result[1]; ?>"></p>

 30     <div class='btn_conf'>
 31         <button class='button_abc' name='button_abc' type='submit' value='Сохранить изменения'>
 32     </div>
 33    </form>

Строка 15 проверяет, имеются ли данные в переменной POST. Если пользователь просто зашёл на страницу через меню, то переменная будет пуста и код обработчика будет проигнорирован, а если страница обновилась после нажатия кнопки "Сохранить изменения" код в строках 15-21 будет выполнен.

В строке 16 переменная $address получает содержимое поля "Адрес"; в строках 17-18 это содержимое проходит проверку безопасности при помощи функции  mb_eregi_replace, которая в соответствии с установленным регулярным выражением очищает содержимое от нежелательных символов (например, от тегов HTML, PHP, JS, от символов ' и ", которые могут быть использованы злоумышленниками и так далее).

В строках 19-20 обновляется содержимое базы данных.

Код в строках 21-33 получает данные из БД и создаёт страницу.

--------------

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

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