Arif

WFN Üye
Konular
756
Mesajlar
756
Çözüm
0
Ticaret Puanı
0
Üyelik
25 Gün
Konum
Bilecik
Web Sitesi
Var
Alanı
SEO Uzmanı
1/1
Konu sahibi
“Undefined array key” uyarısı, dizide bulunmayan bir anahtarı okumaya çalıştığınızda oluşur. Uyarıdaki dosya ve satırı bulun; anahtarın yanlış yazılıp yazılmadığını ve verinin beklediğiniz kaynaktan gelip gelmediğini kontrol edin. Anahtar isteğe bağlıysa okumadan önce varsayılan değer kullanın; zorunluysa eksik veriyi doğrulayıp işlemi durdurun.

Eksik anahtarın kaynağını bulun​


Uyarıdaki anahtar adı ile dosya yolunu ve satır numarasını not edin. İlgili satırda örneğin $_POST['email'] okunuyorsa form alanının name değerinin gerçekten email olduğuna ve isteğin POST yöntemiyle gönderildiğine bakın. Veri başka bir diziden geliyorsa diziyi oluşturan kodda aynı anahtarın her durumda atanıp atanmadığını inceleyin.

PHP 8 ve sonrasında tanımlanmamış bir dizi anahtarını okumak E_WARNING üretir ve okuma sonucu null olur. PHP 8 öncesinde uyarı seviyesi E_NOTICE idi. Uyarının bir sürüm değişikliğinden sonra görünmesi, verinin yeni sürümde kaybolduğunu tek başına göstermez; eksik anahtar daha önce de mevcut olabilir.

Anahtar isteğe bağlıysa varsayılan değer kullanın​


Aşağıdaki varsayımsal örneği bir PHP dosyasına kaydedip çalıştırabilirsiniz. tema anahtarı isteğe bağlıdır:

PHP:
<?php
$ayarlar = ['dil' => 'tr'];
$tema = $ayarlar['tema'] ?? 'acik';

echo $tema;

Dizide tema bulunmadığı için çıktı acik olur ve bu okuma nedeniyle uyarı oluşmaz. Anahtarı 'tema' => 'koyu' olarak eklerseniz çıktı koyu olur. ?? işleci, anahtar yoksa veya değeri null ise sağdaki değeri kullanır; boş metin, 0 ve false değerlerini ise korur. Bu yalnızca bir varsayılan sağlar; gelen değerin geçerli olduğunu doğrulamaz.

Zorunlu veriyi doğrulayın​


Anahtarın bulunmaması bir işlem hatasıysa sessizce varsayılan atamak yerine eksikliği kullanıcıya bildirin. Örneğin POST ile gelen bir e-posta alanını okuyan kodda:

PHP:
<?php
$email = $_POST['email'] ?? null;

if (!is_string($email) || trim($email) === '') {
    http_response_code(400);
    echo 'E-posta alanı zorunludur.';
    exit;
}

$email = trim($email);
// E-posta biçimini ve uygulamanın diğer kurallarını doğrulayın.

Form gönderiminde alan eksik veya boşsa işlem durur ve mesaj gösterilir. Dolu bir değer gelmesi yalnızca alanın boş olmadığını gösterir; e-posta biçimi ve uygulamanın diğer kuralları ayrıca doğrulanmalıdır. Form alanının adı veya istek yöntemi yanlışsa yalnızca PHP satırını değiştirmek yerine veri gönderimini de düzeltin.

Kontrol yöntemini değerin anlamına göre seçin​


Anahtarın varlığı ile değerinin null olmaması aynı koşul değildir. Aşağıdaki ayrım, hangi kontrolün kullanılacağını belirler:
YöntemAnahtar yoksaDeğer null ise
??Varsayılanı kullanırVarsayılanı kullanır
isset()falsefalse
array_key_exists()falsetrue
null değeri, örneğin “bilerek boş bırakıldı” anlamı taşıyorsa ve bunu eksik anahtardan ayırmanız gerekiyorsa, dizinin gerçekten bir dizi olduğundan emin olduktan sonra array_key_exists('anahtar', $dizi) kullanın. Bu işlev yalnızca kontrol edilen dizinin ilk seviyesine bakar; iç içe dizilerde ilgili alt diziyi ayrıca kontrol etmeniz gerekir.

Düzeltmeyi sınayın​


Dosyayı kaydedin ve uyarıyı oluşturan isteği veya kod yolunu yeniden çalıştırın. Hem anahtarın bulunduğu hem de bulunmadığı durumu deneyin: isteğe bağlı alanda doğru varsayılanın kullanıldığını, zorunlu alanda ise işlemin uygun mesajla durduğunu doğrulayın. Uyarının kaybolması tek başına verinin doğru işlendiğini kanıtlamaz; oluşan çıktıyı veya kaydedilen sonucu da kontrol edin.

Sorun sürerse hata kaydındaki dosya, satır ve anahtar adını güncel kodla karşılaştırın; düzeltmenin çalıştırılan ortamda kaydedilip yayımlandığından emin olun. Tanılama yaparken parola, oturum bilgisi ve kişisel verileri ekrana veya kayıtlara dökmeyin; eklediğiniz geçici tanılama çıktısını iş bitince kaldırın. Canlı ortamda uyarıları gizlemek tek başına çözüm değildir; eksik verinin nedenini düzeltin.
 

Sende şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Foruma git ?

Bu konuyu görüntüleyen kullanıcılar

Bu konuyu şu anda görüntüleyen üye bulunmuyor.
Robotlar:
  • Anthropic