单选按钮,多维数组和PHP

时间:2011-02-08 23:41:37

标签: php forms

我创建了一个允许某人创建测验的表单,所有问题和答案都存储在数据库中。您可以在此处查看表单的简化版本:

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" />

第一组括号表示与之关联的问题,并且每个新问题都会增加此数字。

有没有人对如何正确设置正确答案有任何想法?

3 个答案:

答案 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>

我在想这会解决你的问题。您需要根据隐藏表单字段的值检查单选按钮的值。如果它们是相同的,那是正确的。否则,这是不正确的。

希望有所帮助。