У меня есть форма HTML с приличным размером, поверх этого Javascript, который может создавать гораздо больше "записей" для определенных частей формы. В общем, мы могли бы говорить об элементах INPUT 50+.
Мне интересно, как лучше всего обрабатывать все эти данные с помощью PHP:
Передайте его как обычный элемент INPUT через POST и пусть PHP все расшифровывает.
Или потеряйте имена элементов ввода формы, чтобы они не были представлены в POST, а затем используйте Javascript в событии отправки, чтобы закодировать все необходимые элементы ввода в объект и затем закодировать этот объект в JSON и пройти через один скрытый элемент ввода,
Я думаю, что более поздняя версия позволит мне написать более четкий код на стороне PHP, и в основном это будет передаваться как объект, выполняемый через json_decode(), и будет более абстрактным из html-изменений. Хотя первый не требует javascript, но его нужно синхронизировать с html.
Или другой метод, о котором я не думал.
Какой, по вашему мнению, лучший способ?
Вы даже не нуждаетесь в JS для написания "более четкого кода". Таким образом вы можете передавать массивы данных в PHP из форм. Это даже достаточно ясно. Взятый из моего другого ответа, вы можете это сделать (предыдущий вопрос касался флажков, но должен работать с любым типом ввода):
<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'
)
);
Вам не нужен слой абстракции между html и php. Никто не делает. Используйте нормальное поведение html и извлекайте, если из php обычным способом. Если по какой-то причине вам действительно нужен объект вместо обычного массива $ _POST, вызовите
$POSTobject = json_decode(json_encode($_POST), FALSE);
По моему опыту я обнаружил, что для больших и очень больших форм проще всего было сохранить поля ввода в их собственной форме, с тегами, а скорее дать полям ввода имя шаблона, например 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), подумайте о настройке параметра max_input_vars
вашей конфигурации PHP.