【问题标题】: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 的问题所要求的。

标签: php


【解决方案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 编程的基础。
        猜你喜欢
        • 2021-06-25
        • 1970-01-01
        • 1970-01-01
        • 2021-09-13
        • 2011-08-31
        • 2010-11-25
        • 2012-06-16
        • 2022-07-22
        相关资源
        最近更新 更多