设计好的PHP测验脚本

时间:2010-07-05 18:00:27

标签: php query-optimization

我正在为一所学校开发一个带有php和mysql的测验模块。要求很简单:

1)共有10个类别(科目)。

2)从每个类别中选择8个随机问题并逐个显示。

3)获取学生的意见。

4)计算结果并显示。

现在,我面临的问题是如何使脚本尽可能高效。从某种意义上说,效率更高,更少的数据库命中率。 我想将该特定用户的80个答案存储在位置中,然后在数据库中一次更新所有答案。我不想使用cookies。我能以什么方式实现这一目标?

我可以参考哪些简单的php测验模块?

谢谢:)

5 个答案:

答案 0 :(得分:3)

从我个人的角度来看,如果我被要求设计类似的东西,我会做以下事情:

  • 如果我不想使用数据库资源,我会有一个“在开始quizz之前”的步骤,我将从数据库中提取问题
  • 每个用户(即使未注册)都有唯一的会话;从数据库中获取的数据将直接位于会话中(因为会话存储在服务器端,我不关心加密它)
  • 会话它有点问题,但是使用cookie和加密数据似乎更多的工作而不是更长的会话(也许学生需要一些时间来解决这个问题,而5分钟的会话会有点低,但是这不是一个大问题,您可以按照自己的意愿设置
  • 答案也存储在会话中,最后你只需要将会话中的结果与会话中的答案进行比较,这是一项非常基本的任务:如果结果存储在一个单独的数组中,你可以只需在每个答案上调用in_array()(数组是正确的结果)并增加一个变量,以便知道有多少问题得到正确回答(如果每个问题都有相同的“值”,那就有效)

享受!

答案 1 :(得分:1)

您显然需要快速缓存层。我建议为此目的使用memcached或APC。会话数据也可能有效。

也就是说,你可能最好使用全栈PHP框架。一个好的将为您管理缓存。我建议查看symfony或CakePHP。

这是真正的问题:您是否在确定 出现问题之前,是否正在尝试预先解决此问题?这是一个糟糕的方法。在尝试解决之前,请确保您遇到问题。

答案 2 :(得分:0)

如果你必须逐个显示它们,你需要将结果存储在某处,因为http是无状态的,你有两个选择:db或cookie。现在,在我看来,最好将答案存储在像这样的

这样的var中的cookie中
"a:1,b:2,question:answer,.."

然后在最后爆炸它们并检查结果。

答案 3 :(得分:0)

你不应该那样想。 webapp将中间结果存储在数据库中是完全正常的。大多数应用程序每页都会执行多个数据库查询。

您可以使用sessions。这允许您存储耦合到用户的数据。但是,会话数据也存储在某个地方,因此效率不是将其存储在会话而不是数据库中的理由。

答案 4 :(得分:0)

您想要做的是一种向导式流程,每页都有一个“下一步”按钮。这通常用于将结果存储在会话中以用于此类事物。

如果您将在会话中随机提取的问题存储起来,请执行以下操作:

$_SESSION['questions'] = array(
    array(
        'question'    => 'What is the response to life ?', 
        'answer'      => '42', 
        'user_answer' => null,   // Will contain the user answer
        'answered'    => false), // Will be set to true once the question is answered
    array(
        'question'    => 'What is the color of the sky ?',
        'answer'      => 'blue',
        'user_answer' => null, 
        'answered'    => false)
);

然后你可以迭代问题,跟踪已回答的问题。