【问题标题】:Checking for null and missing query string parameters in PHP在 PHP 中检查 null 和缺少的查询字符串参数
【发布时间】:2011-05-21 22:13:40
【问题描述】:

我希望能够区分设置为 null 的现有查询字符串参数和缺少的参数。所以问题的部分是:

  • 如何检查查询字符串中是否存在参数
  • 在查询字符串中传递空值的既定方法是什么? (例如 param=null 或 param=(nothing) )

谢谢

【问题讨论】:

    标签: php request query-string querystringparameter


    【解决方案1】:

    使用isset()empty()

    if (isset($_REQUEST['param']))
    {
      // param was set in the query string
       if(empty($_REQUEST['param']))
       {
         // query string had param set to nothing ie ?param=&param2=something
       }
    }
    

    【讨论】:

    • +1!正确答案,但使用empty() 时不需要isset(),因为empty() 暗示isset()。这在使用!empty() 时尤其重要。您可能应该在问题的第二部分添加一个明确的答案。
    • @elusive,如果您对未设置的变量调用 empty,您将收到 E_WARNING。
    • @Byron Whitlock:我认为这是不正确的。文档状态 “empty() 与 (boolean) var 相反,只是在未设置变量时不会生成警告。”.
    • 我的立场是正确的! Empty 确实不会对未设置的变量发出警告。一定是我在 3.0 天学习 php 时的倒退;P 我每天都在 SO 上学习新东西。谢谢@elusive,@zzzzBov!
    • $_REQUEST 是 $_GET、$_POST 和 $_COOKIE 的组合,应该很少使用(如果有的话),因为访问它而不是变量的实际来源会带来安全隐患.此问题涉及查询字符串参数,因此应使用 $_GET。
    【解决方案2】:

    或者使用array_key_exists:

    if(array_key_exists("myParam", $_GET)) {
    
    }
    

    我从不热衷于将空值传递给服务器的“约定”——例如,我习惯于测试变量是否存在,然后修剪它们并测试是否为空。

    【讨论】:

      【解决方案3】:

      存储在$_GET$_POST 中的值只能是字符串或数组,除非在运行时明确设置。如果您的查询字符串为query=string,则值为"string",如果您改为使用:query=null,则值为"null"。请注意,它是一个字符串。

      如果您发送:query=,则值为"" 或空字符串。记下issetempty 之间的differences。如果值不为空,isset 将为真,而当值计算为 false 时,empty 将为真。因此"" 将适用于 issetempty

      如果您只想检查查询字符串参数是否设置为"null"的字符串值,您可以简单地检查$_GET['query']=='null'(您可能需要在检查之前调整字符的大小写)

      【讨论】:

        【解决方案4】:

        用一个 if 语句代替两个:

        if ((isset($_REQUEST['name'])) && (!empty($_REQUEST['name'])))
        {
            $name= $_REQUEST['name'];
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-05-17
          • 1970-01-01
          • 2021-01-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多