我所遇到使用腳本:
isset($_POST['submit'])
以及代碼,使用:
$_SERVER['REQUEST_METHOD']=='POST'
我在想這兩者之間的區別,哪種方法最好。
我所遇到使用腳本:
isset($_POST['submit'])
以及代碼,使用:
$_SERVER['REQUEST_METHOD']=='POST'
我在想這兩者之間的區別,哪種方法最好。
這些意思是兩個不同的東西。第一,檢查是否通過了表格提交參數submit
。許多人使用此片段來驗證表單是否已發送。這是有效的,因爲提交按鈕在技術上是<input>
,所以它的值與表單中的任何其他元素一起發送。
<?php
if(isset($_POST['submit'])) { // This way form and form logic can be adjacent to each other
// Logic
}
?>
<form method='POST' action='<?= $_SERVER['REQUEST_URI'] ?>'>
<!--- other form stuff -->
<input type="submit" name="submit" value="Send!" />
</form>
第二段代碼測試表單是否使用POST方法提交。這並不一定意味着表單按鈕被按下了。如果它沒有提交POST,那麼超全球$_POST
將是空的。
他們做不同的事情。
第一個檢查是否設置了$_POST
陣列中的密鑰(submit
)。
第二個檢查$_SERVER
陣列中的密鑰值是否爲'POST'
。我想用這個來判斷數據是使用「get」還是「post」方法發送的,但通常你不會只關心使用什麼方法,而是關注發送了什麼數據。
你想做什麼?
第一條語句檢查請求方法是否爲Post
以及請求是否包含元素submit
的值。第二種方法僅檢查請求方法是否爲Post
。
要檢查一個表單是否被張貼,第二個表達更好一些,因爲它稍微清晰一些,只做一件事和一件事。不過,我不會太擔心要使用哪一個。
isset($_POST['submit'])
如果您已經知道某個特定值將始終發送,因此表示預期表單提交(在這種情況下submit
場)的這段代碼會告訴你兩兩件事:
POST
方法提交,相對於GET
,PUT
等submit
字段是否已過去。$_SERVER['REQUEST_METHOD'] == 'POST'
這告訴你到底有一兩件事,一個形式通過POST
方法提交。使用它的原因包括:
GET
,PUT
等)前者是
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
if (!isset($_POST['name'])) {
// at this point you know that `name` was not passed as part of the request
// this could be treated as an error
}
}
對戰:
if (!isset($_POST['name'])) {
// the `name` field was not passed as part of the request
// but it might also be a GET request, in which case a page should be shown
}
重要
檢查在請求一個提交按鈕場是不可靠的一種形式可以提交以其他方式(例如在文本框中按Enter)。
$_POST
只要使用這個表達式可以斷言:
POST
不要檢查提交按鈕以檢測表單提交。當用戶通過回車鍵(在某些瀏覽器中)以及某些javascript表單提交方法提交表單時失敗。當表單提交默默地失敗時,它對用戶非常惱火...... – goat
@rambocoder在任何情況下,您的評論讓我在我的答案中改變了一些事情來解決您的擔憂......看看請 –
提交他們所無法比擬的,他們做不同的工作 – zerkms
檢查是否存在'$ _POST ['submit']',w這裏'submit'是'type = submit name = submit'按鈕的名稱,是在PHP編碼器中氾濫的最常見(和跛腳)習慣之一。您的代碼完全失敗,當用戶通過輸入鍵提交表單在一個普通的網頁瀏覽器基礎的大塊。不要這樣做,這是非常業餘的。 – goat
@chris Thanx的信息,不知道。我很新的PHP。 – Madz