【问题标题】:Best practice for submitting nested form data to PHP?向 PHP 提交嵌套表单数据的最佳实践?
【发布时间】:2011-08-25 19:10:45
【问题描述】:

问题

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

  1. 问题1
    • 回答选项 1
    • 回答选项 2
    • 回答选项 3
  2. 问题2
    • 回答选项 1
    • 回答选项 2

我的解决方案

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

  • [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 的答案选择

我觉得这不是一个好方法,因为以后很难改变。有没有什么方法可以在不需要 JavaScript 的情况下将对象传递给 PHP?

【问题讨论】:

  • 是的,问题需要发布,因为整个表单都假设允许人们创建测验。选项的数量是可变的,具体取决于您希望如何构建问题(多项选择、真/假等)。
  • 如果这个表格是用来创建测验的,那么我会这样做。尽管您可能想要一种方法来指定答案的类型(复选框、单选框、文本字段等)

标签: php webforms


【解决方案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)

【讨论】:

    【解决方案2】:

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

    • 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()s array_keys() 的回调函数 _ 并将它们放入一个新数组中.您可以使用 preg_match() 而不是 split 来更轻松地解析问题编号。在我睡觉的路上,但你可能会通过一些尝试和错误来解决。

    【讨论】:

      【解决方案3】:

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

      count($nested[$i]) - 1
      

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

      • ['String for question 1'][0] : 回答问题 1 的选项 #1
      • ['String for question 1'][1] : 回答问题 1 的选项 #2
      • ['String for question 1'][2] : 回答问题 1 的选项 #3
      • ['String for question 1'][3] : 回答问题 1 的选项 #4
      • ['String for question 2'][1] : 回答问题 2 的选项 #1
      • ['String for question 2'][2] : 回答问题 2 的选项 #2

      在 PHP 中:

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

      【讨论】:

        猜你喜欢
        • 2012-03-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-22
        • 1970-01-01
        • 1970-01-01
        • 2017-11-03
        • 2013-08-02
        相关资源
        最近更新 更多