-4

我想检测是否已运行特定的 php 脚本或是否已提交特定的表单,如果是这样,请不要让用户在没有先完成单击提交按钮的情况下去网站上的任何其他地方!如果您返回并想要刷新,或者您想单击我网站上的其他内容,不,不,您不能,因为您没有完成之前的任务,网站只会为您重新加载之前的表单或结果,并且您必须单击表单按钮“退出”或标题链接“返回主页”才能继续。

我不想这样做的原因是因为我正在用 php 模拟一个简单的战斗游戏,但我不知道如何实现这一点。也许用javascript?

我什至提供了一张图片来更好地理解我:) 我真的希望有人为此提供 php 或 javascript 解决方案。

我在说什么的图片

编辑:在你投反对票之前,至少给我一些提示,在哪里寻找解决方案并进行研究......我迷路了,不知道要搜索什么

4

1 回答 1

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则代码会自动执行以确保它们仍处于战斗阶段,而不是让它们简单地单击链接以退出当前代码执行路径并转到其他地方。

于 2013-08-04T10:18:04.070 回答