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
$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:
<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.