2010-11-22 49 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。

我希望这可以帮助

相关问题