【问题标题】:How to check if $_GET is empty?如何检查 $_GET 是否为空?
【发布时间】:2010-08-04 18:31:24
【问题描述】:

如何判断$_GET是否为空?

【问题讨论】:

    标签: php get


    【解决方案1】:

    你自己说的,看看是不是empty

    if (empty($_GET)) {
        // no data passed by get
    }
    

    看,PHP 就是这么简单。您可以简单地写下您的想法;)

    这种方法相当安全。如果 $_GET 未设置(不太可能,但可能),!$_GET 可能会给您一个未定义的变量 E_NOTICE。

    【讨论】:

    • @Frank 这是真的......当一切顺利时。但是,如果 $_GET 碰巧没有设置,您期望的不是通知吗?这样的通知难道不是唯一的目的吗?
    • 不,你永远不想让你的代码给你一个通知。任何类型的源代码抛出错误总是被认为是错误的。
    • 那么所有这些错误的目的是什么?有什么建议吗?
    • 告诉你,你在编码时犯了一个错误。如果我得到一个解析错误,我可以纠正这个错误。如果我收到未定义的 var / index 通知,我可以更正它。这就是目的。但是生产代码不应该抛出错误。 (如果是这样,他们应该被压制和记录。)
    • 是的,收到通知总是不好的,因为它告诉你你做错了什么。
    【解决方案2】:

    我想不需要任何运算符的最简单方法是

    if($_GET){
    //do something if $_GET is set 
    } 
    if(!$_GET){
    //do something if $_GET is NOT set 
    } 
    

    【讨论】:

    • -1,因为它可能会引发通知错误。使用 empty 进行测试是更好的选择。
    • +1 表示不需要使用 empty()。 @premiso 有任何真实的例子来证明它为什么更好?
    • Col,不,我实际上没有。但是我可以问你们为什么你的“更好”,如果你能给我提供为什么你的解决方案更好的真实例子,真正的答案都是有效的(经过我的模糊测试)。所以是的,我错了,如果用户修改了它,我会切换它。它归结为偏好,我更喜欢使用空的。我可以给出的唯一原因是空检查项目是否为空。鉴于未设置 $_GET 从 var_dump 返回 array(0),在我看来,空似乎是一个更好的选择。
    • 应该发出通知。
    【解决方案3】:

    只是在这里提供一些变化:你可以检查

    if ($_SERVER["QUERY_STRING"] == null)
    

    它与测试$_GET 完全相同。

    【讨论】:

    • +1 我也想过同样的事情,但不确定您需要检查什么。反对!issetnull''null 在这里工作吗,你测试了吗?
    • @nikic 是的,经过测试并且有效。因为它来自 Apache,所以它总是会被设置——即使它是空的——所以不需要array_key_exists() 检查。
    【解决方案4】:
    <?php
    if (!isset($_GET) || empty($_GET))
    {
        // do stuff here
    }
    

    【讨论】:

    • !isset($_GET) 这里不需要,if (empty($_GET)) 就足够了
    • 仅供参考:$_GET 可以取消设置,但是以这种方式配置 PHP 非常罕见(参见 variables_order
    • @Wrikken:我认为 Alexander 没有解决这个问题。 empty simple 会检查自己是否设置了变量,因此使用 isset 进行检查是多余的。
    • 啊,是的,忘了empty 确实是一种语言结构。
    【解决方案5】:
    if (!$_GET) echo "empty";
    

    为什么需要这样的检查?

    哈哈
    你们太直接了。
    不要冒犯,但有时根本不介意
    $_GET 是一个非常特殊的变量,不像其他变量。
    它应该始终设置。无需将其视为其他变量。 当 $_GET 未设置并且是预期的 - 这是 紧急情况 情况,这就是“未定义变量”通知发明的目的

    【讨论】:

    • @mario 有什么例子可以演示吗?
    • @nikic 会通知你那可怕的破坏行为!什么可以更好?这就是错误信息的用途——告诉你这种恶意程序员!我已经告诉你三遍了!用户会向你投诉,你来查看日志 - 瞧!有一个问题 - $_GET 没有设置!
    • 题外话,我现在在 $_GET、$_REQUEST 和 $_POST 周围使用对象样式的包装器(它们强制输入过滤)。但这是一个非常特殊的情况,有 _NOTICE 意识的 empty() 人也会失败。
    • @niki 我不是在谈论你的经历。我说的是这个问题的这个例子。而且我坚持认为不存在需要使用 empty 或 isset 的合理场景。
    • +1 因为我觉得这是应该触发通知的情况。对于期望在 Web 环境中运行的脚本,这将是一个值得出错的异常情况,因为所有可能的原因都非常罕见。
    【解决方案6】:

    简单。

    if (empty($_GET)) {
        // $_GET is empty
    }
    

    【讨论】:

      【解决方案7】:

      我会使用下面的 if 语句,因为它更容易阅读(以及将来修改)

      
      if(!isset($_GET) || !is_array($_GET) || count($_GET)==0) {
         // empty, let's make sure it's an empty array for further reference
         $_GET=array();
         // or unset it 
         // or set it to null
         // etc...
      }
      

      【讨论】:

      • if (!empty($_GET)) { } 更容易阅读。如果数组不包含项,empty() 返回 TRUE
      • 如果 $_GET 是一个字符串怎么办?还是一个物体?我偶然发现了搞砸 $_GET 的脚本,我通常检查变量是否是我“知道”它应该是的类型......
      • 这很简单。只是避免这样的脚本 :) 老实说,你的代码是矫枉过正
      • 我猜你从来不需要在不修改它们的情况下集成一些 php 脚本/系统,而是试图阻止它们在同一个 cron 作业或网页中使用时造成严重破坏。这可能有点矫枉过正,但我​​晚上睡得很好。我通常在使用它们之前清理、验证和检查所有变量,如果它们可以被其他任何人修改(通过 url、ini_set 或其他任何东西)。我会记录任何意外的输入(比如 $_GET 不是一个数组)以及所有可能的信息,以便我可以在以后重新创建它以修复任何错误或特殊情况......
      【解决方案8】:

      这里有 3 种不同的检查方法

      <?php
      //Method 1
      if(!empty($_GET))
      echo "exist";
      else
      echo "do not exist";
      //Method 2
      echo "<br>";
      if($_GET)
      echo "exist";
      else
      echo "do not exist";
      //Method 3
      if(count($_GET))
      echo "exist";
      else
      echo "do not exist";
      ?>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-11-15
        • 2020-05-29
        • 2018-04-02
        • 2016-04-05
        • 2018-01-08
        • 2020-09-25
        • 2012-01-15
        • 2016-07-16
        相关资源
        最近更新 更多