Передача / анализ большого количества данных формы в бэкэнд PHP

0

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

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

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

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

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

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

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

Теги:
forms

3 ответа

0
Лучший ответ

Вы даже не нуждаетесь в 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'
    )
);
  • 0
    Отлично, я даже не знал, что ты можешь сделать это! Черт, я только что попробовал это, и это даже работает для запросов GET.
  • 0
    @ user1304073 URL-адреса имеют ограничение по длине , вы не можете упаковать столько данных в URL.
Показать ещё 1 комментарий
0

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

$POSTobject = json_decode(json_encode($_POST), FALSE);
  • 0
    $ POSTobject = (объект) $ _POST; будет работать просто отлично
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), подумайте о настройке параметра max_input_vars вашей конфигурации PHP.

  • 0
    Мне нравится ваш ответ, и я бы проголосовал, если бы смог. Однако я думаю, что ответ Джозефа лучше переводит в php «world».

Ещё вопросы

Сообщество Overcoder
Наверх
Меню