0

我正在为一些学生做一个测验(php 和 mysql),测验是基于他们必须观看的视频..

顺序是这样的..
1) 他们为每个用户输入一个唯一的网页
2) 访问带有视频的页面供用户观看...
3) 在页面底部有一个按钮“回答测验”
4)当他们单击按钮时,他们会被发送到带有测验的页面

这就是问题发生的地方,我想阻止用户再次观看视频,但是当他们点击后退按钮时,他们又可以观看视频了

我在 mysql db 的视频表中阻止了视频,但视频被缓存或其他东西,所以这不是阻止用户在点击后退按钮时再次观看视频的方法...... 关于如何实现这一目标的任何想法?

任何帮助表示赞赏......

4

1 回答 1

0

从您的最新评论中检查,我假设您有一个表格,expired_quizzes其中至少包含三列,quiz_idquiz_filename布尔值is_active。我也会将表格标准化为 a userid,因此如果用户 A 观看它并参加测验,用户 B 仍然可以看到视频(不过,与朋友作弊更容易)。如果没有看到任何代码或结构,很难确切地知道发生了什么,但请尝试检查以下几项:

如果您根据搜索查找测验,并且网页使用变量 $_GET,则无论何时访问该网页,它都会加载测验。所以考虑:

http//www.yourwebpage.com/?quizfilename=viewablequiz.mp4

根据您的 PHP 指令,它将始终加载viewablequiz.mp4. 有两个建议可以防止它。

  • 不要加载$_GET['quizfilename']。而是$_GET['quizid']使用其他搜索参数从查询中加载和调用文件名,例如:

    'SELECT * FROM expired_quizzes WHERE quiz_id='{$_GET['quizid']}' AND is_active=1 LIMIT 1;'

然后,返回row['filename']您的 PHP 代码,或者如果没有找到结果(没有未过期的测验),则处理对用户的响应。

  • 通过 AJAX 加载视频。如上所述在 PHP 端使用类似的查询,但由于它需要在加载后进行查找,因此刷新屏幕不会加载任何内容。

为了防止作弊,您可能还应该有另一个表来记录每次观看视频的时间,并带有时间戳和用户 ID。它可以通过同时查看谁在测试和查看来帮助检测作弊企图。

当然,始终要防止 SQL 注入,不要将用户输入直接放入 SQL 语句中。

要进行更详细的分析,您应该在问题中只发布相关的 PHP、HTML 和 SQL。

于 2012-11-26T15:31:01.810 回答