2010-03-23 140 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);