2009-01-03 128 views
107

有些傢伙叫我Snipplr意見書「廢話」的一個,因爲我用if ($_SERVER['REQUEST_METHOD'] == 'POST')代替if ($_POST)

檢查請求的方法似乎更正確的我因爲那是我真正想要做的。這兩者之間有一些運營差異還是僅僅是代碼清晰度問題?

+174

告訴那個他吮吸的傢伙。 – 2009-01-03 17:46:48

+0

@vinkoVrsalovic尤其是因爲在他的回答中提到它們不相同,($ POST)是一種「破解」,因爲您檢查僅在POST請求期間存在的數組是否存在。此外,請求方法可以在其他情況下使用,如GET。 – Hawken 2012-05-12 16:42:18

+9

您應該在這裏使用`===`而不是`==`作爲`0 =='POST'`。 – dave1010 2013-02-22 12:11:44

回答

140

那麼,他們不會做同樣的事情,真的。

$_SERVER['REQUEST_METHOD']包含請求方法(驚訝)。

$_POST包含任何POST數據。

POST請求可能不包含POST數據。

我檢查請求方法 - 事實上,我從來沒有想過測試$_POST陣列。不過,我檢查了所需的帖子字段。所以一個空的帖子請求會給用戶很多錯誤信息 - 這對我來說很有意義。

-15

他們倆的工作方式相同,但$_POST應該使用,因爲它是清潔的。您可以添加isset()來檢查它是否存在。

1

它們都是正確的。就我個人而言,我更喜歡你的方法,因爲它的詳細程度更高,但它實際上取決於個人偏好。

副手,如果運行($ _ POST)不會拋出一個錯誤 - 如果請求與POST頭一起發送的$ _POST數組存在不管。布爾檢查中將空陣列轉換爲false。

31

if ($_SERVER['REQUEST_METHOD'] == 'POST')是正確的方法,就可以發送POST請求沒有任何發佈數據。

-3

這真的是六分之一,另一半是另一種情況。對於您的方法唯一可能的參數是$ _SERVER ['REQUEST_METHOD'] =='POST'可能不會在某些Web服務器/配置上填充,而$ _POST數組將始終存在於PHP4/PHP5(和如果它不存在,你有更大的問題( - :)

13

我曾經檢查$_POST,直到我遇到了一個更大的POST數據和上傳文件的問題有配置指令post_max_sizeupload_max_filesize - 如果其中任何一個$_POST array is not populated。

所以「安全的方法」是檢查$_SERVER['REQUEST_METHOD']。你仍然必須使用但是,每$_POST變量,無論你檢查還是不檢查$_SERVER['REQUEST_METHOD']

3

您可以通過在大多數瀏覽器中按回車鍵(即不點擊提交按鈕)來提交表單,但這不一定會將提交作爲變量發送 - 因此可以提交一個空表單,即$_POST將爲空但表單仍然會生成一個http post請求到php頁面。在這種情況下,if ($_SERVER['REQUEST_METHOD'] == 'POST')更好。

4

如果您的應用程序需要的類型崗位的要求作出反應,用這個:

if(strtoupper($_SERVER['REQUEST_METHOD']) === 'POST') { // if form submitted with post method 
    // validate request, 
    // manage post request differently, 
    // log or don't log request, 
    // redirect to avoid resubmition on F5 etc 
} 

如果您的應用程序需要的任何數據作出反應,通過POST請求接收,使用此:

if(!empty($_POST)) { // if received any post data 
    // process $_POST values, 
    // save data to DB, 
    // ... 
} 

if(!empty($_FILES)) { // if received any "post" files 
    // validate uploaded FILES 
    // move to uploaded dir 
    // ... 
} 

它是特定於實現的,但是您將同時使用+ $ _FILES superglobal。

-1

它檢查頁面是否通過POST調用(而不是GET,HEAD等)。 在菜單欄中鍵入URL時,通過GET調用頁面。但是,當您使用method =「post」提交表單時,將使用POST調用操作頁面。

1
$this->method = $_SERVER['REQUEST_METHOD']; 
if ($this->method == 'POST' && array_key_exists('HTTP_X_HTTP_METHOD', $_SERVER)) { 
    if ($_SERVER['HTTP_X_HTTP_METHOD'] == 'DELETE') { 
     $this->method = 'DELETE'; 
    } else if ($_SERVER['HTTP_X_HTTP_METHOD'] == 'PUT') { 
     $this->method = 'PUT'; 
    } else { 
     throw new Exception("Unexpected Header"); 
    } 
}