有些傢伙叫我Snipplr意見書「廢話」的一個,因爲我用if ($_SERVER['REQUEST_METHOD'] == 'POST')
代替if ($_POST)
檢查請求的方法似乎更正確的我因爲那是我真正想要做的。這兩者之間有一些運營差異還是僅僅是代碼清晰度問題?
有些傢伙叫我Snipplr意見書「廢話」的一個,因爲我用if ($_SERVER['REQUEST_METHOD'] == 'POST')
代替if ($_POST)
檢查請求的方法似乎更正確的我因爲那是我真正想要做的。這兩者之間有一些運營差異還是僅僅是代碼清晰度問題?
那麼,他們不會做同樣的事情,真的。
$_SERVER['REQUEST_METHOD']
包含請求方法(驚訝)。
$_POST
包含任何POST數據。
POST請求可能不包含POST數據。
我檢查請求方法 - 事實上,我從來沒有想過測試$_POST
陣列。不過,我檢查了所需的帖子字段。所以一個空的帖子請求會給用戶很多錯誤信息 - 這對我來說很有意義。
他們倆的工作方式相同,但$_POST
應該使用,因爲它是清潔的。您可以添加isset()
來檢查它是否存在。
它們都是正確的。就我個人而言,我更喜歡你的方法,因爲它的詳細程度更高,但它實際上取決於個人偏好。
副手,如果運行($ _ POST)不會拋出一個錯誤 - 如果請求與POST頭一起發送的$ _POST數組存在不管。布爾檢查中將空陣列轉換爲false。
if ($_SERVER['REQUEST_METHOD'] == 'POST')
是正確的方法,就可以發送POST請求沒有任何發佈數據。
這真的是六分之一,另一半是另一種情況。對於您的方法唯一可能的參數是$ _SERVER ['REQUEST_METHOD'] =='POST'可能不會在某些Web服務器/配置上填充,而$ _POST數組將始終存在於PHP4/PHP5(和如果它不存在,你有更大的問題( - :)
我曾經檢查$_POST
,直到我遇到了一個更大的POST數據和上傳文件的問題有配置指令post_max_size
和upload_max_filesize
- 如果其中任何一個$_POST
array is not populated。
所以「安全的方法」是檢查$_SERVER['REQUEST_METHOD']
。你仍然必須使用但是,每$_POST
變量,無論你檢查還是不檢查$_SERVER['REQUEST_METHOD']
。
您可以通過在大多數瀏覽器中按回車鍵(即不點擊提交按鈕)來提交表單,但這不一定會將提交作爲變量發送 - 因此可以提交一個空表單,即$_POST
將爲空但表單仍然會生成一個http post請求到php頁面。在這種情況下,if ($_SERVER['REQUEST_METHOD'] == 'POST')
更好。
如果您的應用程序需要的類型崗位的要求作出反應,用這個:
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。
它檢查頁面是否通過POST調用(而不是GET,HEAD等)。 在菜單欄中鍵入URL時,通過GET調用頁面。但是,當您使用method =「post」提交表單時,將使用POST調用操作頁面。
$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");
}
}
告訴那個他吮吸的傢伙。 – 2009-01-03 17:46:48
@vinkoVrsalovic尤其是因爲在他的回答中提到它們不相同,($ POST)是一種「破解」,因爲您檢查僅在POST請求期間存在的數組是否存在。此外,請求方法可以在其他情況下使用,如GET。 –
Hawken
2012-05-12 16:42:18
您應該在這裏使用`===`而不是`==`作爲`0 =='POST'`。 – dave1010 2013-02-22 12:11:44