2011-08-24 75 views
0

这是我决定使用的数据库设计http://www.flickr.com/photos/michaelstitt/6077647604/in/photostream/ - 使用the help from my previous post on Stack Overflow使用PHP和MySQL填充测验Web应用程序表格

我正在尝试使用PHP和MySQL构建测验Web应用程序。手动构建HTML表单并编写“问题”和“问题选择”似乎更容易。不过,我想用我的数据库中的数据填充表单。

所以,我的问题是你如何建议我从我的数据库中的表'问题'或'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的“选择”列中的。值=“1”将由'is_right_choice'列确定,并将填充user_question_answer表中的'is_right'列。 这似乎是个好主意吗?

任何其他意见将不胜感激。先谢谢你。

+0

我不这么认为。这将给用户提供正确选择的暗示。还是我理解你错了? – glglgl

回答

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_<#>,因为当你处理它们实际上是你得到的答案(而不是问题),并且你可能想考虑围绕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该表中你必须检查这些ID对question_choice,看是否is_right_choice设置{你实际上是双存储这些数据,您可以通过自从user_question_answer去除is_right进一步规范您已经可以将答案(通过choice_id)映射到question_choices并检查它是否是正确的}

而且您完成了!

+0

哇!感谢这样详细的回复,我真的很感激!我还在开始阶段我的实践,将PHP/SQL和我有麻烦的四个答案选项理解“NAME = A_1”的功能。你建议我重新命名元素A_ <#> - 元素你指的是哪个?再次,非常感谢!我了解问题部分,仍然试图让我的头在答案部分... – Abundnce10