在不知道确切字段数的情况下检索POST数据

时间:2011-02-02 15:15:06

标签: php arrays post

我正在创建一个从头开始的在线投票,该投票将保存在数据库中。我正在努力建立一个系统,以便有人可以创建一个新的民意调查。

我将让用户用问题和答案填写一个简单的HTML表单(可能有几个答案)。用户将能够为每个问题添加多个问题和多个答案。

由于问题和答案的总数将由用户决定,我需要创建一些聪明的PHP来满足这一点 - 无论有多少。

在处理静态数量的问题时,这很简单。但是我无法想办法将所有POST数据转换为单独的PHP变量,以便我可以处理它们。

我在考虑使用foreach循环,任何人都有任何想法?

对不起长篇大论的描述感到抱歉!如果有人需要澄清任何事情,我会很乐意这样做。我的问题是,当我不确切知道数组的哪个元素将包含什么时,我无法理解如何处理POST值。如果事情是静态的,有一定数量的问题和答案,我知道$_POST[0]是问题1等等

谢谢! =)

4 个答案:

答案 0 :(得分:2)

$_POST应该始终是一个关联数组,表单元素的名称映射到数组的索引。除非您专门命名表单字段$_POST[0],否则您永远不必访问0。相反,如果您的元素为<input name="field1" />,则您会在$_POST['field1']找到提交的值。

请记住,您可以强制PHP通过将数组索引附加到其名称来将传入的表单元素解释为数组值:

<input name="question[]" type="text" />
<input name="question[]" type="text" />

发回给您后,$_POST['questions']将包含所有question字段的数组。

如果您正在向页面动态添加表单元素以允许用户添加多个问题,请确保正确命名它们,PHP将为您构建数组。

您可以使用类似的内容循环传入的帖子数据:

foreach ($_POST['questions'] as $question) {
   // sanitize/save your user's question
}

答案 1 :(得分:1)

foreach将起作用。

foreach($_POST as $name => $item)

$ name将包含值的名称,通过它您可以识别它的值。它将包含名为“question1”的字段的“question1”。 :)

答案 2 :(得分:1)

当您将输入字段命名为questions[]时,它们将在以下参数中传递:questions[]=Q1&questions[]=Q2(无论是在查询字符串中还是在帖子正文中)。 PHP会将它们转换为$_POST['questions']中的数组,您可以在其中轻松地迭代它们。如果需要将多个字段合并为一个数组,也可以明确指定密钥。

当你需要嵌套数据时,这就是美丽,所以“问题1”有一个问题字符串,n个答案,也许还有一个设置选项:

<input type="text" name="questions[0]">
<input type="text" name="questions[0][answers][]">
<input type="text" name="questions[0][answers][]">
<input type="text" name="questions[0][answers][]">
<input type="text" name="questions[0][answers][]">
<input type="text" name="questions[0][option][foo]">

...转换成......

[questions] => Array
    (
        [0] => Array
            (
                [answers] => Array
                    (
                        [0] => answer1
                        [1] => answer2
                        [2] => answer3
                        [3] => answer4
                    )

                [option] => Array
                    (
                        [foo] => bar
                    )

            )

    )

答案 3 :(得分:1)

创建名称以[]结尾的多个输入字段,即:

ans1: <input type=text name='ans[]'>
ans2: <input type=text name='ans[]'>
name: <input name='name'>

然后所有值都将显示为$ _POST数组中的数组。:

array(2) {
  ["ans"]=>
  array(2) {
    [0]=>
    string(3) "LOL"
    [1]=>
    string(3) "WTF"
  }
  ["name"]=>
    string(4) "John"
}