Undefined Index Hatası, isset ve empty kullanımı

PHP'de daha önce değişkenlerin tip tanımı yapılmadan kullanılabileceğini belirtmiştik. Java, C, C++, C# gibi dillerde değişken tanımı yapılmadan, değişken tipi belirtilmeden kullanılamaz. Fakat PHP'de tip tanımı yapmadan kullanabilirsiniz.

Değişkeni tanımlamadan kullanma özelliği avantajları ve dezavantajları var.  Her ne kadar  bu iş programcı açısından rahatlık gibi görünse de, string(metinsel) bilgi atadığınız değişkeni daha sonra unutup integer(tamsayı) bir bilgi atarsanız ortalık karışacaktır. Uzun bir kod sayfasında hatayı bulmak güçleşebilir. Belki class(sınıf) tarzından Object Oriented (Nesne Yönelimli) kod yazıyorsanız problemle daha az karşılaşırsınız ama eski tipte structural (yapısal) şekilde kod yazıyorsanız problem daha da artacaktır.  

PHP, her ne kadar tip dönşümleri açısından özel fonksiyonlar barındırsa da PHP'nin ilerleyen versiyonlarında tip tanımı yapmanın zorunlu olarak gelmesi iyi olur kanısındayım.



Gelelim problemimize, if ($_GET['islem'] !='') olarak GET metoduyla islem isim değişkeninin boş olup olmadığını kontrol etmek istersek, tarayıcından sayfayı yüklediğimizde aşağıdaki mesajı alacağız.

Notice: Undefined index: islem in C:\xampp\htdocs\web\admin\makaleEkle.php on line 101

Bu işlemden kurtulmanın yolu empty() ve isset() fonksiyonlarını kullanmaktır. isset() fonksiyonu bir değişkene atama yapılıp yapılmadığını kontrol etmek için kullanılır. Atama yapılmışsa true, yapılmamışsa false döndürür. empty() fonksiyonu ise bir değişkenin boş olup olmadığını kontrol etmek için kullanılır. Aşağıdaki kullanımlardan birini seçebilirsiniz.

if (!empty($_GET['islem'])) veya if (isset($_GET['islem'])) kullanımından birini seçebilirsiniz. 


Aşağıdaki kısa if kullanımı da kodu azaltır. ? işaretinden sonra şart doğru ise yapılacak işlemler, : işaretinden sonra şartın aksi durumundan sonra yapılacak işlemler yazılır.
 
$degisken= "";
 
//isset() kullanımı
$degisken= isset($_POST['degisken']) ? $_POST['degisken'] : '';
 
//empty() kullanımı
$degisken= !empty($_POST['degisken']) ? $_POST['degisken'] : '';

Bir dizide Undefined Index Hatası alıyorsanız, 
isset() veya array_key_exists() fonksiyonlarını kullanabilirsiniz.

//isset() kullanımı
$deger= isset($dizi['index']) ? $dizi['index'] : '';
 
//array_key_exists() kullanımı
$deger= array_key_exists('index', $dizi) ? $dizi['index'] : '';


Bu arada sayfanın en başına 

error_reporting(0);

yazarsanız hata mesajları görünmez, hata mesajlarının görünmesi hata ayaıklama(bugging) için gerekli olsa da  aslında bu bir nevi güvenlik önemidir. Çünkü hacker'lar hata mesajlarına göre hareket ederler.

Şimdilik bu kadar,

Mutlu kodlamalar,
Oğuzhan TAŞ
Haziran, 2016

Bookmark and Share