【问题标题】:Undefined index: Error in php script未定义的索引:php 脚本中的错误
【发布时间】:2011-01-10 17:58:05
【问题描述】:

在一个 php 页面中,我有以下代码:

if($_REQUEST['c']!="") // I get error on this line itself. Why?
{
 $pidis=(int)($_REQUEST['c']);
}

我不断收到未定义的索引错误。

在谷歌搜索中,我设法理解,如果在没有我们尝试访问的参数(在 URL 中)的情况下访问页面,我们会收到此错误/警告。我相信如果 URL 中没有定义参数,它应该只返回空而不是给出错误/警告消息。

我知道可以通过添加来抑制错误和警告

error_reporting(E_ALL ^ E_NOTICE);

但我不想这样做。

这个页面在我们公司的网络服务器上工作得很好,但在我们客户的网络服务器上却不能工作。

为什么会这样?

如何解决这个问题?

【问题讨论】:

  • 标签not request 是假的,我实际输入的是:$_REQUEST。为什么我们发帖时$_REQUEST TAG 会转换为“not request”?

标签: php request


【解决方案1】:

先用isset($_REQUEST['c'])测试是否存在。

【讨论】:

    【解决方案2】:

    您收到该错误是因为您试图将 $_REQUEST['c']$_REQUEST['c'] 不存在的东西进行比较。

    解决方案是在比较之前使用isset()。这将删除警告,因为如果 $_REQUEST['c'] 不存在,则不会进行比较。

    if(isset($_REQUEST['c']) && $_REQUEST['c']!="")
    {
     $pidis=(int)($_REQUEST['c']);
    }
    

    这是一个E_NOTICE级别的错误,你的error reporting级别会影响错误是否出现。您客户端的服务器开启了E_NOTICE 级别的错误报告,这就是它显示在那里的原因。

    最好始终使用E_ALL 进行开发,这样您就可以在将代码移动到其他服务器之前发现此类错误。

    【讨论】:

      【解决方案3】:

      当您尝试使用不存在的变量或不存在的数组元素时,PHP 会发出通知(这不是错误:它只是一个通知) .

      这只是为了帮助您,您不应该掩盖这些通知:它们是为了帮助您——例如,帮助您检测变量名中的拼写错误。

      在使用该数组索引之前,如果它并不总是存在,您应该使用isset 测试它是否在这里:

      if (isset($_REQUEST['c']) && $_REQUEST['c']!="") {
          // ...
      }
      

      【讨论】:

        【解决方案4】:

        您也可以使用:array_key_exists(),而不是 isset()

        这两种方法的区别在于isset() 还会检查变量的值是否为null。如果它是null,那么isset 返回false,而array_key_exists() 如果键存在则总是返回true(无论哪个值)。例如:

        $array = array('c' => null);
        
        var_dump(isset($array['c']))); // isset() returns FALSE here
        var_dump(array_key_exists($array['c']); //array_key_exists() returns TRUE
        

        根据上下文,区分这一点很重要。在您的情况下,我认为这无关紧要,因为(我猜)请求参数永远不会是null(除非手动覆盖它)。

        【讨论】:

          【解决方案5】:

          另一种解决方案是使用以下方法:

          $pidis = isset($_REQUEST['c']) ? $_REQUEST['c'] : '';
          

          如果您希望返回一个非空的值,您也可以通过在最后一组单引号中放置一个默认值,例如

          $pidis = isset($_REQUEST['c']) ? $_REQUEST['c'] : 'Default Value';
          

          或返回不同的变量类型,例如整数:

          $pidis = isset($_REQUEST['c']) ? $_REQUEST['c'] : 34;
          

          【讨论】:

            【解决方案6】:

            干净的方式可能是:

            $pidis = $_REQUEST['c'] ?? null
            

            这与检查 isset 请求相同,但更短。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2012-05-23
              • 1970-01-01
              • 2017-02-25
              • 2011-02-21
              • 2016-08-17
              • 2012-11-14
              • 2013-03-20
              • 2017-03-26
              相关资源
              最近更新 更多