我为每个页面构建了一个复杂的多页网页调查,其中包含多个“条件”(问题变体)。在每个页面提交之后,一个单独的文件处理数据并将其插入数据库,之后用户通过redir.php
被随机指向下一个问题的一个条件。这种结构的一个问题是,如果用户导航回提交的页面并重新提交,则会在数据库中插入一个新行,并再次调用随机重定向,从而导致用户处于(可能)不同的状态。例如,问题3有六个条件(AF),所以如果有人完成问题2并被引导到3B,然后回到问题2并重新提交页面,他们将降落在3A-3F中的任何一个(大多数)可能与推荐人的条件不同。)
我希望能够检查用户是否已经提交了他们的回复,如果是,请向他们显示错误消息(沿着“已经提交的页面。重定向...”),然后重定向到他们查看的最后一页。我已经广泛寻找解决方案,但没有找到一个可以处理多页条件和随机化的解决方案。最好的方法是什么 - 在每个页面上包含一个数据库查询以检查记录是否已经存在?使用会话变量?
答案 0 :(得分: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")?>">
这可能不是实现我的目标的最好方法,但它确实有效。
答案 1 :(得分:0)
如果用户提交相应的步骤,请将already submitted
设置为true。那么你可以先在会话中检查,如果这是真的,那就意味着用户已经提交了这一步。