未定义的索引:php脚本中的错误

时间:2010-01-29 06:50:32

标签: php request

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

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

我一直收到未定义的索引错误。

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

我知道可以通过添加

来抑制错误和警告

error_reporting(E_ALL ^ E_NOTICE);

但我不想这样做。

这个页面在我们公司的Web服务器上工作得很好,但在我们的客户端Web服务器上不起作用。

为什么会这样?

如何解决这个问题?

6 个答案:

答案 0 :(得分:28)

您收到该错误是因为您尝试将$_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进行开发,以便在将代码移动到其他服务器之前捕获此类错误。

答案 1 :(得分:5)

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

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

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

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

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

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

答案 2 :(得分:4)

您也可以使用isset()

代替array_key_exists()

两种方法之间的区别在于isset()还检查变量的值是否为null。如果是null,那么isset会返回false,而如果密钥存在,则array_key_exists()将始终返回true(没有任何值)。 E.g:

$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(除了一个手动覆盖它)。

答案 3 :(得分:1)

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

答案 4 :(得分:1)

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

这只是为了帮助你,你不应该掩盖这些通知:他们在这里帮助你 - 例如,帮助你检测变量名称中的拼写错误。

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

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

答案 5 :(得分:0)

清洁方式可能是:

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

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