我创建了一个允许某人创建测验的表单,所有问题和答案都存储在数据库中。您可以在此处查看表单的简化版本:
http://jsfiddle.net/superuntitled/uaTtx/4/
每个问题都可以有无数个答案,只有一个答案可以是正确的。为了表示“正确”的答案,我正在使用单选按钮。
我遇到的问题是只有选中的单选按钮将值传递给我的php代码,请参阅示例$_POST
数组值(在此示例中,问题的三个答案“什么是空格站“):
[text] => Array
(
[0] => A cosmic hotel
[1] => An interstellar depot
[2] => A closet organizer
)
[correct] => Array
(
[0] => 1
)
即使正确答案是“星际车库”,当我循环浏览此$_POST
数组时,第一个答案“宇宙酒店”将作为正确答案输入。这是因为只有选定的单选按钮才会传递值。
我的收音机输入如下:
<input type="radio" name="answer[1][correct][]" value="1" />
第一组括号表示与之关联的问题,并且每个新问题都会增加此数字。
有没有人对如何正确设置正确答案有任何想法?
答案 0 :(得分:3)
是的,单选按钮只提交选中的值,这就是重点。
按照以下方式输入您的信息:
<input type="radio" name="answer[1][correct]" value="1" />
然后你会得到这样的数组:
'answer' => array(
1 => array(
'text' => array( … ),
'correct' => 1
)
)
正确答案很容易被选中:
$array['answer'][1]['text'][$array['answer'][1]['correct']]
答案 1 :(得分:1)
好的,我想我现在明白了。但我担心你的问题没有简单的解决办法。
虽然..[]
语法用于收集数组中的文本字段,但文本输入和无线电输入之间没有相关性。您必须手动命名文本字段answer[1][text][235]
和无线电answer[1][correct][235]
。
这需要PHP输出的枚举循环。显然,DHTML / AJAX“添加另一个答案/问题”功能必须解析现有字段,并计算最后一个数字。
如果您想保留延迟解决方案,则必须使用type=checkbox
代替type=radio
。这是在提交时显示所有字段的唯一方法,因此自动...[]
枚举适用于文本字段和复选框。
您可以在那里使用一些DHTML / Javascript技巧,以确保每个组只能选择一个复选框。 (=假单选按钮)
答案 2 :(得分:0)
您是否可以简单地创建一个隐藏的表单字段,其中包含正确的答案作为其值,然后检查所选单选按钮的值是否等于该隐藏的输入值?
例如:
<form>
<input type="hidden" name="correct_answer" value="1" />
<input type="radio" name="answer[1]" value="1" /> #1
<input type="radio" name="answer[1]" value="2" /> #2
<input type="submit" value="submit" />
</form>
我在想这会解决你的问题。您需要根据隐藏表单字段的值检查单选按钮的值。如果它们是相同的,那是正确的。否则,这是不正确的。
希望有所帮助。