2015-09-01 78 views
0

我在這裏尋找一些建議。我之前發佈了一個問題Disable submit buttonColdfusion表單提交禁用提交按鈕

  1. 我有一個提交給自己,並期待liek下面

    <cfif isdefined(form.submit)> 
        thank you for taking the test 
    <cfelse> 
        Actual form with radio buttons, ques, ans 
    </cfif> 
    
  2. 現後,用戶需要經過測試和命中提交併在窗體的感謝部分的形狀。在那時,如果他點擊瀏覽器上的按鈕,他仍然看到該表單。

  3. 我在這裏有服務器端驗證,如果他刷新表單,他會再次被帶到感謝頁面。

  4. 我試圖禁用提交按鈕,但這不會始終在所有瀏覽器上工作。
  5. 任何人都可以請告訴我在這種情況下我最好做什麼。
  6. 我應該做一個history.forward();在頁面上?以便當用戶點擊瀏覽器按鈕時,他仍然保持在同一頁面上。
  7. 或者我應該以這種方式清除緩存,以便當用戶點擊返回按鈕時,他看不到表單,但只是停留在感謝頁面上。

    <cfoutput> 
        <cfheader name="expires" value="#now()#"> 
        <cfheader name="pragma" value="no-cache"> 
        <cfheader name="cache-control" value="no-cache, no-store, must-revalidate"> 
    </cfoutput> 
    
  8. 或者是有什麼我不知道,上面這些只是黑客,不應該這樣做。非常感謝您的答覆。提前致謝。
+1

我建議試用6和7. –

回答

2

如果用戶有一個唯一的ID,那麼你可以通過查找數據庫記錄或類似的東西來檢查他們是否已經完成調查。否則,一個簡單的選項是在提交表單後設置會話變量。會話時間有限,在新的瀏覽器會話中會有所不同,因此不能保證再次停止同一人提交調查,但類似這樣的事情可能會解決您的問題。

<cfif structKeyExists(form,"submit") or structKeyExists(session, "completed")> 
    <cfif !structKeyExists(session, "completed")> 
     <!--- do validation etc here, if all good then ---> 
     <cflock scope="session" timeout="5"> 
      <cfset session.completed = true> 
     </cflock> 
    </cfif> 
    thank you for taking the test 
<cfelse> 
    Actual form with radio buttons, ques, ans 
</cfif> 

或者您可以通過使用一個Cookie(cfcookie)而不是使用一個會話做到這一點。

+0

感謝您的意見。我正在做類似上面的事情,但這並不妨礙用戶在瀏覽器後退按鈕時不能看到表單... – user747291

+0

您只需檢查'。如果確實如此,那麼您知道他們已經完成了重定向。 –

+0

這隻適用於頁面請求。使用瀏覽器返回不會導致請求頁面。 –