Saat bekerja dengan form HTML dan PHP, kamu akan sering berurusan dengan dua method HTTP: GET dan POST. Keduanya adalah cara pengiriman data dari browser ke server, namun memiliki karakteristik yang sangat berbeda. Memahami kapan harus menggunakan GET dan kapan POST adalah keterampilan dasar yang menentukan keamanan dan ketepatan desain aplikasi web kamu.
Cara Kerja GET
Dengan method GET, data dikirimkan melalui URL sebagai query string. Kamu mungkin sudah sering melihat URL seperti ini:
https://example.com/produk.php?kategori=buku&halaman=2&urut=harga
Di PHP, data GET dibaca melalui superglobal $_GET:
<?php
// URL: produk.php?kategori=buku&halaman=2
$kategori = $_GET['kategori'] ?? 'semua'; // 'buku'
$halaman = (int) ($_GET['halaman'] ?? 1); // 2
echo "Kategori: $kategori, Halaman: $halaman";
// Cek apakah parameter ada
if (isset($_GET['urut'])) {
$urut = htmlspecialchars($_GET['urut']);
echo "Diurutkan berdasarkan: $urut";
}
Cara Kerja POST
Dengan method POST, data dikirimkan di dalam body request HTTP โ tidak terlihat di URL. Di PHP, data POST dibaca melalui superglobal $_POST:
<!-- Form HTML dengan method POST -->
<form action="proses_login.php" method="POST">
<input type="text" name="username" placeholder="Username">
<input type="password" name="password" placeholder="Password">
<button type="submit">Login</button>
</form>
<?php
// proses_login.php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$username = trim($_POST['username'] ?? '');
$password = $_POST['password'] ?? '';
if (empty($username) || empty($password)) {
echo "Username dan password wajib diisi.";
} else {
// Proses login...
echo "Mencoba login sebagai: " . htmlspecialchars($username);
}
}
Tabel Perbandingan GET vs POST
- Visibilitas data โ GET: data terlihat di URL. POST: data tersembunyi di body request.
- Keamanan โ GET: kurang aman untuk data sensitif. POST: lebih aman (meski tetap perlu HTTPS).
- Batas ukuran โ GET: terbatas (sekitar 2048 karakter tergantung browser/server). POST: jauh lebih besar (bisa diatur di php.ini).
- Bisa di-bookmark โ GET: ya. POST: tidak.
- Cache browser โ GET: bisa di-cache. POST: tidak di-cache.
- Histori browser โ GET: tercatat. POST: tidak.
- Idempotent โ GET: ya (aman diulang). POST: tidak (mengirim ulang bisa duplikat data).
Kapan Menggunakan GET?
Gunakan GET untuk:
- Pencarian dan filter produk (
?q=laptop&harga=min-5juta) - Paginasi halaman (
?halaman=3) - Parameter tampilan yang boleh di-bookmark atau dibagikan
- Permintaan data yang tidak mengubah state di server (idempotent)
Kapan Menggunakan POST?
Gunakan POST untuk:
- Form login, registrasi, dan pengiriman data sensitif
- Membuat, mengubah, atau menghapus data di database
- Upload file
- Data yang tidak boleh muncul di URL atau histori browser
Membaca Method Request dengan $_SERVER
Cara yang bersih untuk menangani form adalah mengecek method request terlebih dahulu:
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// Proses form yang dikirim
$nama = trim($_POST['nama'] ?? '');
$email = trim($_POST['email'] ?? '');
// Validasi
if (empty($nama)) {
$errors[] = "Nama wajib diisi.";
}
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$errors[] = "Format email tidak valid.";
}
if (empty($errors)) {
// Simpan ke database atau proses lainnya
echo "Data berhasil dikirim!";
}
} else {
// Tampilkan form (GET request)
// ... tampilkan HTML form di sini
}
Menggunakan $_REQUEST
PHP juga memiliki $_REQUEST yang menggabungkan data dari $_GET, $_POST, dan $_COOKIE. Namun, penggunaannya tidak disarankan karena:
- Tidak jelas data berasal dari mana.
- Bisa menimbulkan kerentanan keamanan jika GET dan POST bercampur tak terduga.
Selalu gunakan $_GET atau $_POST secara eksplisit sesuai kebutuhan.
Validasi dan Sanitasi Input
Apapun method yang digunakan, jangan pernah mempercayai data dari pengguna. Selalu lakukan validasi dan sanitasi:
<?php
// Sanitasi string biasa
$nama = htmlspecialchars(trim($_POST['nama'] ?? ''), ENT_QUOTES, 'UTF-8');
// Validasi dan filter integer
$umur = filter_input(INPUT_POST, 'umur', FILTER_VALIDATE_INT, [
'options' => ['min_range' => 1, 'max_range' => 120]
]);
// Validasi email
$email = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL);
// Validasi URL
$website = filter_input(INPUT_GET, 'redirect', FILTER_VALIDATE_URL);
if ($umur === false) {
echo "Umur tidak valid.";
}
Kesimpulan
GET dan POST memiliki peran yang berbeda dan keduanya sama-sama penting. Gunakan GET untuk data yang boleh terlihat di URL dan bisa di-bookmark, gunakan POST untuk data sensitif, form pengiriman, dan operasi yang mengubah data. Yang terpenting, selalu validasi dan sanitasi semua input dari pengguna โ baik dari GET maupun POST โ sebelum diproses lebih lanjut.