我想检测某个特定的PHP脚本是否已经运行,或者是否已经提交了特定的表单,如果是真的,请不要让用户去网站的其他任何地方而不先点击提交按钮!如果你回去想要刷新,或者你想点击我网站上的其他内容,不,不,你不能,因为你没有完成你以前的任务,网站将只为你重新加载以前的表格或结果你必须点击表单按钮“退出”或标题链接“返回主页”继续。
原因我不是因为我正在使用php模拟一个简单的战斗游戏,我不知道如何实现这一点。也许用javascript?
我甚至提供了一张图片来更好地理解我:)我真的希望有人为此提供php或javascript解决方案。
编辑:在你至少向我提供一些提示,在哪里寻找解决方案并进行研究......我迷路了,不知道该搜索什么答案 0 :(得分:0)
我这样做的最简单方法是使用会话变量和代码的单一入口点。
如果单个index.php文件让用户通过代码并根据需要显示输出,那么我只需使用会话对象中的变量将用户重定向到同一页面,直到它处于不同的状态。
您的代码中包含以下内容:
if ($_SESSION['in_combat'])
{
// redirect user back to the same page
}
else
{
// allow other action as requested by link clicked
}
应该这样做,如果会话设置为true
,那么任何操作都会将用户重定向回需要他们注意的页面,否则,它将允许他们根据链接执行任何操作他们点击了。
编辑:通过单一入口点,我的意思是代码ALL在单个index.php
页面上运行,然后控制代码执行的进一步流程。该索引页面将检查各种会话变量,解释并执行各种POST
,GET
请求等。在编写代码时,您可以做的最好的事情是确保您的用户只能执行他们应该执行的操作。
编辑2:首先,单个入口点是确保PHP根据需要执行的一种方式 - 这意味着所有HTML都通过单个PHP代码显示。我通常通过创建一个基本的index.php页面来执行此操作,然后根据传递给它的变量来指示执行流程 - 无论它们是在会话中还是发布/获取请求。
虽然它可能并不总是最有效的方法,但我通常会有一个case语句来控制显示和执行的内容,具体取决于传递给代码的变量。
如果您已经设置了MVC,那么这是控制向用户显示的页面执行的明显位置 - 这显然是index.php页面本身。
对于$_SESSION
变量,现在很容易,将控制流放入MVC,同时将触发它的代码嵌入到程序的执行路径中。我的意思是这个控制流程:
if($_SESSION['inCombat'])
{
// This is where you redirect the user to code that ensures that the user cannot get out of the combat sequence if they are in it already.
}
else
{
// Normal Flow of execution...
}
if($hasInitiatedCombat)
// or something like the following:
// if($_REQUEST['startCombat']==true)
{
// This is where the code execution path leads to when combat is initiated.
$_SESSION['inCombat']==true;
}
使用这个简单的代码,每当人进入战斗(或其他)时,会话变量被设置为TRUE
,那么他们请求的任何页面链接都会检查此变量以确定执行的代码。如果它被设置为TRUE
,则代码会自动执行以确保它们仍处于战斗阶段,而不是允许它们只需单击链接即可退出当前代码执行路径并转到其他位置。