2010-03-23 266 views
-1

我不断收到这是一个警告我要避免收到此警告,当它是头也不回警告关闭PHP未定义的变量:article_id的

这里不确定的是在这之前你的代码放在上下文

$url_items = array("foo"); 
    $article_id = db_escape($url_items[1]); 
    $article = get_article($article_id); 

    function get_article($article_id = NULL) {.....} 
+0

一个更简单的方式很奇怪,因为'$ article_id = db_escape($ url_items [1]);'应该为'$ article_id'赋值。我认为警告甚至不应该发生(或者它在你的代码中的其他地方)。 – 2010-03-23 14:21:27

+0

嗯你的权利没有提到这一点......我不熟悉db_escape()是否会返回一些东西呢?或更好的它总是会返回一些东西...嗯好吧,只是测试它的功能将返回null如果没有返回,所以这个函数怎么可能返回任何东西? – Nexum 2010-03-23 14:35:16

+0

PHP通常在发出警告时提供文件和行号。这不应该足以发现问题吗? – lunohodov 2010-03-23 14:35:48

回答

3

我认为最简单的方法来解决这个问题是这样的:

$url_items = array("foo"); 
$article = empty($url_items[1]) ? get_article() : get_article(db_escape($url_items[1])); 

function get_article($article_id = NULL) {.....} 

应该工作,因为你给$article_id一个默认值的函数。但是,如果不存在$article_id,如果完全不想执行,则可以轻松地将中间三元组更改为null。

编辑:如果你有一个article_id的0,你可能要更改empty!isset
编辑2:修改,以避免不确定的偏移警告。

0

error_reporting(E_ALL^E_NOTICE); 

PHP Manual: error_reporting

+1

这是完全错误的,但尤其是在这种情况下。为什么不E_ALL? – 2010-03-23 14:22:47

+0

,因为E_ALL仍然会显示错误? – Iraklis 2010-03-23 14:25:38

+1

Ahaha,我以为你会帮助找到错误,而不是隐藏它:)它只是没有出现在我的脑海里。开发者多么荒谬的答案。 – 2010-03-23 14:28:29

-1

我认为这将是一个更好的方式也许有一个更好的办法,但我认为只是隐藏警告是错误的方式...

$article_id = db_escape($url_items[1]); 
if(empty($article_id)){ 
    $article_id = null; 
} 

编辑纠正代码

+3

空**的参数必须是变量,它不适用于表达式。 – Powerlord 2010-03-23 14:54:25

+0

这实际上给了我一个解析错误 – mcgrailm 2010-03-23 14:56:11

+0

Powerlord是正确的,因为它在文档中说:*注意:empty()只检查变量,否则会导致分析错误。换句话说,以下内容将不起作用:empty(trim($ name))。* – 2010-03-23 15:00:37

-1

,如果这是关系到我不知道错误,但你应该知道从0开始的是PHP数组的索引,所以第二行应该是

$article_id = db_escape($url_items[0]); 

而且,它可能是一个错字,但第一行应该是

var $url_items = array("foo"); 
+0

我知道他们从零开始关键是 $ url_items [1]; 没有价值 ,我不需要VAR在变量的前面,我不知道,但我想,如果我没有把它放在那里 – mcgrailm 2010-03-23 14:32:33

+0

的变种会导致错误 – mcgrailm 2010-03-23 14:46:08

1

您不会确切地说哪一行导致错误,但您应该使用isset来表示您不确定存在的任何变量。例如:

$url_items = array("foo"); 
if (isset($url_items[1])) 
{ 
    $article_id = db_escape($url_items[1]); 
    $article = get_article($article_id); 
} 

function get_article($article_id = NULL) {.....} 

您还需要检查db_escape方法的内容,在情况下做的也有不确定变量的东西。


解决此问题的另一种方式是通过使用参考的&变量传递给函数:

function get_article(&$article_id) { 
    if ($article_id == null) { 
     // handle null case here 
    } 
    else { 
     // get the article 
    } 
} 
+0

稀释是,但我可能是一个问题仍然需要打电话给get_article,即使$ article_id没有设置 – mcgrailm 2010-03-23 14:58:05

+0

@ mmcgrail:是的我给你的代码尝试,但没有得到任何警告。但我确实得到了'注意:未定义偏移:1'。我唯一一次得到“未定义变量”是,如果我删除设置'$ article_id'的行。你确定你的代码和你上面发布的一样吗?发布'db_escape()'的内容也会有所帮助。 – DisgruntledGoat 2010-03-23 15:03:20

+0

是的,你的权利我也得到了一个,我仍然无法看到db_escape与它有什么关系。但这确实使我得到了答案 – mcgrailm 2010-03-23 15:12:10

0

所以它毕竟是非常简单的,是的,也许我可以更好地表述我的问题,但它仍然困扰着我,有没有做到这一点

if (isset($url_items[1])){ 
     $article_id = db_escape($url_items[1]); 
    }else{ 
     $article_id = null; 
    } 
    $article = get_article($article_id);