2009-10-15 61 views
1

我有一個需要幾個步驟的註冊表單。處理返回按鈕

在其中一個步驟中,他們填寫一些信息,並選擇一些要上傳的圖像。

下一步,他們看到他們的應用程序的審查。

接下來可能發生的事情是,如果用戶看到他不喜歡的東西,他會點擊後退按鈕來更改表單上的內容。

但是:

1)他可能會得到大約形式提交這些瀏覽器的警告消息的一個

2)如果他不回去,我要的文件上傳模塊不同的行爲(也許顯示他上傳的圖像,允許他更改他想要的圖像)

如何在用戶點擊後退按鈕時更好地控制用戶看到的內容?

PS。我使用PHP(HTML,JavaScript,無論什麼......)。 對於應用程序進程的其他部分,我使用ajax行爲來保存他們實時執行的任何操作(檢查框等)。所以我做了「繼續」按鈕只是一個常規鏈接。 然而,在這裏,上傳文件會使這個過程更加困難。

回答

0

我不確定你可以做的事情有很多瀏覽器警告發生,如果頁面已發佈到。我會爲處理狀態的用戶提供一個單獨的後退按鈕(嚮導樣式)。如果他們確實使用瀏覽器的後退按鈕並忽略瀏覽器警告,那麼您可以使用會話變量或cookie等方式跟蹤用戶的上次已知狀態。

+0

如果他們使用後退按鈕,我不認爲它會從服務器獲取我的網頁,它可能只是顯示最後認爲,瀏覽器得到的,對? – 2009-10-15 22:31:19

+0

@nute:在實踐中,這在很大程度上取決於您使用的緩存控制標頭。如果你告訴瀏覽器不要緩存頁面,那麼通常不會。 – Shog9 2009-10-15 22:41:38

2

您幾乎在回答自己的問題意識到你需要對錶單的每個階段進行編碼,以便了解「狀態」。我做了一些非常相似的聲音表單,其中我跟蹤了會話變量中的每個階段,只在「確認您的詳細信息」階段之後提交數據(如在db中)。

如果您有興趣,您可以看到an example here。在這種形式下,文件上傳部分發生在「贊助細節」階段。這些表單被設計爲使用或不使用Javascript。沒有任何東西會被髮送或保存到最後一個階段,因此可以隨意播放 - 上傳一些示例文件,然後退一步看看會發生什麼。

P.S.使用會話變量跟蹤每個階段的優點(我發現)是,它使保存和重新構建表單變得非常簡單,因爲您需要做的就是序列化$ _SESSION數組並將其保存到數據庫字段。

1

1)他可能會得到大約形式提交這些瀏覽器的警告消息的一個

參見:Post/Redirect/Get

2)如果他不回去,我要的文件上傳模塊以表現不同(也許顯示他上傳的圖像,允許他改變他想要的圖像)

參見:da5id's answer

+0

+1元回答:) – da5id 2009-10-15 22:48:27

1

關於點1):使用Post/Redirect/Get模式。這種模式很簡單,但很有效。在用戶POST一個表單後,用GET請求將它們重定向到下一頁。

像這樣(未經):

<?php 

    // let's say you determine the current step in the wizard with a GET parameter 
    $step = isset($_GET[ 'step' ]) ? intval($_GET[ 'step' ]) : 1; 

    if('post' == strtolower($_SERVER[ 'REQUEST_METHOD' ])) 
    { 
     // we have a POSTed form submission 

     /* 
      handle form submission 
     */ 

     if($success) 
     { 
      // successful form submission, so increment step 
      $step += 1; 
     } 
     else 
     { 
      // NON-successful form submission 
      /* 
       maybe save some error messages in a SESSION 
      */ 
     } 

     /* 
      complete the POST/REDIRECT/GET pattern 

      redirect to the desired step in the wizard process with a GET request, 
      this prevents re-submission by browser refreshes and backbuttons 
     */ 
     header('Location: http://example.com/yourformwizard?step=' . $step); 
    }