2013-05-25 52 views
0

我有一個網頁叫做test_photo.php,人們獲得我們發佈到(test_photo.php在頁面上做一個POST請求GET請求刪除POST信息

<form id="search_photos" action="test_photo.php" method="post"> 
    <select name="photographer" id="photographer"> 
     <option selected="selected" value="x">Any Photographer</option> 
    </select> 

    <--Removed for clarity sake --> 

    <input name="Submit" value="Search Now &gt;" id="Submit" type="submit"> 
</form> 

後,涉及從形式)我們有分頁功能來幫助分解顯示的大量數據。這是通過GET請求處理的,url可能看起來像http://foobar.com/xpath/test_photo.php?page=0

問題是,每當有人在頁面上執行get請求時,POST數據就會消失。有誰知道我們可以解決這個問題的任何方式。

+0

對此的批准完全錯誤。如果表單未提交或重新提交,則無法顯示POST數據。如果您希望將其存儲在多個頁面中,請改用GET,並使用GET值在下拉框中設置默認值。 – OptimusCrime

+0

我們可以發佈到網頁上,當我們訪問頁面時,post_print_r顯示了這個: Array([LocationName] => 1 [攝影師] => x [圖片] => x [提交] =>立即查詢>) 它只有當我們在頁面上獲取請求時,我們有一個問題,因爲發佈數據不會跟隨獲取請求 –

+0

@Artful_dodger:是的,這是設計。就像我所說的,除非是剛剛提交表單的頁面,否則不能定義POST變量。這是supposted以這種方式工作。點擊提交按鈕後,POST實際上就是您最終得到的值。如果你做一個簡單的GET請求,你不只是點擊任何提交按鈕。你看? – OptimusCrime

回答

3

奧基,試圖排除這裏的明顯。

您以不正確的方式混合了GETPOST。如果您的表單中包含您不希望公開的值,並且在提交(如登錄)後不再需要這些值,則只應寫入POST。在這裏,你有價值,你進行到下一頁等。

這將永遠不會工作,因爲如果您發佈表單,POST-值僅在您提交表單後可用。如果您嘗試進行全新刷新(不重新發布表單),則會看到值已經消失。

你應該怎麼做,發佈表格爲POST,然後建立一個查詢GET-參數。

page.php?page=1&photographer=1&location=3 

這是地址過濾器的正確道路。看看Google如何存儲當前的搜索查詢(google.com?q=your search)。規則是「不同頁面需要的值」?只需GET。這也使得人們可以將搜索添加書籤或將其發送給應用了所有過濾器的其他人。

+0

+1正確的答案,但我不知道他是否會明白你在說什麼:) –

+0

是的,這是比我的好,但如果他不明白,後值不持久,他會可能在這裏困惑。無論如何,+1! –

0

首先,POST數據不會消失。它在那裏,但是如果它首先看到GET數據,那麼你的提交處理程序可能會忽略它。

由於這個小演示將展示:

<? 
    print_r($_REQUEST); 
?> 

<form action="/path/to_this/page.php?get=yes" method="post"> 
    <input type="text" name="test" value="SomeVal"/> 
    <input type="submit"> 
</form> 

但是,這麼說,這聽起來像你最簡單的選擇是提交數據的頁面沒有它的GET參數。我假設,你不需要兩者(即你不關心在發佈數據的情況下頁碼是多少)。

但是,無論如何,您應該能夠同時查看GET和POST數據。

現在,當你說「有人在頁面上執行獲取請求」時 - 如果你的意思是,有人在瀏覽器中粘貼URL並點擊Enter,那麼在這種情況下你將永遠不會看到POST數據。您只會在表單提交後才能看到它。

0

我不認爲GET請求會破壞您的POST數據。通過添加諸如 print_r($ _ POST)的調試語句來加載「目標」頁面時,檢查您的$ _POST數據是否完整無缺。 到您的網頁。它應該打印出整個$ _POST數組來檢查。

如果您的瀏覽器支持此類功能,右鍵單擊可能允許您「檢查元素」以在更好的格式視圖中查看陣列。

你可以用print_r($ _ GET)來做同樣的事情;也可以查看它包含的內容,或者其他任何數組。

+0

它確實銷燬它。嘗試發佈表單,然後刷新頁面(如果瀏覽器要求您重新發送表單,請單擊否)。價值觀消失了。 – OptimusCrime

+0

GET值不會破壞POST的值。你所說的沒有任何意義,因爲POST在提交表單時只發送一次,並且它不會在多頁面加載時持續存在。 –

+0

@AlejandroIván你誤會了OptimusCrime,你們都說同一件事,但用不同的詞。 –

0

GET值不會破壞POST的,你必須更好地理解這一點,就是這樣。

當您使用POST提交表單時,加載的頁面會生成一個$ _POST數組,並傳遞值。當您加載另一個包含GET參數的頁面時,POST會消失,因爲它在頁面加載時並不持久。

你所要做的就是存儲這些值(例如使用會話)以使它們持久。例如:

<?php 
    session_name("any_name_for_starting_a_session"); 
    session_start(); 

    if (isset($_POST)) $_SESSION['passed_values'] = $_POST; // Store the values if POST is sent 

    if (isset($_SESSION['passed_values'])) { // Getting the values if stored 
     $post = $_SESSION['passed_values']; 

     // Here you can work with $post ... 
     //... 


     // If you need to delete the stored values 
     // unset($_SESSION['passed_values']); 
    } 
?>