这是数据库设计http://www.flickr.com/photos/michaelstitt/6077647604/in/photostream/我决定使用 the help from my previous post on Stack Overflow .
我正在尝试使用 PHP 和 MySQL 构建一个测验 Web 应用程序。构建 HTML 表单并手动编写“question”和“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 />
本田雅阁将从表 Question_choices 中的“选择”列派生。 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>
在提交时,我会验证所有问题至少选择一个选项(除非没有答案也是答案)...这样用户就不会意外提交半填写的表单(通过按 Enter 键)或者因为他们错过了一个问题)。
回答时间
所以第一件事是 quiz.php
就是抓$_POST["quizid"]
并从数据库加载相关问题和question_choices。
接下来迭代每个答案(1 -> n,其中 n 是问题数)并将它们映射到 question.ID
值(value)观。
比较每个答案的值:$_POST["a_#"]
(#=1-n) 找出哪个question_choice
用户选择的ID - 可以直接插入user_question_answer
.
如果您还想存储is_right
在该表中,您必须根据 question_choice
检查这些 ID看看是否 is_right_choice
设置{您实际上双重存储了此数据,您可以通过删除 is_right
进一步规范化来自user_question_answer
因为您已经可以将答案(通过 choice_id
)映射到 question_choices
并检查它是否正确}
你就完成了!
关于php - 使用 PHP 和 MySQL 填充 Quiz Web 应用程序表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7181563/