[英]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.