我正在创建一个从头开始的在线投票,该投票将保存在数据库中。我正在努力建立一个系统,以便有人可以创建一个新的民意调查。
我将让用户用问题和答案填写一个简单的HTML表单(可能有几个答案)。用户将能够为每个问题添加多个问题和多个答案。
由于问题和答案的总数将由用户决定,我需要创建一些聪明的PHP来满足这一点 - 无论有多少。
在处理静态数量的问题时,这很简单。但是我无法想办法将所有POST数据转换为单独的PHP变量,以便我可以处理它们。
我在考虑使用foreach
循环,任何人都有任何想法?
对不起长篇大论的描述感到抱歉!如果有人需要澄清任何事情,我会很乐意这样做。我的问题是,当我不确切知道数组的哪个元素将包含什么时,我无法理解如何处理POST值。如果事情是静态的,有一定数量的问题和答案,我知道$_POST[0]
是问题1等等
谢谢! =)
答案 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"
}