Validasi Form

Presentasi Validasi Form PHP

Pertemuan 10

Mengapa Validasi Form Penting?

🛡️ Keamanan

Mencegah serangan berbahaya seperti:

  • SQL Injection - Serangan database
  • XSS (Cross-Site Scripting) - Serangan client-side
  • Data Manipulation - Perubahan data tidak sah

📊 Integritas Data

Memastikan data yang masuk sesuai format:

  • Format email yang valid
  • Nomor telepon sesuai pola
  • Data required terisi lengkap
  • Tipe data sesuai ekspektasi

💡 Tips Keamanan

Selalu validasi data di server-side meskipun sudah divalidasi di client-side. Validasi client-side bisa di-bypass!

Validasi Sederhana (Required Fields)

Validasi dasar untuk memastikan field wajib tidak kosong menggunakan fungsi empty() dan isset().

// Contoh validasi field required
if (empty($_POST['nama'])) {
    $errors[] = "Nama harus diisi!";
}

// Atau menggunakan isset()
if (!isset($_POST['nama']) || trim($_POST['nama']) === '') {
    $errors[] = "Nama harus diisi!";
}

Contoh Implementasi

Filter Input dengan filter_var()

Fungsi built-in PHP untuk memvalidasi dan membersihkan data input.

Validasi Email

$email = $_POST['email'];
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
    $errors['email'] = "Format email tidak valid!";
}

Sanitasi Data

// Sanitasi string (gunakan FILTER_SANITIZE_FULL_SPECIAL_CHARS untuk PHP 8.1+)
$nama = filter_var($_POST['nama'], FILTER_SANITIZE_FULL_SPECIAL_CHARS);

// Sanitasi email
$email = filter_var($_POST['email'], FILTER_SANITIZE_EMAIL);

// Sanitasi URL
$website = filter_var($_POST['website'], FILTER_SANITIZE_URL);

// Validasi integer
$umur = filter_var($_POST['umur'], FILTER_VALIDATE_INT);

Filter Constants yang Umum

Filter Kegunaan
FILTER_VALIDATE_EMAIL Validasi format email
FILTER_VALIDATE_URL Validasi format URL
FILTER_VALIDATE_IP Validasi format IP address
FILTER_SANITIZE_FULL_SPECIAL_CHARS Membersihkan string dari tag HTML
FILTER_SANITIZE_EMAIL Membersihkan email dari karakter tidak valid

Demo: Validasi Email

Menampilkan Pesan Error

Teknik untuk menangani dan menampilkan pesan error dengan rapi.

Flow Validasi

  1. Cek apakah form disubmit
  2. Validasi setiap field
  3. Simpan error dalam array
  4. Jika ada error, tampilkan pesan
  5. Jika tidak ada error, proses data
// Inisialisasi array error
$errors = [];

// Cek jika form disubmit
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    // Validasi nama
    if (empty($_POST['nama'])) {
        $errors['nama'] = "Nama harus diisi";
    }

    // Validasi email
    if (empty($_POST['email'])) {
        $errors['email'] = "Email harus diisi";
    } elseif (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
        $errors['email'] = "Format email tidak valid";
    }

    // Jika tidak ada error, proses data
    if (empty($errors)) {
        // Proses data sukses
        echo "<div class='success'>Data berhasil disimpan!</div>";
    }
}

Contoh Tampilan Error

Format email tidak valid. Pastikan email mengandung '@' dan domain yang valid.

Contoh Lengkap Validasi Form

Implementasi lengkap validasi form dengan PHP.

Form Login dengan Validasi Real-time

<?php
$errors = [];
$email = $password = '';

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    // Validasi email
    if (empty($_POST['email'])) {
        $errors['email'] = "Email harus diisi";
    } else {
        $email = filter_var($_POST['email'], FILTER_SANITIZE_EMAIL);
        if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
            $errors['email'] = "Format email tidak valid";
        }
    }

    // Validasi password
    if (empty($_POST['password'])) {
        $errors['password'] = "Password harus diisi";
    } else {
        $password = $_POST['password'];
        if (strlen($password) < 6) {
            $errors['password'] = "Password minimal 6 karakter";
        }
    }

    // Jika tidak ada error
    if (empty($errors)) {
        // Proses login
        echo "Login berhasil!";
    }
}
?>

Download Materi

Silakan download file materi berikut untuk praktik lebih lanjut:

File login.php

File PHP lengkap dengan validasi form login.

File register.php

File PHP dengan validasi form pendaftaran lengkap.

File validasi-fungsi.php

Kumpulan fungsi validasi yang bisa digunakan kembali.

Tugas Kelompok: Form Validation Challenge

Setiap tim terdiri dari 3 orang dengan peran berbeda yang harus berkolaborasi membuat sistem validasi form yang aman dan user-friendly.

Tim harus dengan golongan yang berbeda tiap orangnya

Struktur Tim & Peran

ROLE 1: UX VALIDATION DESIGNER (Desainer Validasi UX)
Tugas:
  • Mendesain tampilan pesan error yang user-friendly
  • Implementasi validasi real-time
  • Memastikan pengalaman pengguna tetap baik meski ada error
  • Contoh: "Format email tidak valid" dengan icon dan penjelasan
ROLE 2: FRONTEND DEVELOPER (Developer Tampilan)
Tugas:
  • Implementasi HTML, CSS, JavaScript validasi
  • Membuat form yang responsive dan accessible
  • Validasi client-side dengan JavaScript
  • Integrasi dengan backend
ROLE 3: BACKEND DEVELOPER (Developer Penrosesan)
Tugas:
  • Implementasi validasi server-side dengan PHP
  • \
  • Sanitasi data dengan filter_var()

Requirements Tugas

Buat form pendaftaran dengan validasi untuk:

  • Nama (required, min 2 karakter)
  • Email (required, format email valid)
  • Password (required, min 6 karakter, konfirmasi password)
  • Tanggal Lahir (required, format valid, usia minimal 17 tahun)
  • Nomor Telepon (required, format Indonesia)

Contoh Error Message: "Format email tidak valid"

Cara Pengumpulan Tugas

Instruksi Pengumpulan

a) Dikumpulkan di S-Learn

b) Hanya ketua Tim upload dengan memasukkan anggota kelompok

c) Yang di upload link drive dari zip folder berisi:

  • File PHP dengan validasi lengkap
  • File HTML form (jika terpisah)
  • Dokumentasi singkat cara kerja validasi
  • Screenshot hasil testing (termasuk error message)

Tugas sudah tersedia di S-Learn. Silakan login dan kerjakan sesuai instruksi.