Form Handling — PHP

PHP bisa memproses data dari form HTML menggunakan superglobal $_GET dan $_POST. Form HTML → PHP: Kirim Memproses di PHP: if ($_SERVER["REQUEST_METHOD"] === "PO

PHP bisa memproses data dari form HTML menggunakan superglobal $_GET dan $_POST.

Form HTML → PHP:

<form method="POST" action="proses.php">
  <input name="nama" type="text">
  <input name="email" type="email">
  <button type="submit">Kirim</button>
</form>

Memproses di PHP:

if ($_SERVER["REQUEST_METHOD"] === "POST") {
    $nama = $_POST["nama"] ?? "";
    $email = $_POST["email"] ?? "";

    // Validasi
    if (empty($nama)) {
        echo "Nama wajib diisi!";
    }

    // Sanitize
    $nama = htmlspecialchars(trim($nama));
    $email = filter_var($email, FILTER_SANITIZE_EMAIL);
}

$_GET vs $_POST:

Tips keamanan:

CSRF Protection (Cross-Site Request Forgery):

Serangan CSRF terjadi ketika pengguna yang sudah login "ditipu" mengirim request ke aplikasimu dari situs lain. Lindungi form POST dengan token CSRF.

session_start();

// 1. Generate token sekali saat form dirender
if (empty($_SESSION["csrf_token"])) {
    $_SESSION["csrf_token"] = bin2hex(random_bytes(32));
}
$token = $_SESSION["csrf_token"];
<form method="POST" action="proses.php">
  <input type="hidden" name="csrf_token" value="<?= htmlspecialchars($token) ?>">
  <!-- field lain -->
</form>
// 2. Verifikasi saat POST diterima
if ($_SERVER["REQUEST_METHOD"] === "POST") {
    $kirim = $_POST["csrf_token"] ?? "";
    $simpan = $_SESSION["csrf_token"] ?? "";

    if (! hash_equals($simpan, $kirim)) {
        http_response_code(419);
        exit("CSRF token invalid");
    }
    // aman — proses form
}

Penting: pakai hash_equals() (timing-safe), bukan == untuk menghindari timing attack.

Yang akan kamu pelajari