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


Passing/parsing large amount of form data to PHP backend

我有一个大小不错的HTML表单,最重要的是Javascript,它可以为表单的某些部分创建更多的"记录"。总的来说,我们可以谈论 50+ 输入元素。

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

通过 POST 将其作为普通的 INPUT 元素传递,让 PHP 对其进行解码。

或者丢失表单输入元素的名称,以便它们不会显示在 POST 中,然后在提交事件上使用 Javascript 将所有必需的输入元素编码到一个对象中,然后将该对象编码为 JSON 并通过单个隐藏的输入元素传递。

我认为后者将允许我在 PHP 端编写更清晰的代码,并且一旦通过 json_decode(( 运行它基本上会作为一个对象传递,并且从 html 更改中会更抽象。虽然前者不需要javascript,但需要与html保持同步。

或者我没有想到的另一种方法。

您认为哪种方式是最好的方法?

你甚至不需要JS来编写"更清晰的代码"。您可以通过这种方式将数据数组从表单传递给 PHP。这一点甚至足够清楚。取自我的另一个答案,您可以这样做(上一个问题是关于复选框的,但应该适用于任何输入类型(:

<input type="checkbox" name="answerswers[set1][]" value="apple" />   //imagine checked
<input type="checkbox" name="answerswers[set1][]" value="orange" />  //imagine checked
<input type="checkbox" name="answerswers[set1][]" value="grape" />
<input type="checkbox" name="answerswers[set2][]" value="airplane" />   //imagine checked
<input type="checkbox" name="answerswers[set2][]" value="train" />  //imagine checked
<input type="checkbox" name="answerswers[set2][]" value="boat" />
<input type="checkbox" name="answerswers[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(,请考虑调整 PHP 配置的max_input_vars参数。