2013-09-23 2 views
0

У меня есть форма HTML с приличным размером, поверх этого Javascript, который может создавать гораздо больше «записей» для определенных частей формы. Всего мы могли бы говорить о 50+ элементах INPUT.Передача/синтаксический анализ большого количества данных формы на PHP backend

Я интересно, что лучший способ, чтобы обработать все эти данные с помощью PHP:

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

Или потерять имена элементов ввода формы, чтобы они не были представлены в POST, а затем используйте Javascript в событии отправки, чтобы закодировать все необходимые элементы ввода в объект, а затем закодировать этот объект в JSON и передать через один скрытый элемент ввода.

Я думаю, что позже я смогу написать более четкий код на стороне PHP, и он будет передан в качестве объекта, когда-то выполняемого через json_decode(), и будет более абстрактным из html-изменений. Хотя первый не требует javascript, но его нужно синхронизировать с html.

Или другой способ, о котором я не думал.

Какой, по вашему мнению, лучший способ?

+0

Что не так с несколькими входами? Вы все равно будете получать их как массив в PHP. – Joseph

+0

В чем проблема? Даже если вы создаете динамические элементы, вы можете анализировать с PHP нет? –

+0

Моя проблема заключалась в том, как эффективно и эффективно анализировать их, я думаю, что ответ Джозефа довольно хорошо переводит форму. – Moose

ответ

0

Вам даже не нужна JS для написания «более четкого кода». Вы можете передать массивы данных в PHP из форм таким образом. Это даже достаточно ясно. Taken from my other answer, вы можете сделать это (предыдущий вопрос был о флажков, но он должен работать с любым типом входного сигнала):

<input type="checkbox" name="answers[set1][]" value="apple" /> //imagine checked 
<input type="checkbox" name="answers[set1][]" value="orange" /> //imagine checked 
<input type="checkbox" name="answers[set1][]" value="grape" /> 
<input type="checkbox" name="answers[set2][]" value="airplane" /> //imagine checked 
<input type="checkbox" name="answers[set2][]" value="train" /> //imagine checked 
<input type="checkbox" name="answers[set2][]" value="boat" /> 
<input type="checkbox" name="answers[solo]" value="boar" /> //single type value. note that there is no [] in the end 

конец вверх, как это в массив запросов (как, скажем, POST):

$_POST[] = array(
    'answers' => array(
     'set1' => array('apple','orange'), //unchecked items won't be included 
     'set2' => array('airplane','train'), //unchecked items won't be included 
     'solo' => 'boar' 
    ) 
); 
+0

Отлично, я даже не знал, что вы можете это сделать! Черт, я просто попробовал, и он даже работает для запросов GET. – Moose

+0

@ user1304073 [URL-адрес имеет ограничение по длине] (http://stackoverflow.com/q/417142/575527), вы не можете упаковать столько данных в URL-адрес. – Joseph

+0

Спасибо, я знаю об этом, я просто подумал, что это хорошая альтернатива, если мне когда-нибудь понадобится. Обычно я использую только GET для таких вещей, как поиск, и POST для форм. В противном случае адресная строка выглядит ужасно. – Moose

0

Вам не нужен слой абстракции между html и php. Никто не делает. Используйте нормальное поведение html и извлекайте, если из php обычным способом. Если по какой-то причине вам действительно нужен объект, вместо нормального массива $ _POST, вызовите

$POSTobject = json_decode(json_encode($_POST), FALSE); 
+0

$ POSTobject = (объект) $ _POST; будет работать нормально – riekelt

0

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

например.

$MyBroadCategories = array('somefunctionalname', 'someotherfunctionalname'); 
foreach($MyBroadCategories as $Cat) { 
    foreach($_POST as $key => $val) { 
    if (preg_match('/^' . $Cat . '_(\d+)$/', $key, $bits)) { 
     // Please business code here with this particular class of variables 
     // Or add them to an specific array of candidates for later use. 
    } 
    } 
} 

}}

Внимание, во всех случаях, если вы превысите максимальное количество параметров, обрабатываемых на сервере (по умолчанию 1000), подумайте о настройке параметра конфигурации PHP max_input_vars.

+0

Мне нравится ваш ответ, и я проголосую, если смогу. Я думаю, что ответ Джозефа лучше переводится в «мир». – Moose

Смежные вопросы