HTML form: GET, POST, action, dan name dengan Contoh PHP

HTML <form> mengelompokkan kontrol input ke dalam form yang dikirim ke server. action memilih alamat pemrosesan dan method memilih metode pengiriman. GET meletakkan nilai dalam query URL dan POST meletakkannya di body permintaan, tetapi POST sendiri tidak mengenkripsi data.

Peran action, method, dan name

action adalah alamat yang diminta oleh browser. Jika dihilangkan, formulir dikirim ke alamat dokumen saat ini. Metode default adalah get, cocok untuk pencarian dan pengambilan data yang tidak mengubah keadaan. Pembuatan dan pembaruan umumnya menggunakan post, dengan autentikasi, otorisasi, dan validasi permintaan di sisi server.

id dari sebuah kontrol mengidentifikasinya dalam dokumen dan mengaitkan labelnya; name adalah kunci data yang dikirim. Input biasa tanpa nama akan dihilangkan, begitu juga kontrol yang dinonaktifkan dan tombol radio atau kotak centang yang tidak diceklis. Jangan menempatkan satu formulir di dalam formulir lain.

Siapkan formulir praktik secara lengkap

Untuk memeriksa server penerima juga, membuka file HTML saja tidak cukup. Buat folder latihan kosong di lingkungan lokal dengan PHP 8.x terpasang, dan simpan kedua file di bawah ini dalam folder tersebut. Contoh ini menampilkan nilai yang diterima; ini tidak menyimpan data, mengirim email, atau memodifikasi akun.

File pertama adalah index.html. Tombol submit kedua menggunakan formmethod sehingga input yang sama dapat dibandingkan menggunakan GET dan POST.

<!doctype html>
<html lang="id">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Latihan formulir GET dan POST</title>
</head>
<body>
  <h1>Membandingkan metode permintaan</h1>
  <form action="receive.php" method="get">
    <p>
      <label for="query">Kata pencarian</label>
      <input type="text" id="query" name="q" maxlength="80" required>
    </p>
    <p>
      <label for="note">Catatan</label>
      <textarea id="note" name="note" maxlength="300"></textarea>
    </p>
    <button type="submit">Periksa dengan GET</button>
    <button type="submit" formmethod="post">Periksa dengan POST</button>
    <button type="reset">Atur ulang</button>
  </form>
</body>
</html>

File kedua adalah receive.php. Ini membaca string dari koleksi input untuk metode permintaan dan menolak array atau panjang yang tidak valid. Output diloloskan untuk konteks HTML-nya.

<?php
declare(strict_types=1);
header('Content-Type: text/html; charset=UTF-8');
$method = $_SERVER['REQUEST_METHOD'];
if ($method !== 'GET' && $method !== 'POST') {
    header('Allow: GET, POST');
    http_response_code(405);
    exit('Metode permintaan tidak didukung.');
}
$input = $method === 'POST' ? $_POST : $_GET;
$q = $input['q'] ?? '';
$note = $input['note'] ?? '';
if (!is_string($q) || !is_string($note) || trim($q) === '' ||
    strlen($q) > 320 || strlen($note) > 1200) {
    http_response_code(400);
    exit('Periksa string pencarian dan catatan.');
}
function h(string $text): string {
    return htmlspecialchars($text, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8');
}
?>
<!doctype html>
<html lang="id">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Hasil yang diterima</title>
</head>
<body>
  <h1>Hasil yang diterima</h1>
  <p>Metode permintaan: <?= h($method) ?></p>
  <p>Kata pencarian: <?= h($q) ?></p>
  <p>Catatan: <?= h($note) ?></p>
  <p><a href="index.html">Kembali ke formulir</a></p>
</body>
</html>

HTML maxlength dan pemeriksaan panjang server menggunakan ukuran yang berbeda. Contoh server ini membatasi byte dengan strlen; ini tidak mereproduksi kebijakan penghitungan karakter lengkap. Validasi input penting sesuai dengan aturan aplikasi server yang sebenarnya.

Jalankan contoh dan bandingkan GET dengan POST

Di folder yang berisi kedua file, jalankan perintah ini dan buka http://127.0.0.1:8000/index.html. Jika php tidak ditemukan, periksa jalur instalasinya dan pengaturan PATH. Server bawaan PHP untuk pengembangan lokal dan latihan, bukan untuk produksi.

php -S 127.0.0.1:8000
  1. Pengiriman dengan istilah pencarian kosong diblokir oleh validasi yang diwajibkan.
  2. Masukkan HTML sebagai istilah pencarian dan Practice sebagai catatan, lalu kirim dengan GET. Query URL berisi q dan note, dan respons menampilkan GET sebagai metodenya.
  3. Kembali ke formulir dan masukkan nilai yang sama, lalu kirim dengan POST. Nilai input tidak ditambahkan ke URL, dan respons menampilkan POST. Alat pengembang dapat menunjukkan body di panel Jaringan.
  4. Kirim <b>Practice</b> sebagai catatan. Respons menampilkan tag sebagai teks, bukan huruf tebal. Setelah selesai, hentikan server dengan Ctrl+C di terminal.

Periksa metode pengiriman, keamanan, dan kegagalan umum

Konten POST tetap terlihat di alat pengembang dan ke server; HTTPS diperlukan untuk melindungi data saat dikirim. Permintaan GET mungkin tetap muncul di alamat, riwayat, atau log, jadi jangan meletakkan nilai sensitif seperti kata sandi di dalamnya. Pemeriksaan HTML required dan maxlength membantu pengguna tetapi tidak menggantikan validasi server.

Formulir unggah file umumnya membutuhkan method="post" dan enctype="multipart/form-data". Encoding default adalah application/x-www-form-urlencoded. Penanganan file yang sesungguhnya juga membutuhkan pemeriksaan ukuran, tipe, dan lokasi penyimpanan, di luar latihan input string ini.

Untuk respons 404, periksa jalur aksi relatif dan nama file. Untuk nilai yang hilang, periksa nama dan apakah server membaca koleksi untuk metode permintaan yang benar. Tetapkan type="button" secara eksplisit untuk tombol aksi biasa agar menghindari pengiriman yang tidak sengaja. Reset mengembalikan default asli daripada selalu membuat bidang kosong. Konsultasikan referensi formulir MDN dan tutorial formulir PHP .