将嵌套表单数据提交给PHP的最佳实践?

时间:2011-05-15 06:29:14

标签: php webforms

问题

我正在尝试找出将典型HTML表单中的数据提交到PHP文件的最佳方法。数据看起来像这样:

  1. 问题1
    • 回答选择1
    • 回答选择2
    • 回答选择3
  2. 问题2
    • 回答选择1
    • 回答选择2
  3. 我的解决方案

    这就是我的问题所在。使用多维数组是否合适?从上面的示例中可以看出,每个问题的选择数量可能不同。那么为什么不将每个问题的选择数存储到每行选择的第二个插槽中(第一个插槽将是问题文本的字符串):

    • [0] [0]:问题1的字符串
    • [0] [1]:问题1的选择数量
    • [0] [2]:问题1的答案选择
    • [0] [3]:问题2的答案选择
    • [0] [4]:问题3的答案选择
    • [0] [5]:问题4的答案选择
    • [1] [0]:问题2的字符串
    • [1] [1]:问题2的选择数量
    • [1] [2]:回答问题2的选择
    • [1] [3]:回答问题2的选择

    我觉得这不是一个好方法,因为以后很难改变。有没有办法将对象传递给PHP而不需要JavaScript?

3 个答案:

答案 0 :(得分:1)

如果您知道问题ID,则只会发布答案数组

<input type="radio" name="answer[<quest_id>]" value="0">
<input type="radio" name="answer[<quest_id>]" value="1">
<input type="radio" name="answer[<quest_id>]" value="2">
<input type="radio" name="answer[<quest_id>]" value="3">
<input type="radio" name="answer[<quest_id>]" value="4">

发布后你会有答案数组

foreach($_POST['answer'] as $question_id => $answer)

答案 1 :(得分:0)

嗯,您不必非常依赖数字索引,因为您可以使用表单输入名称来构建自己的结构。例如:

  • question0_string:问题1的字符串
  • question0_choices [0]:回答问题1的选择
  • question0_choices [1]:回答问题2的选择
  • question0_choices [2]:回答问题3的选择
  • question0_choices [3]:问题4的答案选择
  • question1_string:问题2的字符串
  • question1_choices [0]:回答问题2的选择
  • question1_choices [1]:回答问题2的选择

...然后通过查看php中的$ _POST获取表单名称,可能使用array_walk()split() array_keys() _的回调函数并将它们放在一个新数组中。您可以使用preg_match()而不是拆分来更轻松地解析问题编号。在我上床睡觉的路上,你可以通过一些反复试验找出答案。

答案 2 :(得分:0)

您的解决方案IMO,是最好的选择 - 我只需删除[*][1]索引,因为它们的值可以通过以下方式在PHP中轻松计算:

count($nested[$i]) - 1

但是你也可以采用另一种方法:

  • ['问题1的字符串'] [0]:问题1的答案选择#1
  • ['问题1的字符串'] [1]:对问题1的答案选择#2
  • ['问题1的字符串'] [2]:对问题1的答案选择#3
  • ['问题1的字符串'] [3]:问题1的答案选择#4
  • ['问题2的字符串'] [1]:问题2的答案选择#1
  • ['问题2的字符串'] [2]:问题2的答案选择#2

在PHP中:

foreach ($nested as $question => $answers)
{
    foreach ($answers as $answer)
    {
    }
}