Cara Mengatasi Undefined Index atau Undefined Variable Pada PHP - Pernahkah sobat menjumpai pesan sebagai berikut ketika menjalankan script PHP?
Notice: Undefined index: ...
atau
Notice: Undefined variable: ...
terutama bagi sobat yang menggunakan versi PHP di atas 5.3.1.
Sebenarnya pesan tersebut bukan syntax error (kesalahan sintaks) yang mengakibatkan script tidak bisa berjalan, namun hanya sekedar peringatan saja yang seharusnya dihindari.
Dalam artikel saya yang lain, pernah dikupas sedikit mengenai cara menghilangkannya yaitu dengan memodifikasi sedikit konfigurasi di php.ini. Namun solusi tersebut tidak terkait dengan teknik scripting yang baik yang seharusnya dilakukan oleh programmer PHP. Solusi dengan memodifikasi php.ini tersebut pastinya akan sulit dilakukan jika script PHP yang muncul peringatan tersebut berada di server hosting, karena hanya pihak admin saja yang bisa memodifikasinya.
OK. Sebelum penjelasan bagaimana teknik scripting PHP yang baik supaya bisa pesan di atas tidak muncul, terlebih dahulu saya jelaskan penyebabnya. Munculnya peringatan tersebut disebabkan karena adanya suatu variabel atau index array yang sebelumnya belum diassign oleh suatu nilai, namun digunakan dalam suatu proses.
Perhatikan contoh script PHP berikut ini
<?php if ($a == 2) { echo "Nilai variabel a adalah 2"; } else echo "Nilai variabel a adalah bukan 2"; ?>
Jika sobat jalankan script di atas, maka kemungkinan akan muncul pesan Notice: Undefined variabel : $a. Lho kok bisa? iya karena di dalam script di atas, secara tiba-tiba variabel $a digunakan sebagai syarat di IF nya, padahal sebelumnya tidak ada proses assignment atau pemberian nilai pada variabel $a tersebut. Penggunaan variabel $a sebagai syarat dalam IF itu dirasa aneh oleh PHP, karena sebelumnya belum dikenalkan apa itu variabel $a, dan berapa nilainya.
Lalu solusinya bagaimana? solusinya adalah coba kenalkan dahulu variabel $a nya dan beri nilai sembarang yang sifatnya default, misalnya 0 (jika $a ini adalah suatu variabel yang nantinya akan diassign dengan bilangan), atau blank character ” jika $a ini nantinya akan diassign dengan suatu string atau karakter. Sehingga script yang baik dari contoh di atas adalah sbb:
<?php $a = 0; if ($a == 2) { echo "Nilai variabel a adalah 2"; } else echo "Nilai variabel a adalah bukan 2"; ?>
Selanjutnya, perhatikan contoh script yang lain berikut ini
contoh.php
<?php if ($_GET['op'] == 'edit') { echo "ini adalah proses edit"; } else if ($_GET['op'] == 'hapus') { echo "ini adalah proses hapus"; } else { echo "ini bukan proses manapun"; } ?>
Jika sobat jalankan script di atas dengan URL http://namahost/contoh.php mungkin akan menjumpai pesan ‘Notice: undefined index: op’. Namun, jika kita panggil scriptnya dengan URL http://namahost/contoh.php?op=edit, maka pesan tersebut tidak muncul. Lho kok bisa?? Apa tuh sebabnya? Ketika sobat panggil script contoh.php dengan URL http://namahost/contoh.php maka PHP nya tidak kenal dengan index ‘op’ di dalam $_GET['op'] pada statement IF() nya. Kenapa bisa tidak kenal? ya karena kita tahu bahwa $_GET[] di PHP berguna untuk membaca nilai parameter yang direquest melalui GET method (request melalui URL). Sedangkan ketika dipanggil dengan URL http://namahost/contoh.php?op=edit maka error tidak muncul karena nilai $_GET['op'] nya ada, yaitu ‘edit’ yang disertakan dalam URL nya. Lalu solusinya bagaimana? Solusinya adalah sobat gunakan tambahan isset() sbb:
contoh.php
<?php if (isset($_GET['op'])) { if ($_GET['op'] == 'edit') { echo "ini adalah proses edit"; } else if ($_GET['op'] == 'hapus') { echo "ini adalah proses hapus"; } } else { echo "ini bukan proses manapun"; } ?>
Peran isset() adalah untuk mengecek apakah $_GET['op'] ini sudah diset atau belum, dalam arti mengecek apakah di GET method melalui URL nya memuat parameter ?op=... atau tidak. Jika tidak ada parameternya, maka nilai isset($_GET['op']) ini menghasilkan FALSE sehingga pengecekan IF($_GET['op'] = '..') ini tidak akan dieksekusi. Solusi ini juga bisa diterapkan pada kasus POST method (request via form).