2010-11-22 43 views
14

如何檢查請求是否在PHP中發回,是否正確?檢查請求是否在PHP中回發

if (isset($_POST["submit"])) 

其中submit是的<input type="submit" />

+0

你想檢查是否有'post'數據存在,或者'submit'數據是否存在? – Ben 2010-11-22 03:39:19

+0

檢查帖子或回覆?回帖是特定類型的帖子請求。 – 2010-11-22 04:06:56

+0

@Steve,@Lèsemajesté,基本上,我只是想看看錶格是否回傳,所以我會回覆帖子 – 2010-11-22 04:48:42

回答

22

這將工作,如果你知道並期望在同一頁上的這樣一個提交按鈕。

如果你不立即知道關於請求變量什麼,另一種方法是檢查請求的方法:

if (strtoupper($_SERVER['REQUEST_METHOD']) == 'POST') 

正如在評論中指出,要專門檢查postback,不是任何POST請求,你需要確保引用者與處理頁面是相同的頁面。像這樣的:

if (basename($_SERVER['HTTP_REFERER']) == $_SERVER['SCRIPT_NAME']) 
+1

你應該使用'==='而不是'=='。解釋,爲什麼,可能會在[本答案](http://stackoverflow.com/a/1372163/1469208)的註釋中以及許多其他資源中找到解釋,因爲這些是PHP編程的基礎。 – trejder 2014-02-24 09:41:15

3

name你想$_SERVER['REQUEST_METHOD'] == 'POST'

您的問題與this one的問題非常類似,但不太一般。

這可能是比實際檢查帖子變量更好的方法。首先,你不知道這個變量是否會被髮送。我有預感,如果沒有指定值,一些瀏覽器根本不會發送密鑰。另外,如果沒有POST的值,我擔心一些PHP的風格可能不會定義$_POST

+0

你應該使用'==='而不是'=='。解釋,爲什麼,可能會在[本答案](http://stackoverflow.com/a/1372163/1469208)的註釋中以及許多其他資源中找到解釋,因爲這些是PHP編程的基礎。 – trejder 2014-02-24 09:41:45

0

是的。你也可以使用if(array_key_exists('submit', $_POST))

1

是的,應該這樣做。

當您使用image類型提交時,他們將不會在某些瀏覽器中發送name屬性,並且您將無法檢測到POST。幾次將我的頭撞向桌面,直到我自己意識到這一點。

解決方法是添加hidden類型的輸入。

3

如果你想擁有不依賴「法」的一般程序(POST/GET)和論壇要素的任何其它名字,那麼我建議這個

<?php 
$isPostBack = false; 

$referer = ""; 
$thisPage = "http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']; 

if (isset($_SERVER['HTTP_REFERER'])){ 
    $referer = $_SERVER['HTTP_REFERER']; 
} 

if ($referer == $thisPage){ 
    $isPostBack = true; 
} 
?> 

現在如果$的IsPostBack爲真如果它是回傳,如果不是,則返回false。

我希望這可以幫助

相關問題