PHP tanımsız endeks bildirim yüzlerce nasıl kurtulabilirsiniz?

3 Cevap

Ben sadece hata raporlama etkin ve wow ne bir şok muhtemelen binlerce değilse, bu gibi bildirimlere yüzlerce var

Notice: Undefined index: action in C:\webserver\htdocs\header.inc.php on line 18

Ben bunları düzeltmek için düzgün o sayfayı kodlamak için daha kolay bir yolu var, bunu withoutsetting bir değişken arayarak veya her neyse ama bir sayfa bu rapor olduğu 50 değişkenleri varsa, örneğin ayarlamak için daha kolay bir yolu var duyuyorum çünkü olduğunu anlamak Tüm?

Ve ben sadece bunları gizlemek istemem ben bunları düzeltmek için iyi olacağını düşünüyorum

burada yayınlanan bu çizginin bir örneğidir

if ($_GET['p'] == "account.edit.topfriends" || $_GET['action'] == "newmember" || $_GET['p'] == "account.profile.name") {
    //some more code here
}

3 Cevap

Ben genellikle değerleri başlatmak benim komut üstündeki ternary ifadeleri kullanmak ister.


$_GET['p'] = (isset($_GET['p']) ? $_GET['p'] : 'default');

Tabii muhtemelen daha genel bir yaklaşım kullanabilirsiniz ama farklı değişkenler farklı varsayılan değerleri olabilir gibi bu yöntem zahmetli kanıtlayabilirim.

Rezzif yapmanız gereken ne bahsedildiği gibi bir isset () çağrısı ile kontrol edilir. Eğer diziler bir sürü kullanarak konum ve) geri dönün ve isset bir demet (eklemek istemiyorsanız yapabilirsiniz her zaman bize bir işlevi çağırır. Gibi bir şey:

function get_index($array, $index) {
  return isset($array[$index]) ? $array[$index] : null;
}

Sonra böyle bir şey için if ifadesi değişebilir:

if (get_index($_GET, 'p') == "account.edit.topfriends" || get_index($_GET, 'action') == "newmember" || get_index($_GET, 'p') == "account.profile.name") {
  //some more code here
}

Yapılıyor tüm kontroller $_GET her zaman fonksiyonunun ilk parametre nix ve içinde $ _GET kodlamalısınız olabilir karşı iseniz, benim örnek birkaç farklı diziler karşı yapıyoruz varsayar.

Bu çözüm mutlaka en şık değil, ama bu işi almalısınız.

Isset () veya boş () kullanılarak birinci dizi elemanlarını kontrol edin.

Örneğin,

if ((!empty($_GET['p'] && $_GET['p'] == "account.edit.topfriends") || 
    (!empty($_GET['action'] && $_GET['action'] == "newmember")) {
    //some more code here
}