0

我已经为每个页面构建了一个复杂的多页网络调查,其中包含多个“条件”(问题变体)。在每个页面提交后,一个单独的文件处理数据并将其插入数据库,之后用户被随机引导到下一个问题的一个条件redir.php。这种结构的一个问题是,如果用户导航回已提交的页面并重新提交,则会将新行插入数据库,并再次调用随机重定向,从而将用户引导至(可能)不同的情况。例如,问题 3 有六个条件 (AF),因此,例如,如果某人完成了问题 2 并被定向到 3B,然后返回问题 2 并重新提交页面,他们将登陆 3A-3F 中的任何一个(大多数可能与推荐人不同)。

我希望能够检查用户是否已经提交了他们的响应,如果是,向他们显示一条错误消息(沿着“页面已提交。重定向...”的行),然后重定向到最后一个他们查看的页面。我已经广泛寻找解决方案,但还没有找到可以处理多页条件和随机化的解决方案。最好的方法是什么 - 在每个页面上包含一个数据库查询以检查记录是否已经存在?使用会话变量?

4

2 回答 2

1

我想出了一个解决方法,涉及在会话中存储已查看页面的 ID,然后如果用户尝试导航回已完成的页面,则从错误页面调用它们。

根据 doniyor 和 Alien 先生的建议(谢谢),我在数据库插入后将这行代码插入到表单处理文件中:

$_SESSION['submStatus_2'] = true;    //Question 2 submitted

然后在每个问题页面的开头,我添加了以下代码(根据需要替换$_SESSION变量中的数字):

session_start();
if(isset($_SESSION['submStatus_2']) && $_SESSION['submStatus_2'] == true) {
   header('Location: redir_3.php'); //Message Page
   exit;
}

$_SESSION['visited2'] = "2A";    //Page ID, current question

如果用户从问题 2(条件 A)导航回问题 1,她/他将被重定向到redir_2.php包含以下代码的文件:

session_start();
$last = $_SESSION['visited2'];

header("Refresh:3; url=$last.php");

并显示一条错误消息,然后在几秒钟后重定向,如下所示:

<p>Page already submitted. Redirecting...</p>
<p>If you are not automatically redirected within a few seconds, please click <a href="
    <?php echo htmlspecialchars($last . ".php")?>">

这可能不是实现我的目标的最佳方式,但它确实有效。

于 2013-05-07T05:41:56.370 回答
0

already submitted如果用户提交相应的步骤,如何设置为 true 进入会话。那么您可以先在会话中检查,如果是这样,则表示用户已经提交了此步骤。

http://www.w3schools.com/php/php_sessions.asp 这里是非常好的会话指导

于 2013-05-02T06:12:02.027 回答