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


Using PHP and MySQL to populate Quiz web application Form

这是我决定的数据库设计http://www.flickr.com/photos/michaelstitt/6077647604/in/photostream/——使用我之前关于Stack Overflow的文章中的帮助。

我正在尝试使用PHP和MySQL构建一个测验web应用程序。构建HTML表单并手动编写"question"answers"question_choices"似乎要容易得多。但是,我希望使用数据库中的数据填充表单。

所以,我的问题是你建议我如何从表'question'或'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'列派生。value="1"将由'is_right_choice'列决定,并将填充user_question_answer表中的'is_right'列。这看起来是个好主意吗?

如有其他建议,我将不胜感激。

这不是一个好主意,因为任何查看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)。这是很容易处理的order by id在您的SQL语句。

问题的输出很好,无线电应该是从question_choices中选择的ID。所有的值都是唯一的,从代码中不清楚哪个是正确的答案。我建议将元素重命名为a_<#>,因为当你处理它们时,它们实际上是你得到的答案(不是问题),你可能要考虑在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中的第一件事是捕获$_POST["quizid"]并从数据库加载相关的问题和question_choices。

接下来遍历每个答案(1 -> n,其中n是问题的数量)并将它们映射到question.ID值。

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

如果你还想在那个表中存储is_right,你必须检查question_choice的这些id,看看is_right_choice是否设置{你实际上是双重存储这些数据,你可以通过从user_question_answer中删除is_right来进一步规范化,因为你已经可以将答案(通过choice_id)映射到question_choices并检查它是否正确}

你完成了!