在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服务器上不起作用。
为什么会这样?
如何解决这个问题?
答案 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请求相同,但更短。