使用PHP和MySQL填充测验Web应用程序表单

时间:2011-08-24 20:03:52

标签: php mysql html database forms

以下是我决定使用http://www.flickr.com/photos/michaelstitt/6077647604/in/photostream/的数据库设计the help from my previous post on Stack Overflow

我正在尝试使用PHP和MySQL构建一个Quiz Web应用程序。构建HTML表单并手动编写“问题”和“question_choices”似乎要容易得多。但是,我想使用数据库中的数据填充表单。

所以,我的问题是您如何建议我从数据库中的表'问题'或'question_choices'中提取数据以填写HTML表单?

HTML表单看起来像这样:

<form method="post" action="quiz1.php">

    <b>What was the make/model of my first car?</b>
    <br>
    <input type="radio" value="0" name="q_1">
    Toyota Camry <br />
    <input type="radio" value="1" name="q_1">
    Honda Accord <br />
    <input type="radio" value="0" name="q_1">
    Ford Explorer <br />
    <input type="radio" value="0" name="q_1">
    Plymouth Voyager <br />

Honda Accord将来自表question_choices中的'choice'列。值=“1”将由'is_right_choice'列确定,并将填充user_question_answer表中的'is_right'列。 这看起来是个好主意吗?

非常感谢任何其他建议。提前谢谢。

1 个答案:

答案 0 :(得分:1)

这不是一个好主意,因为任何查看HTML源代码的人都可以找出哪个是正确的答案。另一方面,您拥有架构中的所有信息来执行此服务器端(并保护答案)。

提问时间

我猜你(你不说)你想在一个页面上显示所有测验问题。您希望表单发布回默认的quiz.php页面。 (<form method="post" action="quiz.php" />

由于quiz.php可以处理任何测验,因此您需要在表单中嵌入测验ID,因此当您处理结果时,您可以看到正在回答哪个测验。试试<input type="hidden" name="quizid" value="1" />(假设这是测验#1)。

您还需要明确说明您将问题从数据库中提取出来的顺序,因为他们正在从ID切换到订单(因此,如果您有10个问题的测验,第一个问题是ID 11,以ID 21结束,他们将成为问题1-10)。这可以通过SQL语句中的order by id轻松处理。

问题的输出很好,无线电应该是来自question_choices的选择的ID ..所有值都是唯一的,并且从代码中不清楚是正确的答案。我建议将元素重命名为a_<#>,因为当你处理时,它们实际上是你得到的答案(而不是问题),你可能想考虑围绕{{1}中的问题+选择}(为了便于阅读):

fieldset

在提交时我会验证所有问题至少选择了一个选项(除非答案也没有答案)......这样用户就不会意外地提交一半填写表格(按输入或者因为他们错过了一个问题)。

回答时间

所以<fieldset> <b>What was the make/model of my first car?</b><br /> <input type="radio" value="214" name="a_1">Toyota Camry <br /> <input type="radio" value="215" name="a_1">Honda Accord <br /> <input type="radio" value="216" name="a_1">Ford Explorer <br /> <input type="radio" value="217" name="a_1">Plymouth Voyager <br /> </fieldset> 中的第一件事就是捕获quiz.php并从数据库中加载相关问题和question_choices。

接下来迭代每个答案(1 - > n,其中n是问题的数量)并将这些值映射到$_POST["quizid"]值。

比较每个答案的值:question.ID(#= 1-n),找出用户选择的$_POST["a_#"] ID - 可以直接插入question_choice

如果您还希望在该表格中存储user_question_answer,则必须针对is_right检查这些ID,以查看是否设置了question_choice {您实际上是双重存储此数据,您可以通过从is_right_choice移除is_right来进一步规范化,因为您已经可以将答案(user_question_answer)映射到choice_id并检查答案是否正确}

你已经完成了!