2012-06-08 71 views
14

我所遇到使用腳本:

isset($_POST['submit']) 

以及代碼,使用:

$_SERVER['REQUEST_METHOD']=='POST' 

我在想這兩者之間的區別,哪種方法最好。

+3

提交他們所無法比擬的,他們做不同的工作 – zerkms

+3

檢查是否存在'$ _POST ['submit']',w這裏'submit'是'type = submit name = submit'按鈕的名稱,是在PHP編碼器中氾濫的最常見(和跛腳)習慣之一。您的代碼完全失敗,當用戶通過輸入鍵提交表單在一個普通的網頁瀏覽器基礎的大塊。不要這樣做,這是非常業餘的。 – goat

+0

@chris Thanx的信息,不知道。我很新的PHP。 – Madz

回答

4

這些意思是兩個不同的東西。第一,檢查是否通過了表格提交參數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將是空的。

+2

超全局'$ _POST'總是被設置,並且始終是一個數組。 – Arjan

+0

@Arjan好的。更好的措詞:「將是空的」 –

+0

糾正我,如果我錯了,但如果表單方法是POST,不是唯一的方法$ _POST將是空的是,如果按鈕沒有推? – Madz

4

他們做不同的事情。

第一個檢查是否設置了$_POST陣列中的密鑰(submit)。

第二個檢查$_SERVER陣列中的密鑰值是否爲'POST'。我想用這個來判斷數據是使用「get」還是「post」方法發送的,但通常你不會只關心使用什麼方法,而是關注發送了什麼數據。

你想做什麼?

0

第一條語句檢查請求方法是否爲Post以及請求是否包含元素submit的值。第二種方法僅檢查請求方法是否爲Post

要檢查一個表單是否被張貼,第二個表達更好一些,因爲它稍微清晰一些,只做一件事和一件事。不過,我不會太擔心要使用哪一個。

6
isset($_POST['submit']) 

如果您已經知道某個特定值將始終發送,因此表示預期表單提交(在這種情況下submit場)的這段代碼會告訴你兩兩件事:

  1. 形式經由POST方法提交,相對於GETPUT
  2. submit字段是否已過去。

$_SERVER['REQUEST_METHOD'] == 'POST' 

這告訴你到底有一兩件事,一個形式通過POST方法提交。使用它的原因包括:

  • 你想一個無效的表單提交區分(例如,不是所有的字段都傳輸)等各類網頁檢索(GETPUT等)
  • 你不確切地知道你將會收到什麼。也許這個代碼運行在一個不知道其依賴部分所有細節的控制器中。

前者是

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 

只要使用這個表達式可以斷言:

  1. 的形式通過POST
  2. 至少有一個領域已經提交
+1

不要檢查提交按鈕以檢測表單提交。當用戶通過回車鍵(在某些瀏覽器中)以及某些javascript表單提交方法提交表單時失敗。當表單提交默默地失敗時,它對用戶非常惱火...... – goat

+0

@rambocoder在任何情況下,您的評論讓我在我的答案中改變了一些事情來解決您的擔憂......看看請 –

相關問題