Окончание кода файла обработчика формы обратной связи
Расположение формы и кода обработчика в одном файле (на одной странице)
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 получает данные из БД и создаёт страницу.
--------------
Итак, первая часть работы над компонентом закончена: создана страница для пользователей, с которой они смогут отправлять свои обращения администратору сайта. Теперь пора перейти к созданию страниц для администратора.