2011-02-02 67 views
1

我正在创建一个从头开始的在线调查,该调查将保存在数据库中。我正在努力建立一个系统,以便有人可以创建一个新的民意调查。在不知道确切字段数量的情况下检索POST数据

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

由于问题和答案的总数将由用户决定,因此我需要创建一些灵巧的PHP来迎合这一点 - 不管有多少。

处理静态数量的问题时,很简单。但是我很难想出一种将所有POST数据转换为单个PHP变量的方式,所以我可以处理它们。

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

对不起,冗长的描述!如果有人需要澄清,我很乐意这样做。我的问题是,当我不清楚数组中哪个元素将包含什么内容时,我无法理解如何处理POST值。如果事情是静态的,有一系列的问题和答案,我知道$_POST[0]是Question1等。

谢谢! =)

回答

1

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

当你需要嵌套数据,所以“问题1”在此的美是有问题的字符串,正的答案,也许一个设置选项:

<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 
        ) 

      ) 

    ) 
+0

我喜欢这种方法,正如您和meagar所证明的那样。我将如何去访问PHP中的questions数组? “ – James 2011-02-02 16:22:58

+0

”PHP会将这些转换为`$ _POST ['questions']`中的数组。 :) – coreyward 2011-02-02 16:40:47

+0

已将此答案标记为解决方案,因为我正在使用如此处所示的多维数组方法。非常感谢meagar和其他人回复。我使用每个人的帖子来创建一些适合我的东西,我可以理解! - 伟大的网站,伟大的社区!再次感谢! – James 2011-02-02 19:09:27

1

foreach将工作。

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

$ name将包含值的名称,通过该名称可以确定它的值。它将包含名为'question1'的字段的'question1'。 :)

+0

ha忍者14秒... upvoting y我们的回答并删除我的 – Serge 2011-02-02 15:19:28

2

$_POST应始终是一个关联数组,其中表单元素的名称映射到数组的索引。除非您明确指定您的表单字段0,否则您不应该访问$_POST[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

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

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" 
} 
相关问题