2012-01-09 126 views
0

我想讓用戶在提交表單後返回到帶有分頁控件的上一頁。通常我會使用帖子,但這不會傳遞到網址中。發佈vs獲取URL參數?

建議使用get而不是?

+0

你可以提交表單POST中並重定向到一個網頁(使用['header'](http://uk3.php.net/manual/en/function.header.php))和GET參數,這將允許書籤。 – Alex 2012-01-09 17:02:24

+0

當然。你可以也應該使用'GET'來檢索。 – 2012-01-09 17:02:31

+0

什麼樣的形式?只是一個搜索表單或用戶的詳細信息等? – Treffynnon 2012-01-09 17:06:31

回答

1

沒有什麼能夠阻止你保存表格中的分頁信息。比如你是在:

http://mysite/list.php?page=3&maxperpage=50 

頁面上的鏈接可以在用戶的​​頁面和maxperpage重定向到

http://mysite/edit.php?id=8475&page=3&maxperpage=50 

保存爲隱藏控件到窗體每次形式展現時間(重裝他們在回傳失誤的情況下)

<input type="hidden" name="page" value="<?php echo $_REQUEST['page']; ?>" /> 
<input type="hidden" name="maxperpage" value="<?php echo $_REQUEST['maxperpage']; ?>" /> 

然後回發完成後,使用_POST隱藏字段來重定向到前一頁:

header('location: http://mysite/list.php?page='.$_POST['page'].'&maxperpage='.$_POST['maxperpage']); 

很顯然,我已經在那裏如驗證跳過了很多東西,所以不要忘了把一些...

+0

我的表單有十幾個參數,所以我應該爲每個參數保留一個隱藏的控件或簡單地切換到? – Paul 2012-01-09 17:38:25

+0

當你傳遞這些分頁/過濾器/搜索參數時,你會繼續使用GET,但是當你得到一個表單(比如編輯表單)時,你會將這些參數推送到隱藏字段中。然後,當你完成這些隱藏的領域(例如保存後),你將這些隱藏的領域推回到網址並重定向用戶...... – 2012-01-09 19:10:23

1

它取決於很多事情,主要是你通過表單傳遞什麼內容。

一般情況下,如果你在表單中有一個textarea,通過GET發送它是一個壞主意,因爲你更有可能達到URL的最大字符限制。 顯然,如果你傳遞一個文件,那麼它需要POST。 哦,顯然如果它是敏感數據(例如用戶名/密碼),那麼使用GET並不是一個好主意。

除此之外,我認爲只要在任何地方使用數據前「清潔」數據,就不會使用GET代替。

如果使用GET不是一個選項,那麼您可以改爲使用POST,但將所有內容保存在COOKIE或SESSION變量中,以便您在提交後使用分頁/麪包屑時可以在上一頁中檢索形成。

+0

我總是忘記SESSION變量。這可能是一個更好的解決方案,除了用戶不能正確書籤的事實? – Paul 2012-01-09 17:12:39

+0

@Paul確切地說,會話在服務器上,因此不是URL的一部分。而你是書籤的網址,所以我不會推薦它... – 2012-01-09 17:19:49

+0

@Paul不,不幸的是,這意味着用戶將無法將URL加書籤。唯一的方法就是給他們一個GET網址。 – Nick 2012-01-09 17:22:12

1

擴大一點對亞歷克斯tandu的評論:

當你發送數據將改變服務器上的狀態,您應該使用POST。您在請求數據時或在執行其他一些會使服務器狀態保持不變的操作時應該使用GET。

所以,是的,你是正確的使用POST來提交你的表格,GET不建議在這種情況下。

然後在帖子將用戶重定向到他們的上一頁之後,也許在短暫的延遲之後查看感謝信息。

+0

我基本上只是從我的數據庫檢索數據,並顯示它,所以我並沒有真正改變服務器的狀態,除非我錯誤地閱讀了你的帖子 – Paul 2012-01-09 17:40:04

+0

當你說'提交之後'我假設類似註冊表單。如果您正在做一些類似於搜索表單並顯示結果的內容,那麼您應該使用GET,但要注意添加到queryString的內容。這具有使得結果頁面url保存/重複的優點,所以它可以被添加到例如收藏中。我們可以使用更多關於你想用這種形式實現的信息。 – Stuart 2012-01-09 20:20:59