Php 如果页面已被访问,则重定向

Php 如果页面已被访问,则重定向,php,javascript,Php,Javascript,我想我被困住了,我真的希望有人能帮助我。 所以,我尝试用PHP和JS制作一个类似于测验的应用程序。这个想法是,给用户一张有4个可能答案的图片,他必须猜测图片中的内容。用户根据单击的答案获得x点,并重定向到下一页,包括图片和答案,依此类推。用户也有机会跳到下一页。但事情是这样的: 我如何检查用户是否已经回答了特定的问题,这样,如果这个问题已经回答,我就可以将他重定向到下一页?基本上,这就像是防止作弊,这样用户就不能从同一个问题中得到越来越多的分数。 我目前一直使用MySQL解决方案,为每个页面创建

我想我被困住了,我真的希望有人能帮助我。 所以,我尝试用PHP和JS制作一个类似于测验的应用程序。这个想法是,给用户一张有4个可能答案的图片,他必须猜测图片中的内容。用户根据单击的答案获得x点,并重定向到下一页,包括图片和答案,依此类推。用户也有机会跳到下一页。但事情是这样的: 我如何检查用户是否已经回答了特定的问题,这样,如果这个问题已经回答,我就可以将他重定向到下一页?基本上,这就像是防止作弊,这样用户就不能从同一个问题中得到越来越多的分数。 我目前一直使用MySQL解决方案,为每个页面创建列,在那里存储值,然后在用户尝试访问特定页面时比较它们,根据存储的值重定向用户。这是唯一的解决办法吗?
如果我的英语不是很好,我很抱歉,我希望你们能理解我的问题

将每个问题的唯一值存储到会话变量中。如果该会话变量存在,则重定向到下一页

// 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数据库,所以这是一个永久性的解决方案,但您不需要为每个页面创建新列。 您可以将1列和行数据作为JSON对象,您可以继续引用它

{page1:'done'}
那么,当你要保存它时,它可能是这样的

{page1:'done',page2:'done'}
您可以使用json_encode和json_decode php函数来实现这一点


您提到,该用户可以登录和注销。因此我假设,您已经有了一个用户数据库,并且您希望以某种方式存储特定用户已经回答的问题,但是您不知道,将这些信息存储到MySQL数据库中的正确方式是什么

很抱歉,如果我弄错了,你的意思是什么,但是如果我的假设是正确的,那么有几种方法,如何存储你想要保存的数据。例如,您可以向包含用户的表中添加另一列,该列将包含用户回答的最后一个问题。每次用户回答下一个问题时,您都可以更新该值

也就是说,如果你有4个问题,该列将为空。当您带着问题来到页面时,您会查看数据库,该用户最后回答的问题是什么。由于该用户没有回答任何问题,因此该列仍然为空,因此您可以向他询问第一个问题。如果他回答,您现在可以使用值1更新列。下次,当同一个用户带着问题访问页面时,您再次查看数据库中的同一列,您将得到值1。现在你已经问了第一个问题,你可以问用户下一个问题

如果问题不是按特定顺序提出的,而是可以随机提出的,您还有其他可能的解决方案:创建一个参考表。您可以创建新表,该表将包含三列:user\u id、question\u 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_编码的json,并将访问过的页面保存在一个有效期为30天的cookie中。尽管删除Cookie或打开其他浏览器可能会欺骗您。

您是否尝试过使用$\u会话变量?是的,我尝试过设置$\u会话变量,但它运行了一段时间。但是,当我注销然后重新登录时,我可以再次访问第一个问题。如果你想为一个用户保存永久回答的问题,你必须将它们存储在某种永久存储中。最常用的是MySQL数据库。在我看来,您已经在使用最好的解决方案了。了解用户是否回答了特定问题的唯一可靠方法是在数据库中跟踪。任何客户端解决方案,包括cookie和会话变量,都可能被篡改。谢谢!我将对此进行研究。这部分是mongoDB的工作原理。稍后着陆时,我们将向您发送更多链接/代码,我们现在乘坐飞机旅行。我强烈反对使用此解决方案。最好使用引用表,因为这些表可以很容易地编制索引,即使页面上有数十万用户,也能很好地执行。虽然这个答案中建议的解决方案会起作用,但它对性能的影响更大,而且每次您想要将一些数据存储到数据库时,执行json_编码和json_解码也是一种障碍。参考表确实是处理您的任务的方式。当然,还有其他解决方案。你可以用crea
如果他愿意,可以在表上创建行和索引。但我认为他只需要简化他的方法,因为这只是关于被访问者的问题。我的问题几乎是随机提出的。我在考虑制作另一个表来存储用于比较的值,但我真的希望我不需要走这条路,因为我对数据库还是很陌生,不知道表之间需要什么样的关系。我想出了一个解决方案——与对照表建立一对一的关系并从中获取值,但我最终得到的表中每个问题都有20多列,老实说,这让我觉得我做错了什么。是的,因为这样做的方法不是为每一页创建列,而是我的答案中解释的用户参考表。您将有一个表,您将在其中存储您的问题。每个问题都必须有一个唯一的ID。现在,每次用户回答问题时,您只需将答案存储在单独的表中,该表必须有两列:user\u ID和question\u ID->如我的答案中所述,以及SQL如何为每个用户选择他没有回答的问题OK,谢谢!我不知道我应该用什么样的桌子,所以,你的帖子真的帮助了我。我将尝试获取有关使用参考表的更多信息。谢谢!此答案可能有助于您更好地理解问题: