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

时间:2013-09-23 10:47:25

标签: javascript php jquery html forms

我有一个体面的HTML表单,除此之外是Javascript,可以为表单的某些部分创建更多“记录”。总的来说,我们可以谈论50多个INPUT元素。

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

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

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

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

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

您认为哪种方式最好?

3 个答案:

答案 0 :(得分:0)

你不需要html和php之间的抽象层。没有人这样做。 使用正常的html行为并从php检索是否正常。 如果由于某种原因你真的需要一个对象而不是普通的$ _POST数组,请调用

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

答案 1 :(得分:0)

根据我的经验,我发现对于从大到大的形式,最简单的方法是使用标签保持输入字段的形式,而是为输入字段提供模式名称,如somefunctionalname_01,somefunctionalname_02等,以及让服务器端处理器来查找这类变量。 然后,您的业务代码可以根据它们所属的类别对参数进行排序,您可以稍后在结构化的方式中使用它们。

e.g。

$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参数。

答案 2 :(得分: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'
    )
);