检查请求是否在PHP中回发

时间:2010-11-22 03:32:23

标签: php

我如何检查请求是否是PHP中的回复,以下是否可以?

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

其中submitname

<input type="submit" />

5 个答案:

答案 0 :(得分:25)

如果您知道并期望在同一页面上有这样的提交按钮,那将会有效。

如果您不立即了解请求变量,另一种方法是检查请求方法:

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

正如评论中所指出的,要专门检查postback而不是任何POST请求,您需要确保引荐来源与处理页面是同一页面。像这样:

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

答案 1 :(得分:3)

您想要$_SERVER['REQUEST_METHOD'] == 'POST'

this one相比,你的问题非常相似但不那么笼统。

这可能是比实际检查post变量更好的方法。首先,您不知道该变量是否会被发送。我有预感,如果没有指定值,某些浏览器根本不会发送密钥。另外,如果没有POSTed值,我担心某些版本的PHP可能无法定义$_POST

答案 2 :(得分: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;
} 
?>

现在if $ isPostBack如果是回发则为true,否则为false。

我希望这会有所帮助

答案 3 :(得分:1)

是的,应该这样做。

当您使用image类型提交时,请小心,他们不会在某些浏览器中发送name属性,您将无法检测到POST。把我的头撞到桌子上几次,直到我自己意识到这一点。

解决方法是添加hidden类型输入。

答案 4 :(得分:0)

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