Tutorial PHP #14: Validasi Input Form di PHP
1. Kenapa Validasi Input Penting?
Jangan pernah percaya data dari user! Validasi input memiliki dua tujuan utama:
- Menjaga kualitas data - pastikan format dan isi data sesuai kebutuhan
- Keamanan aplikasi - mencegah serangan seperti XSS, SQL Injection, dsb
2. Validasi Dasar
<?php
$errors = [];
$nama = "";
$email = "";
if ($_SERVER["REQUEST_METHOD"] === "POST") {
// Cek apakah field kosong
if (empty($_POST["nama"])) {
$errors["nama"] = "Nama wajib diisi";
} else {
$nama = $_POST["nama"];
}
if (empty($_POST["email"])) {
$errors["email"] = "Email wajib diisi";
} else {
$email = $_POST["email"];
}
// Jika tidak ada error, proses data
if (empty($errors)) {
echo "Data valid! Nama: $nama, Email: $email";
}
}
?>
3. Sanitasi Input
Sanitasi membersihkan input dari karakter berbahaya sebelum disimpan atau ditampilkan.
<?php
$input = "<script>alert('XSS Attack')</script>";
// htmlspecialchars: ubah karakter HTML jadi entitas - cegah XSS
$aman = htmlspecialchars($input, ENT_QUOTES, "UTF-8");
echo $aman; // Output: <script>alert('XSS')</script>
// strip_tags: hapus semua tag HTML
$bersih = strip_tags($input);
echo $bersih; // Output: alert(XSS Attack)
// trim: hapus spasi di awal dan akhir
$nama = trim(" Ariq ");
echo $nama; // Output: Ariq
?>
4. Validasi dengan filter_var()
PHP punya fungsi built-in filter_var() yang sangat berguna untuk validasi dan sanitasi:
<?php
// Validasi email
$email = "ariq@email.com";
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
echo "Email tidak valid";
} else {
echo "Email valid";
}
// Validasi URL
$url = "https://ariq.dev";
if (!filter_var($url, FILTER_VALIDATE_URL)) {
echo "URL tidak valid";
}
// Validasi angka
$umur = "25";
if (!filter_var($umur, FILTER_VALIDATE_INT)) {
echo "Bukan angka bulat";
}
// Validasi rentang angka
if (!filter_var($umur, FILTER_VALIDATE_INT, ["options" => ["min_range" => 1, "max_range" => 120]])) {
echo "Umur tidak valid";
}
// Sanitasi email
$emailKotor = " ariq @email.com ";
$emailBersih = filter_var($emailKotor, FILTER_SANITIZE_EMAIL);
echo $emailBersih; // Output: ariq@email.com
?>
5. Validasi Panjang String
<?php
$password = $_POST["password"] ?? "";
if (strlen($password) < 8) {
echo "Password minimal 8 karakter";
}
if (strlen($password) > 50) {
echo "Password maksimal 50 karakter";
}
$username = trim($_POST["username"] ?? "");
if (!preg_match("/^[a-zA-Z0-9_]+$/", $username)) {
echo "Username hanya boleh huruf, angka, dan underscore";
}
?>
6. Contoh Form Validasi Lengkap
<?php
$errors = [];
$sukses = false;
if ($_SERVER["REQUEST_METHOD"] === "POST") {
$nama = trim(htmlspecialchars($_POST["nama"] ?? ""));
$email = trim($_POST["email"] ?? "");
$umur = trim($_POST["umur"] ?? "");
if (empty($nama)) $errors["nama"] = "Nama wajib diisi";
if (empty($email)) $errors["email"] = "Email wajib diisi";
elseif (!filter_var($email, FILTER_VALIDATE_EMAIL)) $errors["email"] = "Format email tidak valid";
if (empty($umur)) $errors["umur"] = "Umur wajib diisi";
elseif (!is_numeric($umur) || $umur < 1 || $umur > 120) $errors["umur"] = "Umur tidak valid";
if (empty($errors)) $sukses = true;
}
?>
7. Ringkasan
- Selalu validasi data dari user - jangan pernah percaya langsung
htmlspecialchars()untuk mencegah XSSfilter_var()untuk validasi email, URL, dan angka- Kumpulkan semua error ke dalam array sebelum memproses data
Tutorial berikutnya membahas include, require, include_once, require_once.
.jpg)
