Ни для кого не является секретом, что наиболее распространенным способом взаимодействия html-страницы с сайтом является форма. Форма (то есть html-элемент образуемый тегом form) используется и бесплатными почтовыми службами, электронными магазинами и многими другими типами сайтов.
Обработка простых форм посредством PHP не представляет никакого труда. Однако время от времени возникает потребность обработать форму, содержащую несколько однотипных полей, притом, что их количество может изменяться в широком диапазоне и их количество заранее не известно. В PHP предусмотрено для таких случаев обработка однотипных полей как массива значений. Рассмотрим подробнее варианты для разных типов полей.
Текстовые поля
Под текстовыми полями в этой статье понимаются элементы, создаваемые тегам input со значением параметра type равным text и тегом textarea. Организовать обработку формы состоящей из нескольких таких полей проще всего. На листинге ниже приведен листинг с html-разметкой для такой формы.
<form action='do.html' method='post'> <input type='text' name='txt[0]' value=''><br> <input type='text' name='txt[1]' value=''><br> <input type='text' name='txt[2]' value=''><br> <input type='text' name='txt[3]' value=''><br> <input type='text' name='txt[4]' value=''><br> <input type='submit' value='Отправить'> </form>
Как видно из листинга, имена для элементов формы, с точки зрения PHP, являются элементами массива. Поэтому PHP-сценарий, который будет обрабатывать эту форму, будет воспринимать все множество текстовых полей этой формы как единый массив. К отдельным элементам можно обращаться по индексам или использовать перечисление при помощи команд list и each, как это сделано в следующем примере.
<?php while(list($key,$val) = each($txt)) echo "ключ - $key, значение - $val<br>n"; ?>
Переключатели
Переключателями (checkbox) в этой статье называются элементы, создаваемые тегам input со значением параметра type равным checkbox. Форма для использования переменного количества «переключателей» строится абсолютно так же. Обратите внимание, что выбор конкретного значения переключателя (то есть значение свойства value) не важен. Пример приведен в листинге ниже:
<form action='do.html' method='post'> <input type='chekbox' name='chb[0]' value='1'><br> <input type='chekbox' name='chb[1]' value='1'><br> <input type='chekbox' name='chb[2]' value='1'><br> <input type='chekbox' name='chb[3]' value='1'><br> <input type='chekbox' name='chb[4]' value='1'><br> <input type='submit' value='Отправить'> </form>
Однако обработка такой формы отличается от обработки, описанной для текстовых полей. В данном случае необходимо определить, включил или нет посетитель сайта тот или иной переключатель. Если включил - то соответствующий элемент массива существует, если нет - то отсутствует. В следующем листинге приведен пример PHP сценария, который распечатывает включенные переключатели:
Радио-кнопки
Перед тем как описывать обработку радио-кнопок необходимо вспомнить, как они работают. Суть радио-кнопок (элементы созданные тегами input со значением параметра type равным radio) заключается в том что, выбирая одну кнопку, пользователь автоматически снимает выделение с другой кнопки из этого же набора. Кнопки объединяются в набор очень просто: у всех кнопок в наборе одно и тоже имя. А вот значения (то есть параметры value) у кнопок в наборе - разные. И на сайт будет отправлено значение выбранной кнопки с именем набора. Так же как и в случае с текстовыми полями и переключателями имена наборов радио-кнопок должны оформляться как имена элементов массива в PHP. Пример такой формы приведен в следующем листинге:
<form action='do.html' method='post'> // первый набор кнопок <input type='radio' name='rdi[0]' value='1'> <input type='radio' name='rdi[0]' value='2'> <input type='radio' name='rdi[0]' value='3'><br> // второй набор кнопок <input type='radio' name='rdi[1]' value='1'> <input type='radio' name='rdi[1]' value='2'> <input type='radio' name='rdi[1]' value='3'><br> // третий набор кнопок <input type='radio' name='rdi[2]' value='1'> <input type='radio' name='rdi[2]' value='2'> <input type='radio' name='rdi[2]' value='3'><br> <input type='submit' value='Отправить'> </form>
Обработка радио-кнопок объединяет идеи, использование при обработке, как текстовых полей, так и переключателей. Если автор html-страницы не установил значение по умолчанию, а пользователь не выбрал определенную кнопку в наборе радио-кнопок, то данный элемент будет отсутствовать в массиве (как для переключателей). Если же кнопка выбрана, то соответствующий элемент массива будет содержать ее значение (как для текстовых полей). Ниже приведен листинг примера, обрабатывающего форму с несколькими наборами радио-кнопок.
<?php while(list($key,$val) = each($rdi)) echo "ключ - $key, значение - $val<br>n"; ?>
Заключение
Таким образом, ничего сложного в обработке сложных форм нет.