Главная страница | IT-студия |
|
Информационный портал
|
| Статьи о PHP | Формуляры на все случаи жизни Формуляры на все случаи жизниИсточник: http://www.php-mag.de/itr/online_artikel/psecom,id,491,nodeid,62.html В настоящее время редкое веб-приложение обходится без форм. Наверное, каждый разработчик потратил много времени, вставляя повторяющиеся комбинации html-тегов. Написание функций проверки данных также занимает некоторое время. Как вам кажется, наверное, неплохо бы эту работу автоматизировать? Как раз для этого и был задуман HTML_QuickForm. В этой статье мы расскажем о том, как этот пакет поможет вам избавиться от рутинной работы и при это придаст вашим приложениям более профессиональный вид. Формы — это один из краеугольных каменей любого веб-приложения. Они являются связующим звеном между пользователем и приложением (или базой данных). Часто программист имеет дело с одной и той же последовательностью действий: размещение формы на странице, заполнение формы пользовательскими данными, их проверка, и, наконец, дальнейшая обработка (например, сохранение данных в базе или генерация на их основе нового формуляра). В этой ситуации многие неоправданно усложняют себе жизнь, программируя заново бесконечное количество функций для каждой формы. Однако не стоит каждый раз изобретать колесо. QuickForm предлагает быстрое и удобное решение для выполнения почти всех рутинных операций, с которыми сталкивается программист. Этот класс, а точнее библиотека классов, содержит большое количество функций, пригодных не только для создания формы, но и для проверки и обработки пользовательских данных. При написании этой статьи мы пользовались версией 3.2 Примеры кода должны функционировать во всех версиях 3.х. Для установки QuickForm можно воспользоваться командой pear install HTML_QuickForm. К тому же вам потребуется установить еще одни пакет - HTML_Common. Существует альтернативный способ установки: необходимо загрузить tgz-архив с адреса pear.php.net/package/HTML_QuickForm и выполнить команду pear install HTML_QuickForm-3.2.tgz. На этой странице вы так же сможете найти подробный справочник по классам и функциям QuickForm. Первый шагДля того, чтобы продемонстрировать основные функции QuickForm, создадим маленькую форму-пример, с помощью которой пользователь может подписаться на одну или несколько новостных лент. Для этого он должен указать полное имя, дату рождения и e-mail. К тому же мы хотим узнать хобби, которым занимается посетитель на досуге, а так же информацию о новостных лентах, на которые он хотел бы подписаться. Полный вариант кода формы, вы можете найти в листинге 1. Рисунок 1. (Первая форма) Для генерации нового формуляра нам прежде всего необходим объект класса HTML_QuickForm. Вот как мы его создаем:
В качестве первого параметра конструктор принимает имя формы, которое помещается в html-тег form. В качестве следующего параметра мы должны указать каким способом (POST или GET) пользовательские данные будут обратно возвращены в скрипт. В качестве третьего параметра можно указать url-адрес, куда будут посылаться данные. Обычно этот параметр оставляют пустым, поскольку данные возвращаются в тот же самый скрипт, где была сгенерирована форма. Все выгоды подобного подхода мы увидим ниже. А теперь добавим пару элементов на нашу форму. Для этого воспользуемся функцией addElement().
Она принимает, как минимум, три параметра: тип элемента, его имя (идентификатор), строку символов (метку), которая показывается рядом с элементом. В качестве типа может быть указан любой известный элемент html-формы. В этом примере мы используем элементы text (строка ввода) и checkbox (флажок). Элемент header представляет собой псевдоэлемент QuickForm, предназначенный для создания заголовков, которые улучшают внешний вид формы и помогают группировать элементы. В нашем примере мы так же хотим узнать дату рождения пользователя. Если бы мы пользовались только чистым html/php при создании соответствующего поля, нам пришлось бы потратить много времени и написать объемный кусок кода. Для решения этой задачи с помощью QuickForm мы можем воспользоваться элементом date, который автоматически преобразовывается в три поля select, предназначенных для выбора дня, месяца и года. В этом случае функции addElement() нужно передать ассоциативный массив в качестве четвертого параметра:
Как видите, наряду с форматом даты и языком, мы указываем временной интервал для года. Язык необходим для поля выбора месяца, где перечисляются названия месяцев в полной или краткой форме. Формат даты QuickForm совместим с форматом php-функции date(). Подробную информацию о ней смотрите в мануале php. Перед тем, как разместить формуляр на странице, присвоим некоторым элементам стандартные значения. На практике их источником часто является база данных или конфигурационный файл. в QuickForm применяется другой принцип. Для присвоения стандартных значений элементам необходимо создать ассоциативный массив в форме: ElementName => Value. Массив передается функции setDefaults(). Таким же образом можно присвоить элементам константные значения. В этом случае массив должен передаваться функции setConstants(). Константные значения отличаются о стандартных тем, что они не могут изменяться в ходе дальнейшего выполнения скрипта. Обратите внимание на то, что подобное значение является константным только в теле php-скрипта. Поскольку поле формы отображается на странице, пользователь может изменить его значение. Создаем новые элементыКласс HTML_QuickForm управляет всеми элементами формы. Отдельный же элемент является объектом класса HTML_QuickForm_Element. Если возникает потребность в изменении параметров уже созданного элемента формы, прежде всего необходимо получить ссылку на него с помощью getElement(). В нашем примере мы изменяем внешний вид элемента select.
До этого момента мы исходили из того, что каждый элемент существует сам по себе. Однако часто требуется объединить несколько элементов в логический ряд. Чаще всего в группы объединяются элементы checkbox и radio-кнопки. Для того, чтобы объединить отдельные элементы в группы, прежде всего мы должны создать ассоциативный массив, содержащий элементы, входящие в данную группу. С этой целью мы воспользуемся функцией createElement().
В данном примере, при создании нового элемента checkbox, мы передаем конструктору четвертый параметр. Речь идет о тексте, отображаемом рядом с флажком. Впрочем, не стоит удивляться, что количество и характер параметров конструктора различны для каждого элемента формы. Функции addElement() и createElement() принимают только один основной параметр - тип элемента, в зависимости от него выбирается соответствующий класс (каждый элемент представляет собой отдельный класс, производный от HTML_QuickForm_Element), в конструктор которого и передаются остальные параметры. Обработка данныхТеперь мы подошли к тому моменту, когда у нас уже есть простой экземпляр готовой формы, куда пользователь может вводить данные. При нажатии на кнопку ОК, данные посылаются обратно в скрипт. Но как же мы получим к ним доступ? Посмотрите на последние строчки кода из листинга 1:
Форма, созданная с помощью с помощью QuickForm, имеет два состояния: либо она еще не отображена, либо пользовательские данные заполненной формы посылаются в скрипт на обработку. Во втором случае необходимо дополнительно различать: прошли ли данные проверку или нет. Функция validate() позволяет узнать состояние, в котором находится форма. Если она отображается впервые, функция возвращает false, а форма может быть прорисована в браузере при помощи display(). Функция возвратит то же значение (false), если данные формы уже были посланы в скрипт-обработчик, но не прошли проверку. В этом случае пользователь снова должен ввести некоторые данные, поэтому форма, дополненная сообщениями об ошибках, должна отобразиться еще раз. Только в том случае, если проверка пользовательских данных прошла успешно, функция validate() возвратит true. Затем данные могут пройти дальнейшую обработку внутри скрипта. Мы написали особую функцию process_data(), которая выводит последовательно все пользовательские данные в браузер. Теперь вы можете немного попрактиковаться. Фильтры и правила проверки данныхЧасто веб-приложение сохраняет данные в базе, причем они могут не только не соответствовать действительности, но и создавать угрозу безопасности веб-приложения. Quick-Form снабжает нас мощным инструментом контроля данных. Пакет содержит встроенные фильтры и правила проверки данных. Их функциональность мы можем как угодно изменять. Фильтры представляют собой набор определенных инструкций, предназначенных для коррекции данных, а правила служат для проверки данных на соответствие определенному условию. Самый распространенный пример применения фильтра — удаление лишних пробелов с помощью функции trim(). Вернемся к предыдущему листингу: допустим, мы хотим сохранить в базе данных имя пользователя и при этом удалить ведущие и конечные пробелы. Для этого мы создадим оператор: $form->applyFilter('firstName', 'trim'); Имя конкретного элемента можно заменить на '__ALL__' . В этом случае указанный фильтр будет применен ко всем элементам формы. В качестве фильтра может быть применена любая php-функция, которая принимает строку в качестве единственного параметра и возвращает строковое значение. Приведем пример кода из листинга 2, который дополняет наш первый пример:
Таким образом, к нашей форме было добавлено два правила. Первое служит для проверки, ввел ли пользователь свое имя при подписке на новости. Второе следит за тем, чтобы фамилия пользователя, если только она указана, содержала не более пяти символов. За каждым элементом может быть закреплено сколько угодно правил проверки данных. Наряду с именем элемента, функция AddRule() требует указать сообщение об ошибке, которое появится рядом с элементом в случае, если данные не прошли проверку. В качестве третьего параметра необходимо указать правило, на соответствие которому будут проверяться данные. Таблица 1 содержит некоторые из них:
|