2012-03-26 75 views
1

我有一個表單提交到同一頁面。現在,當它被提交併處理後,我需要它有一個唯一的查詢字符串。php設置查詢字符串

因此,例如,用戶輸入一些信息,然後點擊提交,然後頁面將信息保存在服務器上,然後服務器用一個唯一的信息查詢字符串將其吐出。

如果我嘗試設置$_SERVER['QUERY_STRING']它只是掛起。有沒有另一種方法來做到這一點?

重定向可能嗎?

編輯,我是從mysite.com/去和形式的行動是對mysite.com/,我想瀏覽器去mysite.com/?blah

OK我試圖把這個在我的我的頁面的頂部,沒有運氣

<?php 
if ($_POST['data']) header('location: /?' . idFromDifferentFunction()); 
?> 

但它只是繼續加載,我猜它只是重定向到死亡。

我希望你現在明白我想要做

+0

SQL查詢字符串? – Dion 2012-03-26 20:38:48

回答

3

很可能您的腳本在說明它應該重定向的代碼之後繼續運行。您還需要與頭更精確:

<?php 
    if (isset($_POST['data'])) { 
     header('Location: /?' . idFromDifferentFunction()); 
     exit; 
    } 
?> 

如果使用上面的代碼,就會使腳本退出的轉儲輸出,瀏覽器將看到重定向(注意位置的大寫L) 。

重點是重定向頭後的退出。沒有它,PHP很可能會繼續處理您在腳本中執行的任何其他代碼。

0

$ _ SERVER [「QUERY_STRING」]是PHP的全局變量的一部分。您不應該設置這些變量,而應通過會話進行設置並在提交後將其返回。

如果你正在嘗試將用戶重定向到一個特定的URL,然後使用:

header('Location: mysite.com/bla/bla'); 
+0

它需要是它來自同一頁面(也是哪裏的行動是),但現在與查詢字符串 – qwertymk 2012-03-26 20:51:43

+0

見編輯,也許這將清除我問的 – qwertymk 2012-03-26 21:00:20

0

寫入$ _ SERVER是沒有意義的。它不會以任何方式影響客戶端瀏覽器。如果您想更改客戶端瀏覽器中顯示的查詢字符串,則必須使用撥打header('Location: ...')的301/302重定向。

+0

看到編輯,也許這將清除我在問什麼 – qwertymk 2012-03-26 20:59:48

1

這並不完全清楚你所追求的是什麼,但我認爲你的意思是說,一旦處理完成,你想要在查詢字符串中找到一個唯一值(在?之後的位置)。這個獨特的值是否需要實際引用系統中的某些內容(對於新創建的數據庫條目是否需要引用新條目的ID),還是隻需要具有唯一性?

如果是後者,你可以只generate a random unique ID做到以下幾點:

header ('location: /path/to/script?id=' . uniqid()); 

如果是前者,那麼調用替換與數據庫鍵的值uniqid。

$ _SERVER中的值是由PHP在運行時設置的,應該被認爲是隻讀的。改變他們的價值觀將沒有意義。

+0

看到編輯,也許這將清除我問的問題 – qwertymk 2012-03-26 21:00:11