В этой заметке я хочу показать пример небольшого 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
будут только значения из полей с вариантами ответов.
Как видите, ничего сложного!
Если есть вопросы, пишите, с удовольствием отвечу 🙂
Интересно почитать:
Престижные автомобили в Одессе — почувствуйте себя королем дороги.
Копии элитных часов — отличное качество за разумные деньги.
Недвижимость Одессы — идеальный объект для инвестиций.