- Konu sahibi
- #1
“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.
Uyarıdaki anahtar adı ile dosya yolunu ve satır numarasını not edin. İlgili satırda örneğin
PHP 8 ve sonrasında tanımlanmamış bir dizi anahtarını okumak
Aşağıdaki varsayımsal örneği bir PHP dosyasına kaydedip çalıştırabilirsiniz.
Dizide
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:
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.
Anahtarın varlığı ile değerinin
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.
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öntem | Anahtar yoksa | Değer null ise |
|---|---|---|
| ?? | Varsayılanı kullanır | Varsayılanı kullanır |
| isset() | false | false |
| array_key_exists() | false | true |
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.