ffCCBot/2.0 (http://commoncrawl.org/faq/)
NEW!! Buku Query MySQL Lihat Detail » x

Memahami GET dan POST Pada PHP dan HTTP

Dalam dunia internet, protokol yang umum digunakan adalah protokol HTTP, protokol ini memiliki beberapa metode request (request method) diantaranya adalah dari GET dan POST, jadi GET dan POST ini berdiri sendiri tidak berhubungan dengan bahasa pemrograman seperti PHP dan ASP, sehingga jika kita membicarakan GET dan POST pada PHP, maka sebenarnya kita sedang membicarakan GET dan POST pada HTTP.

Dalam berkomunikasi, PHP menggunakan ptorokol HTTP (ya memang karena php merupakan bahas pemrograman berbasis web), oleh karena itu PHP juga menyediakan sarana untuk berinteraksi dengan kedua metode request tersebut yaitu: (1) menyimpan data GET dan POST dan (2) mengirim data GET dan POST.

Pada artikel kali ini kita hanya akan membahas yang nomor 1, pembahasan kali terdiri dari beberapa bagian:

  1. GET pada HTTP dan $_GET pada PHP
  2. POST pada HTTP dan $_POST pada PHP
  3. Kapan Menggunakan GET dan Kapan Menggunakan POST
  4. $_REQUEST pada PHP

Get dan Post Pada PHP dan HTTP

1. GET pada HTTP dan $_GET pada PHP

Dalam bahasa inggris kita akrab dengan istilah GETting, dari istilah tersebut dapat diartikan bahwa metode GET pada HTTP ditujukan untuk mengambil (get) data dari server.

Pada metode ini umumnya data berbentuk query string yang dikirim via url, data tersebut berupa pasangan key=value yang dipisahkan dengan tanda & . Data tersebut digabung dengan url utama yang dipisahkan dengan tanda ?

Sebelum dikirim, terlebih dahulu data diproses sehingga memenuhi standar format URL. URL hanya boleh memuat huruf (besar dan kecil), angka, dan beberapa karakter lain dalam ASCII Character Set seperti (“.-_~), karakter di luar itu akan diubah ke format tertentu yang diawali tanda % kemudian diikuti dengan 2 digit hexadesimal, contoh:

Karakter URL Encoded
? %3F
@ %40
= %3D

angka pada kolom (URL Encoded) merupakan nilai hexadecimal dari character ASCII, disamping itu URL juga tidak boleh memuat spasi, sehingga spasi akan diubah menjadi tanda + atau %20 . Semua proses tersebut disebut url encoding.

Berikut ini merupakan contoh penggunaan metode GET pada form.  Kita buat file registrasi.php dan tuliskan kode HTML berikut ini:

<html>
<body>
	<form method="GET" action="">
		<input type="text" name="nama"><br>
		<input type="text" name="email"><br>
		<input type="submit" name="submit" value="Submit">
	</form>
</body>
</html>

setelah itu simpan dan jalankan pada browser, pada field yang muncul, misal kita isikan nama: Agus Prawoto Hadi, email: prawoto.hadi@gmail.com, jika kita klik Submit, maka browser akan mengirim request dengan bentuk seperti gambar berikut ini:

Get dan Post Pada PHP - GET pada HTTP

Gambar 1. GET Pada HTTP

dari gambar diatas terlihat bahwa metode yang kita gunakan adalah GET disertai query string nya, disamping itu url pada browser juga akan berubah menjadi:

http://jagowebdev.com/?nama=Agus+Prawoto+Hadi&email=prawoto%40gmail.com&submit=submit

dari data diatas terlihat bahwa <spasi> baik pada query string maupun pada url diencode menjadi tanda + dan @ menjadi %40. Ketika kita ambil data tersebut dengan PHP maka otomatis data pada url akan didecode sehingga kita dapatkan bentuk asli dari data yang kita kirim, mari kita tambahkan kode pada file registrasi.php, sehingga menjadi:

<html>
<body>
	<form method="GET" action="">
		<input type="text" name="nama"><br>
		<input type="text" name="email"><br>
		<input type="submit" name="submit" value="Submit">
	</form>

	<?php
	if ($_GET)
	{
		echo 'Nama: ' . $_GET['nama'];
		echo '<br>';
		echo 'Email: ' . $_GET['email'];
	}
	?>
</body>
</html>

ketika kita refresh browser maka akan kita dapatkan hasil:

Nama: Agus Prawoto Hadi
Email: prawoto.hadi@gmail.com

Variabel $_GET pada PHP berbentuk associative array. Variabel ini bentuknya sama seperti variabel pada umumnya, bedanya $_GET ini merupakan variabel globlal sehingga bisa diaksess dimana saja.

Karena bentuknya sama dengan yang lain, variabel ini dapat kita manipulasi sebagaimana kita memanipulasi variabel array lainnya, misal dengan menambahkan nilainya: $_GET['status'] = 'aktif' atau menghapusnya unset($_GET['nama']) 

Kelebihan dan Kekurangan

Terdapat beberapa kelebihan penggunaan metode GET, diantaranya adalah:

  1. Simpel, dan data mudah diedit, misal untuk menuju halaman 5 dari suatu website, kita tinggal mengganti urlnya.
  2. Halaman dapat dibookmark dan disimpan pada history browser sehingga mudah untuk diakses kembali.
  3. Dapat kembali ke halaman sebelumnya dengan mudah (dengan mengklik tombol Back pada browser).
  4. Dapat direfresh dengan mudah.
  5. Dapat di distribusikan/dishare.

Meskipun banyak kelebihannya, penggunaan metode ini memiliki beberpa kelemahan yaitu:

  1. Panjang data terbatas hanya 2kb – 8kb (tergantung browsernya), jika melebihi batas tersebut akan muncul pesan error 414 Request-URI Too Long, sehingga tidak dapat digunakan untuk mengirim data dalam jumlah besar.
  2. Hanya dapat mengirim data jenis teks, jenis lainnya seperti: gambar, file zip, dll tidak dapat dikirim.
  3. Karena data dikirim via URL, data tersebut mudah terekspose.

2. POST pada HTTP dan $_POST pada PHP

Kita sering mendengar istilah post, yang biasanya terkait dengan POSTing ke sosial media, dimana pada kegiatan tersebut kita mengirim data berupa tulisan atau gambar untuk disimpan di server sosial media tersebut.

Begitu juga dengan istilah POST pada HTTP, POST digunakan untuk mengirim data yang biasanya di gunakan untuk menambah/merubah data pada server.

Pada protokol HTTP, metode POST dapat dikirim baik melalui query string maupun body, seperti pada GET, data yang dikirim melalui query string akan ditampilkan pada URL dan sedangkan yang dikirim melalui body tidak terlihat oleh user.

Pada PHP, data POST yang dikirim melalui query string disimpan pada variabel $_GET (seperti metode GET) sedangkan yang dikirim melalui body disimpan pada variabel $_POST.

Sama seperti $_GET, variabel $_POST juga berbentuk associative array dan bersifat global yang artinya dapat diakses dimana saja, selain itu juga dapat dilakukan manipulasi sebagaimana variabel array lainnya.

Penggunaan metode POST sering kita jumpai terutama pada saat pengiriman data menggunakan form html. Misal: meneruskan contoh sebelumnya, pada file registrasi.php kita ganti method pada bagian form dari get menjadi post

<html>
<body>
	<form method="POST" action="">
		<input type="text" name="nama"><br>
		<input type="text" name="email"><br>
		<input type="submit" name="submit" value="submit">
	</form>

	<?php
	if ($_POST)
	{
		echo 'Nama: ' . $_POST['nama'];
		echo '<br>';
		echo 'Email: ' . $_POST['email'];
	}
	?>
</body>
</html>

misal field kita isi dengan nama: Agus Prawoto Hadi dan Email: prawoto.hadi@gmail.com, ketika kita klik submit, maka browser akan mengirim request ke server dengan bentu seperti gambar dibawah ini:

post_pada_http

Gambar 2. POST Pada HTTP

dari gambar diatas terlihat data dikirim pada bagian body (kotak merah paling bawah) dan data yang dikirim diencode dengan sistem sama dengan GET (url encode) yang memang secara default cara pengiriman data pada POST adalah menggunakan application/x-www-form-urlencoded, disamping itu juga ada multipart/form-data yang digunakan untuk pengiriman data berupa file/binary.

POST yang dikirim via query string dan HTTP body

Sebelumnya telah kita singgung mengenai pengiriman POST melaui query string yang artinya akan ditampilkan pada URL.

Sering kita fahami bahwa semua yang ada di URL adalah GET, karena kita sering berinteraksi dengan variabel $_GET dan dalam praktek hal tersebut tidak pernah menjadi masalah, tidak akan ada error yang muncul.

Namun demikian sebenarnya yang terjadi tidaklah demikian, coba kita buka kembali file register.php dan kita ubah menjadi:

<html>
<body>
	<form method="POST" action="?action=edit">
		<input type="text" name="nama"><br>
		<input type="text" name="email"><br>
		<input type="submit" name="submit" value="submit">
	</form>

	<?php
	if ($_POST)
	{
		echo '<pre>'; 
		print_r($_GET);
		print_r($_POST);
	}
	?>
</body>
</html>

misal kita isi dengan data yang sama dengan contoh sebelumnya, maka ketika kita klik submit, hasil yang kita peroleh adalah:

// $_GET
Array
(
    [action] => edit
)

// $_POST
Array
(
    [nama] => Agus Prawoto Hadi
    [email] => prawoto.hadi@gmail.com
    [submit] => submit
)

dan bentuk HTTP Requestnya seperti gambar dibawah ini:

Get dan Post Pada PHP - Query String

Gambar 3. Query String Pada POST

dari gambar diatas terlihat bahwa metode yang kita gunakan adalah POST dan data dikirim dengan dua cara baik melalui query string maupun HTTP body. query string disimpan pada variabel $_GET dan HTTP body disimpan pada variabel $_POST

Kelebihan dan kekurangan

Pengiriman data menggunakan metode POST memiliki beberapa kelebihan diantaranya:

  1. Lebih aman dari pada metode GET karena data yang dikirim tidak terlihat, serta parameter yang dikirim tidak disimpan pada history browser/log browser.
  2. Dapat mengirim data dalam jumlah besar.
  3. Dapat mengirim berbagai jenis data seperti gambar, file, dll, tidak harus teks.

Meskipun terdapat kelebihan, penggunaan metode ini juga memiliki beberpa kelemahan, walaupun sebenarnya bukan kelemahan melainkan memang menjadi karakteristik dari metode ini:

  1. Data tidak disimpan pada history browser.
  2. Data tidak dapat dibookmark.
  3. Karena dianggap sebagai data sensitif, maka ketika kita merefresh browser, akan  muncul konfirmasi pengiriman ulang data, demikian juga ketika kita tekan tombol back.

3. Kapan Menggunakan GET dan Kapan Menggunakan POST

Untuk memutuskan apakah kita akan menggunakan metode GET atau POST, kita harus selalu mengajukan pertanyaan: apakah akan terjadi perubahan pada server? jika ya, maka kita gunakan POST, jika tidak maka kita gunakan GET.

Contohnya adalah ketika membuat pagination, kita cukup menggunakan GET tidak perlu POST, bisa dibayangkan ketika kita sudah sampai halaman 5 suatu artikel, dan kita mau membookmarknya untuk dibaca di lain waktu, dan ternyata tidak bisa karena halaman tersebut mengunakan POST, dengan terpaksa kita harus membuka halaman 1 lagi!,

Begitu juga dengan sistem pencarian seperti pada google, bisa dibayangkan jika metode yang digunakan adalah POST.

Contoh lainnya adalah penggunaan ID untuk menghapus data, perhatikan url berikut: http://www.contoh.com/user.php?action=delete&id=1, url ini akan berbahaya jika hal ini benar-benar terjadi.

Kenapa?

Karena data user akan terhapus dengan begitu mudahnya, lain halnya jika ID tersebut digunakan hanya untuk menampilkan data seperti http://www.contoh.com/user.php?action=view&id=1.

singkatnya GET untuk READ data, POST untuk CREATE, UPDATE, DELETE data.

Pertanyaan kedua adalah apakah ada data sensitif yang dikirim? jika ya maka kita gunakan POST.

Contohnya adalah pengiriman username dan password ketika login, atau data keuangan seperti kartu kredit. Jika data tersebut dikirim via url maka jelas data tersebut akan terekspose kemana-mana terutama jika ter index oleh google. (Kecuali pada penggunaan AJAX).

4. $_REQUEST pada PHP

PHP menyediakan variabel global bernama $_REQUEST, variabel ini merupakan gabungan dari tiga variabel yaitu: $_GET, $_POST dan $_COOKIE. Karakteristik variabel ini sama dengan $_GET dan $_POST yaitu berbentuk associative array yang bersifat global dan dapat kita manipulasi seperti variabel array lainnya.

Dalam pembentukan variabel $_REQUEST, variabel yang menjadi prioritas adalah $_POST, sehingga jika antara $_GET dan $_POST terdapat key yang sama, maka yang digunakan adalah data pada variabel $_POST, contoh mari kita ubah file register.php dengan menambahkan satu hidden field bernama action:

<html>
<body>
	<form method="POST" action="?action=edit">
		<input type="text" name="nama"><br>
		<input type="text" name="email"><br>
		<input type="hidden" name="action" value="insert">
		<input type="submit" name="submit" value="submit">
	</form>

	<?php
	if ($_POST)
	{
		echo '<pre>'; 
		print_r($_GET);
		print_r($_POST);
		print_r($_REQUEST);
	}
	?>
</body>
</html>

seperti pada contoh sebelumnya, kita isikan nama: Agus Prawoto Hadi dan email: prawoto.hadi@gmail.com, ketika kita submit maka kita dapatkan hasil:

// $_GET
Array
(
    [action] => edit
)

// $_POST
Array
(
    [nama] => Agus Prawoto Hadi
    [email] => prawoto.hadi@gmail.com
    [action] => insert
    [submit] => submit
)

// $_REQUEST
Array
(
    [action] => insert
    [nama] => Agus Prawoto Hadi
    [email] => prawoto.hadi@gmail.com
    [submit] => submit
)

dari contoh diatas terlihat bahwa nilai action yang digunakan adalah insert yang terdapat pada variabel $_POST

Saya pribadi jarang dan mungkin tidak pernah menggunakan variabel $_REQUEST karena akan menyulitkan dan membuat ambigu, tidak jelas dari mana datangnya data apakah dari inputan user atau dari url, terlebih jika program yang kita buat kompleks, dengan menggunakan $_GET atau $_POST masalah tersebut tidak akan terjadi.

Kesimpulan

GET dan POST merupakan metode yang digunakan protokol HTTP untuk pertukaran data.

Pada PHP, data yang dikirim menggunakan metode GET akan disimpan dalam variabel $_GET, sedangkan POST akan disimpan pada variabel $_POST (untuk data yang dikirim via  url disimpan pada variabel $_GET).

Masing masing metode memiliki kelebihan dan kekurangan dan memang sebenarnya kedua metode tersebut ditujukan untuk keperluan berbeda, sehingga kita harus tahu kapan menggunakan GET dan kapan menggunakan POST.

PHP juga menyediakan variabel $_REQUEST yang merupakan gabungan dari variabel $_GET, $_POST dan $_COOKIE. Pada variabel ini tidak terlihat dari mana datangnya data apakah dari GET atau POST sehingga sebaiknya lebih berhati hati ketika menggunakan variabel ini.

Demikian pembahasan mengenai GET dan POST pada PHP dan HTTP semoga dapat bermanfaat.

Jangan lupa beritahu sobat yang lain:

 

Recomended Post

10 Feedback dari pembaca

Silakan tinggalkan komentar

*

Like Us

Dapatkan update artikel terbaru via E-Mail
  1. Query MySQL di Dalam PHP Loop – Bad Practice !!!

  2. Software Kompres dan Optimasi Gambar / Foto (JPG dan PNG) – Tested

  3. 40+ Theme WordPress Gratis Untuk Blog – Modern & Responsive

  4. Eksklusif Cheat Sheet PHP Bahasa Indonesia – Pendamping Belajar PHP

  5. PHP FORM III: Menampilkan Data MySQL Dengan PHP dan Form HTML

  6. Tutorial PHP Form II: Menampilkan Hasil Input Form HTML dengan PHP

  7. Tutorial PHP Form I: Menghubungkan Form HTML dengan PHP

  8. Menampilkan Data Dari Beberapa Tabel MySQL – JOIN Pada MYSQL

  9. Memahami dan Menampilkan Tanggal dan Waktu Pada PHP

  10. Menghitung Selisih Waktu Dengan PHP – Cara Termudah