Обработка произвольного количества полей на PHP
8 января, 2009
В этой заметке я хочу показать пример небольшого PHP скрипта, который обрабатывает данные из форм с произвольным количеством полей.
Такие ситуации возникают, например, когда пользователь может добавлять или удалять поля в форме.
Прежде всего немного теории.
Как известно, сколько бы полей форма не содержала, PHP скрипт получит все эти значения в массиве $_POST. Ключи элементов этого массива будут соответствовать атрибутам name полей формы. Используя эти ключи мы можем получить значение любого из полей.
Т.е. можно в цикле перебрать все элементы массива $_POST и узнать значения всех полей.
На этом можно было бы и остановиться, но на практике часто встречается такая ситуация. Форма содержит несколько обязательных полей и произвольное количество необязательных. Причем обычно необязательные поля содержат однотипные данные (которые и обрабатывать нужно отдельно).
Например. Нам нужна форма с помощью которой пользователь сможет создавать опросы. Т.е. необходимо ввести текст вопроса (обязательное поле) и варианты ответов (их количество может быть любым).
Естественно, в такой ситуации удобно выделить из массива $_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
будут только значения из полей с вариантами ответов.Как видите, ничего сложного!
Если есть вопросы, пишите, с удовольствием отвечу
Интересно почитать:
Престижные автомобили в Одессе – почувствуйте себя королем дороги.
Копии элитных часов – отличное качество за разумные деньги.
Недвижимость Одессы – идеальный объект для инвестиций.
Копии элитных часов – отличное качество за разумные деньги.
Недвижимость Одессы – идеальный объект для инвестиций.
Понравилась статья? Подписывайтесь на продолжение
Комментариев нет:
Отправить комментарий