понедельник, 23 мая 2011 г.

Обработка произвольного количества полей на PHP


Обработка произвольного количества полей на PHP

8 января, 2009
php input fields
В этой заметке я хочу показать пример небольшого PHP скрипта, который обрабатывает данные из форм с произвольным количеством полей.
Такие ситуации возникают, например, когда пользователь может добавлять или удалять поля в форме.
Прежде всего немного теории.
Как известно, сколько бы полей форма не содержала, PHP скрипт получит все эти значения в массиве $_POST. Ключи элементов этого массива будут соответствовать атрибутам name полей формы. Используя эти ключи мы можем получить значение любого из полей.
Т.е. можно в цикле перебрать все элементы массива $_POST и узнать значения всех полей.
На этом можно было бы и остановиться, но на практике часто встречается такая ситуация. Форма содержит несколько обязательных полей и произвольное количество необязательных. Причем обычно необязательные поля содержат однотипные данные (которые и обрабатывать нужно отдельно).
Например. Нам нужна форма с помощью которой пользователь сможет создавать опросы. Т.е. необходимо ввести текст вопроса (обязательное поле) и варианты ответов (их количество может быть любым).

Естественно, в такой ситуации удобно выделить из массива $_POSTмассив с вариантами ответов. Этим мы и займемся.
Прежде всего нам нужно знать имена полей. С обязательным полем проблем нет, а имена полей с вариантами ответов скорее всего будут создаваться с помощью JavaScript и иметь вид: ans1ans2 и т.д. Т.е. к приставке ans добавляется порядковый номер ответа.
Теперь рассмотрим PHP скрипт.
  1. $answers = array();
  2.  
  3. while ($curField = each($_POST)) {
  4.     if (strpos($curField['key']'ans') !== FALSE) {
  5.         $answers['key'] = $curField['value'];
  6.     }
  7. }
Наибольший интерес тут представляет функция each. Она возвращает массив, который мы присваиваем переменной $curField.
В этом массиве доступны четыре поля:
$curField[0] и $curField['key'] – содержат ключ текущего элемента исходного массива, который был передан функции each.
$curField[1] и $curField['value'] – содержат значения этого же элемента.
Принцип работы скрипта такой. Проходим в цикле весь массив $_POST.
Когда будет достигнут конец массива, функция each вернет FALSE и цикл завершиться.
В цикле мы с помощью функции strpos ищем приставку 'ans' в ключе текущего элемента. Если она найдена, копируем текущий элемент в массив $answers, если нет – пропускаем.
В результате в массиве $answers будут только значения из полей с вариантами ответов.
Как видите, ничего сложного!
Если есть вопросы, пишите, с удовольствием отвечу :-)
Интересно почитать:
Престижные автомобили в Одессе – почувствуйте себя королем дороги.
Копии элитных часов – отличное качество за разумные деньги.
Недвижимость Одессы – идеальный объект для инвестиций.

Комментариев нет:

Отправить комментарий