2011-08-10 100 views
7

說我有一個表格:

<form action="form.php?redirect=false" method="post"> 
    <input type="hidden" name="redirect" value="true" /> 
    <input type="submit" /> 
</form> 

在form.php的:

var_dump($_GET['redirect']) // false 
var_dump($_POST['redirect']) // true 
var_dump($_REQUEST['redirect']) // true 

如何獲得注入的查詢字符串參數以覆蓋$_POST值所以$_REQUEST['redirect']會= false

+0

似乎'$ _REQUEST ['redirect']'*是* true。 –

+0

我認爲他實際上是想在他最後一行有錯。他想使用查詢字符串,而不是該值的表單數據。 – mrtsherman

+0

如果你的意思是錯誤的話。'$ _REQUEST ['redirect'] = $ _GET ['redirect']' – Josh

回答

11

如果你想在$_REQUEST陣列中的改變$_GET優先$_POST,在php.ini更改request_order指令。

的缺省值是:

request_order = "GP" 

P代表POST和G代表GET,和後來的值具有優先級,所以在該配置中,在查詢字符串的值將覆蓋由傳遞的值POST在$_REQUEST陣列中。如果你想POST覆蓋GET值,只需切換身邊,像這樣:

request_order = "PG" 

你需要重新啓動Web服務器/ PHP爲生效。

(編輯布拉德建議使用更合適request_order,而不是variables_order

+2

請考慮使用'request_order'。這是更具體的問題。 – Brad

+0

@Brad好的電話 - 我會用一個例子更新我的答案。謝謝! –

+0

很好,謝謝! – Maverick

0
$_REQUEST['redirect'] = $_POST['redirect']; 

$_REQUEST['redirect'] = $_GET['redirect']; 

取決於你想要

2

見PHP的request order參數。在這裏,您可以設置數組是填充後,獲取,cookie或任何組合。

4

請參閱PHP.ini中的request_order指令。

真的,你應該明確地使用你特別想要的超全局。否則,你不能依賴從系統到系統的一致行爲,然後你的變量可能會被意外覆蓋。

+0

通常我會這樣做,但這是針對現有的客戶端表單處理器,並且它們已經在處理$ _REQUEST ['redirect']'。 +1雖然,謝謝! – Maverick

0

如果您在最後一行出現意味着false,並且希望$_REQUEST仍然有來自POST數據和獲取數據,不想惹的配置,使用:

$_REQUEST = array_merge($_POST, $_GET);