0

我有一个大小合适的 HTML 表单,最重要的是 Javascript,它可以为表单的某些部分创建更多“记录”。总的来说,我们可以谈论 50 多个 INPUT 元素。

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

通过 POST 将其作为普通 INPUT 元素传递,并让 PHP 将其全部解码。

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

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

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

你认为哪种方式最好?

4

3 回答 3

0

您不需要 html 和 php 之间的抽象层。没有人会。使用正常的 html 行为并以正常方式从 php 中检索。如果由于某种原因您确实需要一个对象而不是普通的 $_POST 数组,请调用

$POSTobject = json_decode(json_encode($_POST), FALSE);
于 2013-09-23T11:06:00.647 回答
0

根据我的经验,我发现对于大到非常大的表单,最简单的方法是将输入字段保留在自己的表单中,带有标签,而是给输入字段一个模式名称,如 somefunctionalname_01、somefunctionalname_02 等,并让服务器-side 处理器来查找此类变量。然后,您的业务代码可以根据参数所属的类别对参数进行排序,以后您可以在闲暇时以结构化的方式使用它们。

例如

$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),请考虑调整max_input_varsPHP 配置的参数。

于 2013-09-23T11:11:03.150 回答
0

你甚至不需要 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'
    )
);
于 2013-09-23T11:31:05.577 回答