2013-05-02 53 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這裏是非常好的會議指導

相關問題