2012-06-12 65 views
10

因此,現在我一直在使用以下來檢查我的發佈數據是否已經設置。

if(! empty($_POST)) { } 

但最近我已經看到很多帖子說,上面是一個「黑客」和下面的是正確的「更好」的方式。

if($_SERVER[ 'REQUEST_METHOD' ] === 'POST') { } 

通過最近我只是說我是最近才發現了它。所有討論這種後來的方法的帖子都是從2009年開始的。編碼標準有點舊,所以我認爲可以對這個主題有新的看法。

我明白了兩種方法是不同的。第一個被認爲是一個「黑客」,它只是檢查post數組是否已經設置,如果發佈了post請求會發生這種情況。第二個實際上檢查服務器以查看是否已經發布了發佈請求。我想第二個可能會更安全一些,但是如果信息被淨化了,我不會看到它有多大的區別。

我也看到帖子的後面是PHP的版本僅使用< = 4,因爲PHP仍在使用$_REQUEST全球在這一點上,這是使用的方法PHP程序員確定某些請求參數的來源。我不確定最後的陳述有多準確,因爲舊帖子中提出的問題與我的相同。他們使用全球后,而不是要求。然而,這是比其他任何人(2011)更近的職位,並且來自我所信任的來源。所以我不知道該怎麼做。

幹嘛讓檢查什麼時候做?我見過一些地方說服務器請求方法在這個實例中似乎不起作用,我只能假設它是因爲post取代而得到的,而請求方法只能容納一個參數。所以,如果你同時發佈並獲取數據,你會怎麼做?對這些帖子之一的評論建議使用全局請求而不是帖子並獲取,但我一直認爲這是一個糟糕的主意。

This是最新的源我能找到的,我通過在側類似的問題在提交前找這樣做了。它具體詢問使用提交值來檢查表單是否已通過,但它也提到了請求方法。似乎很多數據表明後者仍然被普遍使用。那麼這個建議是否仍然有效?檢查請求方法仍然是最佳選擇嗎?

+0

的可能重複[isset($ \ _ POST \ [ '提交' \])VS $ \ _ SERVER \ [ 'REQUEST \ _method' \] == 'POST'(HTTP://計算器.com/questions/10943060/isset-postsubmit-vs-serverrequest-method-post) –

回答

10

是的,它仍然存在,它仍然100%可靠。 $_SERVER["REQUEST_METHOD"] var由PHP本身設置,基於用戶連接使用的實際請求方法。用戶不能發送查詢參數或以其他方式影響該var的值,除非通過更改請求類型。

if(!$_POST)是不可靠的,因爲它IS可以執行後,但不能跨越它發送任何數據,例如:

<form method="post"> 
<input type="submit" /> 
</form> 

會產生了這樣一個空$ _POST陣列 - 有沒有在表單中命名錶單元素,所以沒有數據將被髮送,但POST仍然被執行。

我不擔心PHP4沒有這個超全球化。 PHP 4是一個石器時代的版本,支持v4但是構建在v5上的代碼將不得不包含許多醜陋/令人厭惡的黑客來實現向後兼容性,以至於任何必須處理該代碼的人都會遭受噩夢。 PHP 4應該被認爲已經不存在了。

+0

那麼你將如何檢查獲取變量?使用請求方法發佈後,您不能再次使用它來檢查獲取。還是僅僅是因爲get已經不可靠,所以最好的做法是確保數組不是空的?順便說一句:並不是真的擔心PHP4,該評論的來源是解釋說,作爲請求方法的原因,這顯然是錯誤的。 – mseancole

+0

你是什麼意思,檢查獲取變量?這就是爲什麼有'$ _GET'和'$ _POST'來發布帖子... –

+0

也許只有一個複選框的形式會是一個更現實的例子,當你需要檢測一個帖子,但*可能*沒有任何值。 – goat

相關問題