php Undefined variable: article_id

6 Cevap php

Ben uyarıları kapatmadan tanımsız zaman bu uyarıyı almamak için istediğiniz bir uyarı olarak almaya devam

Burada bağlamıdır

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

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

6 Cevap

Ben bunu çözmek için en kolay yolu, bu gibi olduğunu düşünüyorum:

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

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

Eğer fonksiyonu $article_id varsayılan bir değer verir, çünkü bu should çalışır. Hiçbir $article_id varsa sen hiç yürütmek istemiyorsanız Ancak, sizin gibi kolayca null orta üçlü bölümünü değiştirebilir.

Edit: If you have an article_id 0, you may want to change empty to !isset
Edit 2: Modified to avoid the undefined offset warning.

Sen hataya neden olduğunu tam olarak hangi hat demiyorum, ama sen varsın emin olmadığınız herhangi bir değişkenler için isset kullanmak gerek. Örneğin:

$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) {.....}

Aynı zamanda da tanımlanmamış bir değişken ile bir şey yapıyor durumunda db_escape yöntemi, içeriğini kontrol etmek isteyeceksiniz.


Soruna bir diğer yolu kullanarak referans işlevi değişken geçmek için &:

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

kodunuzun önce bu koymak:

error_reporting(E_ALL ^ E_NOTICE);

PHP Manual: error_reporting

bu yüzden tüm bu ve evet belki de ben daha iyi benim soru phrased olabilirdi sonra oldukça basit, ama yine de bunu yapmak için basit bir yol olmadığını beni rahatsız ediyor

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

Bu hata ile ilgili olmadığını bilmiyorum, ama PHP endeksler diziler 0'dan başlayarak bilmeli, bu yüzden ikinci satırı olmalıdır

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

Ayrıca, muhtemelen bir yazım hatası olduğunu, ancak ilk satır olmalı

var $url_items = array("foo");

i bu belki daha iyi bir yolu yoktur güzel bir yol olacağını düşünüyorum ama ben sadece uyarı gizleme yanlış olduğunu düşünüyorum ...

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

edit kodu düzeltilmiş