2013-05-02 88 views
0

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

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

回答

1

我想出了一个解决办法,包括存储浏览过的网页的ID在会话,然后从错误页面调用他们,如果用户试图浏览回完成页。

基于从doniyor和外国人先生(感谢)我插入这行代码的形式处理文件数据库插入后建议:

$_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),他/她将被重定向到包含此代码的文件redir_2.php问题1的:

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")?>"> 

这可能不是实现了我的目标是最好的方式,但它的工作原理。

0

如果用户提交相应的步骤,将already submitted设置为true即可。那么你可以首先检查会话,如果这是真的,这意味着用户已经提交了这一步。

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

相关问题