繁体   English   中英

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

[英]Passing/parsing large amount of form data to PHP backend

我有一个体面的HTML表单,最重要的是Javascript,它可以为表单的某些部分创建更多的“记录”。 总共我们可以讨论50多个INPUT元素。

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

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

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

我认为稍后可以使我在PHP端编写更清晰的代码,并且基本上可以通过json_decode()运行作为对象传递,并且可以从html更改中抽象出来。 尽管前者不需要javascript,但需要与html保持同步。

或其他我没想到的方法。

您认为哪种方法最好?

您不需要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参数。

您甚至不需要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'
    )
);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM