我想我被困住了,我真的希望有人能在这里帮助我。
因此,我正在尝试使用 PHP 和 JS 制作类似于测验应用程序的东西。这个想法是给用户一张包含 4 个可能答案的图片,他必须猜测那张图片中有什么。用户根据他单击的答案获得 x 分,并被重定向到下一页,包括图片和答案,等等。用户也有机会跳到下一页。事情是这样的:
我如何检查用户是否已经回答了特定问题,所以如果这个问题已经被回答,我可以将他重定向到下一页?基本上,这就像防止作弊一样,使用户无法从同一个问题中获得越来越多的分数。
我目前坚持使用 MySQL 解决方案,为每个页面创建列,在那里存储值,然后在用户尝试访问特定页面时比较它们,根据存储的值重定向他。它是唯一的解决方案吗?
如果我的英语不是那么好,我很抱歉,我希望你们能理解我的问题。:)
4 回答
将每个问题的唯一值存储到会话变量中。如果该会话变量存在,则重定向到下一页。
// init.php
session_start();
// question1.php
require 'init.php';
if (isset($_SESSION['question1'])
header('location: http://mysite.com/question2.php');
else
$_SESSION['question1'] = TRUE;
// put the question code here
您可能需要使用 MySQL db,因此它是一个永久解决方案,但您不需要为每个页面创建新列。你可以只有 1 列和行数据是一个 JSON 对象,你可以继续引用它
{page1:'done'}
那么当你要保存时,它可能看起来像这样
{page1:'done',page2:'done'}
您可以为此使用 json_encode 和 json_decode php 函数。
您提到,该用户可以登录和注销。因此,我假设您已经有一个用户数据库,并且您希望以某种方式存储特定用户已经回答了哪些问题,但是您不知道将这些信息存储到 MySQL 数据库中的正确方法是什么。
现在,如果我错了,我很抱歉,你的意思,但如果我的假设是正确的,那么有几种方法,如何存储你想要保存的数据。例如,您可以在包含用户的表中添加另一列,该列将包含用户回答的最后一个问题。每次用户回答下一个问题时,您都可以更新该值。
因此,即如果您有 4 个问题,则该列将为空。当您进入有问题的页面时,您会查看数据库,该用户回答的最后一个问题是什么。由于该用户没有回答任何问题,因此该列仍然是空的,您可以问他第一个问题。如果他回答,您现在可以更新值为 1 的列。下次同一用户访问带有问题的页面时,您再次查看数据库到同一列,您将获得值 1。所以现在您已经问第一个问题,你可以问用户下一个问题。
如果问题没有按特定顺序提出并且可以随机呈现,您还有其他可能的解决方案:创建参考表。您可以创建新表,其中将包含三列:user_id、question_id 和该问题的答案(如果您也需要保存答案)。现在,每次用户打开生成问题的页面时,您都可以查看带有问题的表格并选择用户未回答的所有问题。所以你做这样的事情:
SELECT *
FROM questions_table
WHERE question_id NOT IN
(SELECT question_id
FROM questions_answered_by_users
WHERE user_id=$currentUserId)
一个永久的解决方案,我相信唯一的解决方案是某种数据库(mysql、xml、文件等)服务器端。另一种可能被欺骗的方法是使用 cookie,使用 json_encode 创建一个 json,使用该 json_encode 访问过哪些页面,并将它们保存在一个有效期为 30 天的 cookie 中。虽然这可以通过删除 cookie 或打开不同的浏览器来欺骗。