Tutorial Form PHP Part 4: Pengertian Register Global dan Register Long Array (deprecated)

Selain menggunakan variabel SuperGlobals $_GET, $_POST dan $_REQUEST, PHP masih menyediakan cara lain untuk mengakses nilai dari form. Dalam tutorial kali ini kita akan Mengenal Pengertian Register Global dan Register Long Array.


Pengertian Register Global dan Register Long Array

Register Global dan Register Long Array adalah metode lain dalam PHP yang bisa digunakan untuk menampilkan hasil form, namun kedua metode ini sekarang sudah menyandang status 'deprecated' yang berarti tidak disarakan digunakan dan kemungkinan tidak akan didukung oleh PHP pada masa mendatang. Kedua metode ini adalah metode 'legacy' atau warisan yang digunakan pada versi PHP terdahulu.

Saya membahas Register Global dan Register Long Array hanya sebagai menambah pengetahuan, karena mungkin saja kita masih mendapati kode PHP lama (terutama versi PHP 4 kebawah) yang masih menggunakan kedua metode ini.

Baik Register Global dan Register Long Array sudah tidak disarankan untuk digunakan karena memiliki celah keamanan yang mudah dibobol. Anda disarankan untuk menggunakan variabel $_GET, $_POST atau $_REQUEST.

Update: Register Global dan Register Long Array sudah tidak didukung lagi dalam PHP. Jika anda menemukan pesan error pada saat mengaktifkan file php.ini, maka anda tidak bisa menjalankan contoh dalam tutorial ini, namun tidak perlu khawatir karena baik Register Global dan Register Long Array memang tidak disarankan digunakan lagi.

Register Globals tidak didukung lagi oleh PHP


Cara Mengakses Nilai Form dengan Register Global

Register Global adalah sebuah metode dalam PHP yang 'memudahkan' pengambilan nilai form dengan cara menjadikan atribut nama dari objek form secara otomatis menjadi variabel di dalam PHP.

Misalkan kita memiliki objek form sebuah inputan dengan kode HTML sebagai berikut:

<input type="text" name="user_name" />

Maka di dalam halaman PHP, akan langsung tersedia sebuah variabel $user_name yang berisi nilai dari objek form tersebut dan siap untuk diakses, terlepas dengan cara apa form tersebut dikirim (apakah get atau post)

Dalam versi PHP 5.5 bawaan XAMPP yang saya gunakan, Register Global sudah tidak didukung lagi. Namun jika anda menggunakan PHP versi lama dan ingin mencobanya, maka kita harus mengubah sebuah settingan PHP dalam file php.ini. (cara mengubah setingan file php.ini pernah dibahas dalam Cara Merubah File Konfigurasi php.ini)

Bukalah file php.ini, lalu cari temukan baris setingan berikut:

register_globals=off

Kemudian aktifkan fasilitas ini menjadi:

register_globals=on

Cara Merubah Settingan Register Globals dalam php.iniSetelah diubah, save file php.ini, dan matikan web server apache (dari XAMPP Control panel), lalu aktifkan lagi (restart). Hal ini diperlukan agar web server Apache dapat membaca perubahan setingan PHP yang baru saja kita lakukan.

Selanjutnya, mari kita gunakan kembali halaman form.html sebagai contoh form. Jika anda belum membuah file tersebut, berikut adalah kode HTML yang dibutuhkan:

<!DOCTYPE html>
<head>
   <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
   <title>Belajar Form PHP</title>
</head>
<body>
   <h2>Tutorial Belajar Form HTML - PHP </h2>
     <form action="proses.php" method="get">
     Nama: <input type="text" name="nama" />
     <br />
     E-Mail: <input type="text" name="email" />
      <br />
   <input type="submit" value="Proses Data" >
   </form>
</body>
</html>

Tampilan Struktur Form Sederhana HTMLDalam percobaan Register Global ini, kita tidak akan melakukan perubahan apa-apa pada halaman form.html, namun pada file proses.php, ubahlah menjadi:

<?php
   echo $nama;
   echo "<br />";
   echo $email;
?>

Silahkan mencoba form tersebut, dan jika setingan register_globals telah aktif, maka hasil form akan tampil sebagaimana contoh-contoh kita sebelumnya. Anda juga bisa mengubah metode pengiriman form dari method=get menjadi method=post dan halaman proses.php akan menampilkan hasilnya dengan sukses.

Sepintas cara pengaksesan nilai form seperti ini sangat memudahkan penulisan program, namun register global memiliki celah keamanan yang bisa berdampak fatal. Hal ini terjadi karena pengunjung website bisa 'memasukkan' variabel PHP ke dalam halaman kita.

Misalkan kita memiliki sebuah halaman login.php yang berfungsi untuk memproses hak akses untuk bisa masuk ke situs, dan kode PHP nya adalah sebagai berikut:

<?php
// cek apakah user ada di database
mysql_connect("localhost","root","");
mysql_select_db("mahasiswa");
$user_db="SELECT * FROM tabel_user WHERE user='$user_name'";
$match = mysql_num_rows($user);
 
//jika user valid, ubah variabel $hak_akses menjadi true
if ($match)
{
   $hak_akses=true;
}
 
//jika hak akses true, masuk ke proses utama
if ($hak_akses==true)
{
   // kode program jika user valid
}             
?>

Sekarang, jika register_global = on, seseorang bisa 'melompati' bagian validasi tersebut dengan menuliskan alamat URL berikut:

login.php?hak_akses=true

Dengan mengetikkan alamat tersebut, variabel $hak_akses akan langsung bernilai true di dalam halaman login.php, sehingga seseorang bisa mengakses sistem kita tanpa melalui proses validasi user. Karena hal inilah, mengaktifkan register global dianggap berbahaya dan tidak disarankan.


Cara Mengakses Nilai Form dengan Register Long Array

Cara lain untuk mengambil nilai dari form adalah menggunakan Register Long Array. Sesuai dengan namanya, Register Long Array memiliki nama variabel yang lebih panjang jika dibandingkan variabel biasa (variabel $_GET dan $_POST).

Untuk mengambil nilai form yang dikirim dengan method=get, kita menggunakan $HTTP_GET_VARS, dan untuk method=post menggunakan $HTTP_POST_VARS.

Sama seperti Register Globals, Register Long Array tidak didukung lagi untuk PHP versi terbaru. Jika anda memiliki PHP versi lama dan ingin mencobanya, lakukan perubahan settingan php.ini untuk pilihan register_long_arrays=on, seperti gambar berikut ini:

Cara Merubah Settingan Register Long Array dalam php.iniSetelah itu, restart web server apache menggunakan XAMPP Control Panel.

Sebagai contoh, masih menggunakan halaman form.html, kali ini saya akan mengubah halaman proses.php menjadi:

<?php
   echo $HTTP_GET_VARS['nama'];
   echo "<br />";
   echo $HTTP_GET_VARS['email'];
?>

Dan jika tidak ada masalah, kode program tersebut akan menampilkan hasil inputan form dari halaman form.html.

Register Long Array tidak disarankan lagi karena PHP telah memperkenalkan metoda variabel $_GET dan $_POST yang lebih praktis.


Dalam tutorial kali ini, kita telah mempelajari cara mengakses nilai form menggunakan Register Globals dan Register Long Array. Kedua cara ini sudah tidak digunakan lagi, dan saya membahasnya karena mungkin kita masih menemukan kode PHP lama yang masih menggunakannya.

Dalam tutorial form PHP selanjutnya, kita akan menggunakan variabel super global $_GET dan $_POST untuk menampilkan hasil form.

Add Comment