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

Владимир | | PHP, Web разработка.

В этой заметке я хочу показать пример небольшого PHP скрипта, который обрабатывает данные из форм с произвольным количеством полей.

Такие ситуации возникают, например, когда пользователь может добавлять или удалять поля в форме.

Прежде всего немного теории.

Как известно, сколько бы полей форма не содержала, PHP скрипт получит все эти значения в массиве $_POST. Ключи элементов этого массива будут соответствовать атрибутам name полей формы. Используя эти ключи мы можем получить значение любого из полей.

Т.е. можно в цикле перебрать все элементы массива $_POST и узнать значения всех полей.

На этом можно было бы и остановиться, но на практике часто встречается такая ситуация. Форма содержит несколько обязательных полей и произвольное количество необязательных. Причем обычно необязательные поля содержат однотипные данные (которые и обрабатывать нужно отдельно).

Например. Нам нужна форма с помощью которой пользователь сможет создавать опросы. Т.е. необходимо ввести текст вопроса (обязательное поле) и варианты ответов (их количество может быть любым).

Естественно, в такой ситуации удобно выделить из массива $_POST массив с вариантами ответов. Этим мы и займемся.

Прежде всего нам нужно знать имена полей. С обязательным полем проблем нет, а имена полей с вариантами ответов скорее всего будут создаваться с помощью JavaScript и иметь вид: ans1, ans2 и т.д. Т.е. к приставке ans добавляется порядковый номер ответа.

Теперь рассмотрим PHP скрипт.

$answers = array();

while ($curField = each($_POST)) {
	if (strpos($curField['key'], 'ans') !== FALSE) {
		$answers['key'] = $curField['value'];
	}
}

Наибольший интерес тут представляет функция each. Она возвращает массив, который мы присваиваем переменной $curField.

В этом массиве доступны четыре поля:

$curField[0] и $curField['key'] – содержат ключ текущего элемента исходного массива, который был передан функции each.
$curField[1] и $curField['value'] – содержат значения этого же элемента.

Принцип работы скрипта такой. Проходим в цикле весь массив $_POST.

Когда будет достигнут конец массива, функция each вернет FALSE и цикл завершиться.

В цикле мы с помощью функции strpos ищем приставку 'ans' в ключе текущего элемента. Если она найдена, копируем текущий элемент в массив $answers, если нет – пропускаем.

В результате в массиве $answers будут только значения из полей с вариантами ответов.

Как видите, ничего сложного!

Если есть вопросы, пишите, с удовольствием отвечу 🙂

Интересно почитать:

Престижные автомобили в Одессе — почувствуйте себя королем дороги.
Копии элитных часов — отличное качество за разумные деньги.
Недвижимость Одессы — идеальный объект для инвестиций.