未定义的索引:升级到php 5.3后,在Dataset.php中的名称

时间:2012-10-11 13:38:59

标签: php isset notice

PHP Notice:  Undefined index: parentid in /home/public_html/data/Dataset.php on line 319
PHP Notice:  Undefined index: destinations in /home/public_html/data/Dataset.php on line 330
PHP Notice:  Undefined index: radiogroup in /home/public_html/data/Dataset.php on line 340
PHP Notice:  Undefined index: radiogroup in /home/public_html/data/Dataset.php on line 340
PHP Notice:  Undefined index: radiogroup in /home/public_html/data/Dataset.php on line 340
PHP Notice:  Undefined index: radiogroup in /home/public_html/data/Dataset.php on line 340
PHP Notice:  Undefined index: name in /home/public_html/data/Dataset.php on line 220
PHP Notice:  Undefined index: fieldhelp in /home/public_html/data/Dataset.php on line 236

从5.2升级到php 5.3后,我的脚本拒绝工作。我在日志中看到很多PHP Notice。

第319行:if( $this->aFields["parentid"] ) {

第340行:if( $curField["radiogroup"] ) {

我怀疑问题出现在另一个包含许多此类行的文件中

 if( isset( $this->request_vars[$name]["id"] ) ) {

我该如何解决这个问题?如果从上面判断就那么容易。

4 个答案:

答案 0 :(得分:2)

这不是错误。它说数组$ curField中没有索引“radiogroup”等元素。

您必须首先使用isset检查它是否存在,例如:

if(isset($curField['radiogroup']) and $curField['radiogroup']) {

答案 1 :(得分:1)

未定义的索引意味着您尝试访问不存在的关联数组的键。这应该出现在您的旧配置中,但由于错误报告级别,它从未出现过。

您应该更改代码,以便首先测试变量是否已设置然后使用它。

例如:

更改表单的出现次数:

if( $this->aFields["parentid"] ) {
   ...
}

if( isset($this->aFields["parentid"]) ) {
   ...
}

答案 2 :(得分:1)

从PHP文档(error_reporting):

<?php
// Turn off all error reporting
error_reporting(0);
?>

该功能的其他有趣选项:

<?php

// Report simple running errors
error_reporting(E_ERROR | E_WARNING | E_PARSE);

// Reporting E_NOTICE can be good too (to report uninitialized
// variables or catch variable name misspellings ...)
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);

// Report all errors except E_NOTICE
// This is the default value set in php.ini
error_reporting(E_ALL ^ E_NOTICE);

// Report all PHP errors (see changelog)
error_reporting(E_ALL);

// Report all PHP errors
error_reporting(-1);

// Same as error_reporting(E_ALL);
ini_set('error_reporting', E_ALL);

?>

答案 3 :(得分:0)

很难从代码中分辨出来,但我认为错误报告级别已经改变,现在可以显示通知。但是,如果可能不存在变量,则应使用以下内容:

if( isset($this->aFields["parentid"]) ) {

在你的情况下,你可以使用空,因为它会检查它的两个集并且有一个值并且它不等于0 / false(与原始行相同)

if( ! empty($this->aFields["parentid"]) ) {