Javascript 将大量表单数据传递/解析到PHP后端

Javascript 将大量表单数据传递/解析到PHP后端,javascript,php,jquery,html,forms,Javascript,Php,Jquery,Html,Forms,我有一个相当大的HTML表单,最上面是Javascript,它可以为表单的某些部分创建更多的“记录”。我们总共可以讨论50多个输入元素 我想知道用PHP处理所有这些数据的最佳方法: 通过POST将其作为普通输入元素传递,并让PHP对其进行解码 或者丢失表单输入元素的名称,这样它们就不会出现在文章中,然后在submit事件中使用Javascript将所有必需的输入元素编码到一个对象中,然后将该对象编码为JSON并通过一个隐藏的输入元素传递 我认为后者可以让我在PHP端编写更清晰的代码,基本上,只要

我有一个相当大的HTML表单,最上面是Javascript,它可以为表单的某些部分创建更多的“记录”。我们总共可以讨论50多个输入元素

我想知道用PHP处理所有这些数据的最佳方法:

通过POST将其作为普通输入元素传递,并让PHP对其进行解码

或者丢失表单输入元素的名称,这样它们就不会出现在文章中,然后在submit事件中使用Javascript将所有必需的输入元素编码到一个对象中,然后将该对象编码为JSON并通过一个隐藏的输入元素传递

我认为后者可以让我在PHP端编写更清晰的代码,基本上,只要运行json_decode(),它就会作为一个对象传递,并且会从html更改中变得更抽象。虽然前者不需要javascript,但需要与html保持同步

或者其他我没想到的方法


你认为哪种方式最好

html和php之间不需要抽象层。没有人知道。 使用正常的html行为并以正常的方式从php检索if。 如果出于某种原因,您确实需要一个对象,而不是普通的$\u POST数组,请调用

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

在我的经验中,我发现对于大到非常大的表单,最简单的方法是将输入字段保持在它们自己的表单中,使用标记,而是给输入字段一个模式名,比如somefunctionalname_01、somefunctionalname_02等,并让服务器端处理器查找这类变量。 然后,您的业务代码可以根据参数所属的类别对参数进行排序,您可以稍后以结构化的方式在空闲时使用它们

e、 g

} }


注意,在所有情况下,如果您超过了服务器处理的最大参数数(默认为1000),请考虑调整PHP配置的
max\u input\u vars
参数。

您甚至不需要JS来编写“更清晰的代码”。您可以通过这种方式将数据数组从表单传递到PHP。这一点甚至很清楚,您可以这样做(前面的问题是关于复选框的,但应适用于任何输入类型):


多输入有什么问题?在PHP中,您仍然可以将它们作为数组接收。您的实际问题是什么?即使你创建了动态元素,你也可以用PHP解析不?我的问题是如何有效地解析它们,我认为Joseph的答案很好地翻译了表单。太好了,我甚至不知道你能做到!见鬼,我刚刚试过,它甚至可以用于GET请求。@user1304073,你不能将那么多数据打包到url中。谢谢,我知道这一点,我只是觉得如果我需要/使用它,它是一个不错的选择。通常我只使用GET进行搜索,并使用POST进行表单发布。否则你的地址栏看起来很糟糕。我喜欢你的答案,如果我可以的话,我会投赞成票。然而,我认为Joseph的答案更适合于php的“世界”。
$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.
    }
  }
}
<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[] = 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'
    )
);