2014-10-19 106 views
0

我正在開發一個使用php分頁的搜索系統(多個過濾器)。 起初我使用主表單的POST方法。但是,使用POST我無法保持分頁。原因:當用戶按名稱搜索時,例如,當他在下一頁中單擊時,查詢會丟失並返回到第一頁。 爲了解決這個問題,我使用了GET方法。 但使用GET,URL獲取參數。用戶不希望這樣。

例子:

http://mysearch.com/search.php?name=joe&id=1 

我只想

http://mysearch.com/search.php 

我嘗試以下解決方法:

if(typeof window.history.pushState == 'function') { 
     window.history.pushState({}, "Hide", "http://mysearch.com/search.php"); 
} 

但是,當我打的 「上一頁/後退」 的瀏覽器,帶參數的URL也會返回。

有沒有解決方案呢?使用GET或POST與分頁和參數不顯示在URL中?

+1

爲什麼用戶不希望這樣?大多數(如果不是全部)搜索引擎以這種方式工作,通過這樣做,您的訪問者將能夠共享和書籤鏈接。 – jeroen 2014-10-19 02:09:27

+0

用戶的級別,他們告訴我。正如我所說,這種搜索有多個過濾器。具有權限「a」的用戶可以按名稱搜索,但具有權限「b」的用戶不能。即使該字段不會出現在頁面中,也不會顯示在URL中,但他們擔心其他用戶會修改輸入&name參數的網址,並且會在搜索查詢中成功。 – 2014-10-19 02:13:43

+0

後端應該確保用戶只能做他們被允許的內容,而不管他們發送的請求。 – jeroen 2014-10-19 02:15:31

回答

0

您可以像使用$ _GET和沒有SESSION變量/ cookie一樣容易地對$ _POST進行分頁,您只需將分頁變量作爲隱藏值傳遞給HTML表單即可。

如 - 兩個按鈕,其中一個帶您到前一頁,一到下一個:

//prev button 
<form action="paginate.php" method="post"> 
    <input type="hidden" name="prev" value="0"/> 
    <input type="submit" value="Go to previous page"/> 
</form> 

//next button 
<form action="paginate.php" method="post"> 
    <input type="hidden" name="next" value="2"/> 
    <input type="submit" value="Go to next page"/> 
</form> 

//search form 
<form action="paginate.php" method="post"> 
    <input type="hidden" name="prev" value="0"/>   
    <input type="hidden" name="next" value="2"/> 
    <input type="text" name="search" value="User input goes here"/> 
    <input type="submit" value="Search the database"/> 
</form> 

缺點是POST會給使用瀏覽器的後退按鈕時,頁面過期「的錯誤(但不是HTML按鈕),這不是很好。出於這個原因,我寧願$ _GET,也因爲你可以書籤$ _GET查詢,但不是$ _POST。

+0

Thanks @ fred2。在我的情況下,我使用「」。這些頁面數是根據選擇返回的行數動態創建的。我想我將不得不繼續使用GET .. – 2014-10-19 02:55:04

+0

是的 - 使用這種方法並沒有太大的意義,也沒有使用GET。你可以用POST來完成,但實現它的方法可能是使用JavaScript並將onclick事件分配給每個數字,然後通過POST動態提交變量。但是,這真的讓你無緣無故地撞向一堵磚牆。 – fred2 2014-10-19 16:17:45

+0

哈哈哈哈明白了。不會這樣做。我將堅持使用GET方法。謝謝! – 2014-10-19 17:44:58