我有一个体面的HTML表单,除此之外是Javascript,可以为表单的某些部分创建更多“记录”。总的来说,我们可以谈论50多个INPUT元素。
我想知道PHP处理所有这些数据的最佳方法:
通过POST将其作为普通的INPUT元素传递,让PHP解码它。
或丢失表单输入元素的名称,因此它们不会在POST中显示,然后在submit事件上使用Javascript将所有必需的输入元素编码到对象中,然后将该对象编码为JSON并通过单个传递隐藏的输入元素。
我认为后者允许我在PHP端编写更清晰的代码,它基本上会作为一个对象传递一次运行json_decode(),并且从html更改中会更抽象。虽然前者不需要javascript,但需要与html保持同步。
或者我没有想到的另一种方法。
您认为哪种方式最好?
答案 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'
)
);