如果用户已提交页面,则显示错误消息,然后重定向到引用页面

时间:2013-05-02 06:07:06

标签: php mysql database forms

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

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

2 个答案:

答案 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。那么你可以先在会话中检查,如果这是真的,那就意味着用户已经提交了这一步。

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