formvalidasikeamananMenengah3 mnt baca

Validasi Formulir

Memastikan data form benar sebelum diproses: validasi email, pesan error, dan sticky form.

Kenapa validasi itu wajib

Atribut HTML seperti required atau validasi JavaScript mudah dilewati (cukup matikan JS atau kirim request manual). Validasi server-side di PHP adalah pertahanan terakhir yang tidak bisa dibypass.

Pola validasi lengkap

php
<?php
$errors = [];
$nama = trim($_POST["nama"] ?? "");
$email = trim($_POST["email"] ?? "");

if ($nama === "") {
    $errors["nama"] = "Nama wajib diisi.";
} elseif (strlen($nama) < 3) {
    $errors["nama"] = "Nama minimal 3 karakter.";
}

if ($email === "") {
    $errors["email"] = "Email wajib diisi.";
} elseif (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
    $errors["email"] = "Format email tidak valid.";
}

if (empty($errors)) {
    echo "Data valid! Diproses...";
} else {
    foreach ($errors as $field => $pesan) {
        echo htmlspecialchars($pesan) . "<br>";
    }
}

Fungsi filter_var() dengan FILTER_VALIDATE_EMAIL adalah cara bawaan PHP mengecek format email tanpa regex rumit.

Sticky form: jangan suruh user mengetik ulang

Form yang baik mempertahankan isian saat ada error:

php
<input type="text" name="nama" value="<?= htmlspecialchars($nama) ?>">
<?php if (isset($errors["nama"])): ?>
  <small style="color:red"><?= htmlspecialchars($errors["nama"]) ?></small>
<?php endif; ?>

Perhatikan htmlspecialchars() pada value: tanpa itu, user bisa memasukkan "><script>... yang merusak form (XSS).

Catatan teknis: Validasi ada dua lapis dengan tujuan beda: validasi format (apakah email valid?) dan sanitasi output (amankan saat ditampilkan). Jangan mencampuradukkan: simpan data apa adanya di database (pakai prepared statement), tapi selalu htmlspecialchars() saat menampilkannya ke HTML. Data yang "dibersihkan" terlalu dini bisa merusak data asli.