Mengatasi Masalah Undefined Index di PHP 5

undefined index
Bagi yang beralih dari PHP 4.x ke PHP 5.x mungkin pernah menjumpai peringatan seperti ini:

Notice: Use of undefined constant mod – assumed ‘mod’ in /var/www/blogsaya/index.php on line 7

atau seperti ini:

Notice: Undefined index: mod in /var/www/blogsaya/index.php on line 7

atau seperti ini:

Notice: Undefined variable: mod in /var/www/blogsaya/index.php on line 8

Ketiganya hanyalah pesan peringatan (notice), bukan kesalahan (error). Namun nampak tidak elegan jika pesan seperti itu muncul di halaman website kita. Untuk menyembunyikan pesan peringatan tersebut cukup dengan menambahkan sebaris kode berikut di bagian paling awal kode PHP.

error_reporting(E_ALL ^ (E_NOTICE | E_WARNING));

Kode tersebut hanya akan menyembunyikan semua pesan peringatan level Notice dan Warning yang muncul, pesan kesalahan yang lain, misal error, tetap muncul.

Namun tentu saja menyembunyikan pesan peringatan bukan solusi yang baik. Notice message tersebut muncul karena penanganan register global di PHP 5.x yang sedikit berbeda dengan PHP 4.x, dan juga ada variable atau konstanta yang tidak diinisialisasi sebelum digunakan. Pelanggaran yang umum dalam bahasa pemrograman PHP tetapi penegakan hukumnya kurang ketat.

Perhatikan contoh berikut:

<form action="" method="post">
  <input type="text" name="mod" />
  <input type="submit" />
</form>

<?php
  echo $_POST[mod];
  echo $mod;

Kedua pesan pertama muncul karena penggunaan register global yang kurang tepat, seperti pada contoh di atas pada baris ke-7, seharusnya ditulis seperti berikut:

echo $_POST['mod'];

Begitu kesalahan pertama diperbaiki, pesan yang pertama hilang namun yang kedua tidak. Itu terjadi karena variable global $_POST belum diinisialisasi. Jadi kode baris ke-7 seharusnya seperti berikut:

if (isset($_POST['mod']))
  echo $_POST['mod'];

Lalu yang terakhir mudah saja kita selesaikan, tinggal kita inisialisasi saja variable $mod dengan string kosong seperti berikut:

$mod = '';
echo $mod;

Atau saya lebih suka menggunakan operator ternary (bukan operator tersier) seperti berikut:

$mod = isset($_POST['mod']) ? $_POST['mod'] : '';

Dengan menggunakan operator ternary ini lebih saya sukai karena bisa sekaligus menyelesaikan ketiga permasalahan di atas. Operator ternary adalah operator yang memiliki tiga buah argumen atau operasi matematika, yang dipisahkan dengan tanda “?:”. Pernyataan di atas berarti: jika variable global $_POST['mod'] ada isinya, maka $_POST['mod'] akan disalin ke $mod , jika tidak maka $mod akan berisi string kosong.

Tulisan ini adalah kategori baru yang ingin saya catat di blog, yaitu tentang troubleshooting (penyelesaian masalah) dalam pemrograman. Troubleshooting adalah salah satu aspek paling penting dalam mempelajari bahasa pemrograman apapun.

About Sibudi

Ubuntu user | Loves books | Blogger | Web Developer | Learn PHP, JavaScript, Ruby & Python the hard way

17. November 2011 by Sibudi
Categories: Troubleshooting | Tags: , | 36 comments

Comments (36)

  1. Informasi yang sangat menarik, hal ini saya jumpai… saat saya membackup website online ke offline dengan menggunakan xampp…. semula saya pikir ada kesalahan…. Weww ternyata setelah membaca artikel ini jadi mengerti… Trimks sudah share.. semoga bermanfaat…

  2. thanks info nya .. sangat membantu …

  3. Pingback: Menyingkat Kode PHP menggunakan Operator Ternary | Sibudi </>

  4. wah, makasih gan, jadi solved masalah :)

  5. thanks gan…problem solved

  6. ok gan thanks codink na sakti juga 3 hari gw cari solusina masuk ke blog ini baru jitu thank banget

  7. gan ane mo nanyak nie klo kita pke radio button mis : jurusan kita cek lis . trus kita kirim kok hasil na jadi jurusan on gimana thu solusina gan?

  8. Terima kasih banyak atas artikelnya, sangat bermanfaat!

  9. ty share nya nambah pengetahuan buat saya yang lagi belajar php otodidak….

  10. Pingback: Akses Database Menggunakan PDO pada PHP | Sibudi </>

  11. bang, itu kan kalo echo, kalo kita mau insert ke database kan di table nya jadi nambah string kosong di tiap barisnya pas kita refresh. itu gimana ya bang ya? thanks sebelumnya

  12. thanx om budi :D

    akhirnya hasil dari saya berpikir sendiri php yang error undefined itu semakin diperjelas..

    sebenarnya php itu tidak lah sesulit yang dipikirkan, asal kita bisa menalar semuanya, walaupun beljar php scra otodidak seperti saya:

    seprti halnya diatas adala : undefined Variable bla bla bla : berarti Variable yang diesbutkan tidak didefiniskan atau salah pendifinisannya.
    biasanya adalah memanggil Variable tambahan atau fungsi seperti :

    $arg = $var -> post_content;
    dan seharusnya $var diatas sudah dijelaskan
    nilainya sebelumnya, apabila di Code sebelumnya memang tidak tertulis tapi scipt berjalan dengan baik , maka bisa ditulis :
    $var = ‘ ‘; //fungsi adalah noll / kosong
    $arg = $var -> post_content;

    atau var bisa dengan nilai NULL yaitu NULL adalah Kosong / Tidak punya nilai :D

    makasih ya om

  13. Wah sangat bermanfaat sekali, saya langsung praktekkan dan eng ing eng notice undefined index bla bla bla jd ilang…tp ada satu permasalahan lagi yg blm selesai dan saya mohon pencerahannya karena sy org awam yg ingin belajara PHP, masih ada muncul:

    Deprecated: Function session_is_registered() is deprecated in C:\xampp\htdocs\penjualan2\admin\ubah_pass.php on line 3

    kalo ada hal seperti itu kira2 saya harus bagaimana ya gan? mohon pencerahan penyelesaiannya.. terima kasih atas perhatian dan bantuannya

    • Itu artinya fungsi session_is_registered() sudah akan ditinggalkan oleh PHP dan sebaiknya segera diganti dengan fungsi lain yg sejenis.

      Ganti dengan $_SESSION['nama_variable'], dan gunakan isset() untuk memeriksa apakah suatu variable sudah terdaftar ke dalam session.

      Contoh: if ( isset( $_SESSION['nama_variable'] ) )

  14. membantu kali ne artikelnya, kebetulan lagi upgrade wamp server :D , makasih tutonya

  15. Bang, thank’s beraaaat….

  16. mantap gan sangat membantu ane ne..

    sekalian nitip blog hehe : ronifisla.blogspot.com

    dapursn.blogspot.com

  17. saya memakai script

    tapi ga muncul, dulu muncul undefined tapi setelah menambah error_reporting(E_ALL ^ (E_NOTICE | E_WARNING)); udah ga muncul akan tetapi data jadi ga muncul
    akan tetpi script diatasnya

    bisa memunculkan datanya, kira 2 gimananya ya solusinya

    • ini script yang pertama
      $perintah = “SELECT * FROM setting WHERE id=’1′”;
      $dadi = mysql_query($perintah);
      $baris = mysql_fetch_array($dadi);
      echo $baris['instansi'];

      dan ini script yang berhasil
      $query = “SELECT * FROM admin WHERE username=’”.$username.”‘ AND password=’”.$password.”‘”;
      $hasil = mysql_query($query);
      $row=mysql_fetch_array($hasil);
      echo $row['username'];

    • Seperti yang sudah saya bilang di atas, menyembunyikan pesan kesalahan tidak akan menyelesaikan masalah :)

      Solusinya adalah pahami dengan baik dan selesaikan masalah satu persatu. Good luck :)

  18. gan kalo cara menyimpan form dengan metode one to many sperti apa ya codingnya..
    mohn pencerahannya…

  19. Behh… jitu… langsung berhasilll… mkasih gan ilmunya!

  20. terima kasih om….
    sangat membantu solve problemnya…..

  21. bang klw bgini pesan bagimana

    Notice: Use of undefined constant username – assumed ‘username’ in C:\xampp\htdocs\griya\griyagaya\adminweb\cek_login.php on line 9

    Notice: Use of undefined constant password – assumed ‘password’ in C:\xampp\htdocs\griya\griyagaya\adminweb\cek_login.php on line 10

    Fatal error: Call to undefined function session_register() in C:\xampp\htdocs\griya\griyagaya\adminweb\cek_login.php on line 19

  22. kalo skrip seperti ini bisa masuk ke database ga??

  23. gan, kalau ad di Artikel terkait ada tulisan Undefined gimana itu?

  24. Makasih mas dab artikelnya sangat membantu, urusan jadi kelar deh hehehhe

  25. Makasih banyak mas, akhirnya problemnya solved juga :D

Leave a Reply

Required fields are marked *