Validasi Form Dasar
Pastikan data masuk akal: wajib isi, panjang minimal, dan pesan error yang jelas.
Kenapa Validasi Ada?
Data kotor yang lolos akan menyebar ke mana-mana: tersimpan di database, tampil di halaman, dikirim ke email. Membersihkannya belakangan 10x lebih mahal daripada menolaknya di pintu. Validasi adalah penjaga pintu: memeriksa setiap input memenuhi aturan sebelum diproses lebih jauh.
Bedakan dua istilah: validasi = "apakah data ini memenuhi syarat?" (ditolak kalau tidak), sanitasi = "bersihkan data agar aman dipakai" (diubah, bukan ditolak). Keduanya dipakai bersamaan.
<?php
// Contoh 1: validasi pola umum dengan fungsi bawaan
$email = trim($_POST["email"] ?? "");
$umur = $_POST["umur"] ?? "";
$web = trim($_POST["web"] ?? "");
$errors = [];
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$errors[] = "Format email tidak valid.";
}
if (!filter_var($umur, FILTER_VALIDATE_INT, ["options" => ["min_range" => 1, "max_range" => 120]])) {
$errors[] = "Umur harus angka 1-120.";
}
if ($web !== "" && !filter_var($web, FILTER_VALIDATE_URL)) {
$errors[] = "URL website tidak valid.";
}filter_var() adalah pisau serbaguna validasi PHP: email, URL, integer dengan rentang, IP address, semua tersedia sebagai konstanta FILTER_VALIDATE_*. Jauh lebih andal daripada regex buatan sendiri untuk kasus umum.
<?php
// Contoh 2: kumpulkan SEMUA error, jangan berhenti di pertama
// (UX: user perbaiki sekaligus, bukan satu per satu)
$errors = [];
if (strlen($nama) < 3) $errors["nama"] = "Nama minimal 3 karakter.";
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) $errors["email"] = "Email tidak valid.";
if (strlen($pass) < 8) $errors["pass"] = "Password minimal 8 karakter.";
if ($errors === []) {
// semua lolos, proses
} else {
// tampilkan tiap error di dekat field-nya
foreach ($errors as $field => $msg) {
echo "<p>$field: " . htmlspecialchars($msg) . "</p>";
}
}Kunci $errors berupa nama field ($errors["email"]) memudahkan menampilkan pesan tepat di bawah input yang salah, pola standar form profesional.
Jebakan yang Sering Terjadi
Validasi setelah data dipakai. Urutan yang benar: ambil input -> validasi -> baru pakai (simpan/tampilkan). Kode yang menyimpan dulu baru memvalidasi sudah terlanjur mengotori database.
empty() untuk angka 0. empty("0") dan empty(0) menghasilkan true! Kalau field boleh bernilai 0 (misalnya jumlah anak), empty() akan menolaknya. Untuk cek "sudah diisi?", pakai perbandingan eksplisit: $umur !== "".
Pesan Error yang Membantu
Pesan validasi yang baik spesifik dan memberi tahu cara memperbaiki:
<?php
// Buruk: user bingung salahnya di mana
$errors[] = "Input tidak valid.";
// Baik: tunjuk field dan syaratnya
$errors["email"] = "Email 'sinta@' tidak valid. Contoh: [email protected].";
$errors["umur"] = "Umur harus angka 1-120.";
$errors["password"] = "Password minimal 8 karakter, sudah ada " . strlen($pass) . ".";Tampilkan pesan tepat di bawah field yang salah (bukan daftar di atas form), dan pertahankan isi field yang sudah benar agar user tidak mengetik ulang semuanya. Detail kecil ini membedakan form amatir dan profesional.
Catatan teknis: Fungsi
filter_input(INPUT_POST, "email", FILTER_VALIDATE_EMAIL)menggabungkan ambil + validasi dalam satu panggilan dan mengembalikanfalse/nullkalau gagal. Lebih ringkas daripada$_POST+filter_varterpisah.
Tantangan
Form pendaftaran valid
Buat form: nama (wajib, min 3), email (wajib, mengandung @), umur (angka 5-100). Kumpulkan error ke array, tampilkan di dekat field, isi ulang nilai lama. Jika lolos, tampilkan "Pendaftaran berhasil".