1

这篇文章的标题是不言自明的。假设我有一个用 PHP 编码的测验系统,并且用户登录以回答问题,在他/她正确回答测验后,我们将如何结束用户的轮次?

考虑这个流程图:

测验问题流程图

在用户正确回答问题后,我想编写一个可能的 PHP 函数,该函数将完全关闭该级别,这样用户就不必再次回答它,此外还可以通过连续回答并获得不必要的分数来作弊。

我只是想知道是否有解决此问题的方法或工作。使用数据库来查明用户是否已经回答了这个问题已经在我的想法列表中。但我希望有人能想出更好的东西。我希望我说清楚了。

4

1 回答 1

2

您如何在整个测验过程中跟踪他们的答案?我会使用会话,将他们给出的每个答案与问题 ID 一起存储。在他们单击“完成”之前不要给他们任何积分,然后将其存储到数据库表中:
他们从会话中获得了什么积分;当前问题 ID;他们的用户 ID

然后当用户提出问题时,检查数据库,如(大致):

SELECT
  TotalPoints
FROM
  tblQuestionsAnswered
WHERE
  UserID = $UserId AND
  QuestionID = $ThisQuestionId

如果没有返回任何东西,他们就没有从这个问题中得到任何观点。

您不需要或不需要 200 个表。每行存储一个表:
questionID、userID、totalpoints,可能还有其他东西

如果您希望能够为以后存储记录,即当他们注销、离开站点、稍后再回来等时,没有更好的方法。
(请不要考虑使用文件,它会很乱对于这种情况)

你还需要考虑其他事情,比如他们是否有一个针对问题 A 的会话,如果他们去问题 B,你是否要破坏另一个会话并且他们必须从头开始问题 A?我很可能会或你会在所有地方举行会议,为什么有人想要开始一个测验,去另一个,然后再回到那个。

如果您希望他们能够做到这一点,您最好也将他们的进度存储在数据库表中。也许您可以使用存储他们的积分的表(在我上面的示例中为 tblQuestionsAnswered)并有一个额外的列,如“IsComplete”。
如果设置为“是”,则向他们显示他们已经完成的问题的分数,如果“否”,那么他们从一个新问题开始并解决问题,如果设置为“partdone”,那么您的脚本将查询另一个表(例如 tblQuestionProgress),将他们的进度从该表拖到会话中,从该表中删除他们的进度,将另一个表设置为 IsComplete = no,然后他们就关闭了。

于 2013-09-08T22:01:39.037 回答