检查请求是不是在 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 中回发 [重复]的主要内容,如果未能解决你的问题,请参考以下文章