Tutorial PHP #13: Form Handling dengan Method GET dan POST

1. Apa itu Form Handling?

Form handling adalah proses menerima dan mengolah data yang dikirim user melalui form HTML. PHP menyediakan superglobal $_GET dan $_POST untuk mengakses data tersebut.

2. Method GET

Data dikirim melalui URL - terlihat di address bar browser.

<!-- form-get.html -->
<form method="GET" action="proses.php">
    <input type="text" name="nama" placeholder="Masukkan nama">
    <input type="text" name="kota" placeholder="Masukkan kota">
    <button type="submit">Kirim</button>
</form>
<!-- URL setelah submit: proses.php?nama=Ariq&kota=Semarang -->
<?php
// proses.php
if (isset($_GET["nama"]) && isset($_GET["kota"])) {
    $nama = $_GET["nama"];
    $kota = $_GET["kota"];
    echo "Halo $nama dari $kota!";
}
?>

Kapan pakai GET: pencarian, filter, pagination - data yang aman ditampilkan di URL dan bisa di-bookmark.

3. Method POST

Data dikirim melalui body request - tidak terlihat di URL.

<!-- form-post.html -->
<form method="POST" action="proses.php">
    <label>Username:</label>
    <input type="text" name="username">
    
    <label>Password:</label>
    <input type="password" name="password">
    
    <button type="submit">Login</button>
</form>
<?php
// proses.php
if ($_SERVER["REQUEST_METHOD"] === "POST") {
    $username = $_POST["username"];
    $password = $_POST["password"];
    echo "Login sebagai: $username";
}
?>

Kapan pakai POST: login, register, submit form, upload file - data sensitif atau besar yang tidak boleh muncul di URL.

4. Form di File yang Sama

Sering lebih praktis menaruh form dan proses di file yang sama:

<?php
$pesan = "";

if ($_SERVER["REQUEST_METHOD"] === "POST") {
    $nama = $_POST["nama"] ?? "";
    $pesan = "Halo, $nama! Form berhasil dikirim.";
}
?>

<!DOCTYPE html>
<html>
<body>
    <?php if ($pesan): ?>
        <p style="color:green"><?= $pesan ?></p>
    <?php endif; ?>
    
    <form method="POST">
        <input type="text" name="nama" placeholder="Nama kamu">
        <button type="submit">Kirim</button>
    </form>
</body>
</html>

5. Mengecek Apakah Input Ada

<?php
// Cara 1: isset()
if (isset($_POST["nama"])) {
    echo $_POST["nama"];
}

// Cara 2: null coalescing (lebih ringkas)
$nama = $_POST["nama"] ?? "Guest";
echo $nama;
?>

6. Perbedaan GET vs POST

  • GET: data di URL, bisa di-bookmark, cocok untuk pencarian dan filter
  • POST: data tersembunyi, tidak di-cache browser, cocok untuk form sensitif
  • Ukuran data GET terbatas oleh panjang URL (~2000 karakter), POST tidak terbatas
  • POST lebih aman untuk data seperti password, nomor kartu kredit, dsb

7. Ringkasan

  • $_GET mengambil data dari URL query string
  • $_POST mengambil data dari body request
  • Gunakan $_SERVER["REQUEST_METHOD"] untuk cek metode pengiriman
  • Pakai isset() atau ?? untuk menghindari error saat key tidak ada

Tutorial berikutnya membahas validasi input form di PHP.