检查请求是不是在 PHP 中回发 [重复]

Posted

技术标签:

【中文标题】检查请求是不是在 PHP 中回发 [重复]【英文标题】:Checking if request is post back in PHP [duplicate]检查请求是否在 PHP 中回发 [重复] 【发布时间】:2011-05-13 14:59:46 【问题描述】:

如何检查请求是否是 php 中的回帖,以下是否正常?

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

其中submit<input type="submit" />name

【问题讨论】:

您要检查是否存在post 数据,或者是否存在submit 数据? 检查帖子还是回帖?回发是一种特定类型的发布请求。 @Steve,@Lèse majesté,基本上,我只是想看看一个表格是否被回发,所以我处理回发 我觉得版主对将其标记为副本有点过分了。在向某人展示如何使用 PHP 实际简单地检测到同一页面的 POSTBACK 方面,这个答案比所谓的“原始”更有用,这似乎是 OP 的问题所要求的。 【参考方案1】:

如果你想要一个没有依赖“方法”(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 是回发,则 if $isPostBack 为 true,否则为 false。

希望对你有帮助

【讨论】:

【参考方案2】:

如果您知道并期望在同一页面上出现这样的提交按钮,这将起作用。

如果您对请求变量一无所知,另一种方法是检查请求方法:

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

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

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

【讨论】:

您绝对应该使用=== 而不是==。解释,为什么,可以在 cmets 到 this answer 和许多其他资源中找到,因为这些是 PHP 编程的基础。【参考方案3】:

是的,应该这样做。

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

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

【讨论】:

【参考方案4】:

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

【讨论】:

【参考方案5】:

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

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

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

【讨论】:

您绝对应该使用=== 而不是==。解释,为什么,可以在 cmets 到 this answer 和许多其他资源中找到,因为这些是 PHP 编程的基础。

以上是关于检查请求是不是在 PHP 中回发 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

单击按钮时如何防止下拉列表在更新面板中回发或更新

如何在 iframe 中回发 aspx 页面?

为啥在 ASP.NET MVC 中回发后模型为空

在gridview中回发后Javascript代码不会运行

在 ASPX 中回发后按键不起作用

未定义的偏移量试图从数据库中回显数据[重复]