validasi input form pasien | java php laravel linux mysql sql bootstrap html css query java php laravel linux mysql sql bootstrap html css query: validasi input form pasien

Saturday, October 10, 2026

validasi input form pasien

Seri Pemrograman Web D4 MIK • Artikel 7 dari 16
🩺🛡️

Jangan Asal Isi! Validasi Input Form Data Pasien

Wajib isi, format NIK, tanggal lahir, dan pesan error yang manusiawi, dipraktikkan langkah demi langkah di XAMPP dan Sublime Text.

#ValidasiInputPHP#FormDataPasien#FormatNIK#PesanError#PemrogramanWeb
⏱️
±12 menit
Estimasi baca
🎯
Menengah
Level
📅
2026
Tahun

Bayangkan kamu bertugas di loket pendaftaran puskesmas. Seorang pasien menulis NIK "12345", tahun lahir 2099, dan kolom nama dibiarkan kosong. Kalau sistemmu menerimanya dengan senang hati, rekam yang tersimpan bukan lagi data, melainkan tumpukan sampah yang kelihatan rapi. Di sinilah validasi input PHP bekerja sebagai satpam yang ramah tapi tegas: memeriksa setiap isian sebelum boleh masuk.

Artikel ini adalah bagian dari seri Pemrograman Web D4 MIK. Kamu akan mempraktikkan validasi wajib isi, format NIK 16 digit, tanggal lahir, dan pesan error yang jelas. Syaratnya cuma satu: kamu sudah bisa membuat form dan mengirim data dengan POST (Artikel 6). Yuk, bikin form pasien yang tidak gampang dibohongi!

Kenapa Validasi Input PHP Wajib di Form Data Pasien?

Data kesehatan dipakai untuk keputusan klinis, pelaporan, sampai klaim. Ada prinsip lama: garbage in, garbage out. Anggap validasi seperti petugas triase di IGD: memeriksa dulu apa yang layak masuk sebelum diproses lebih jauh.

📘 Definisi: Validasi Input
Validasi input adalah proses memeriksa apakah data yang dikirim pengguna sudah lengkap, berformat benar, dan masuk akal sebelum diproses atau disimpan ke database.
Data masuk → trim() → cek aturan → valid ? simpan : tampilkan pesan error

Validasi bisa dilakukan di dua tempat. Perbedaannya penting, jadi simak tabel ini:

AspekSisi klien (HTML5)Sisi server (PHP)
Dijalankan diBrowser penggunaServer Apache + PHP
Contohrequired, maxlength, type="date"trim(), ctype_digit(), DateTime
Umpan balikInstan, tanpa reloadSetelah tombol submit ditekan
Bisa dilewati?Bisa, lewat DevTools atau curlTidak, kodenya ada di server
PeranKenyamanan penggunaBenteng utama data
⚡ Insight Penting: Validasi browser itu kenyamanan, bukan keamanan
OWASP Input Validation Cheat Sheet menegaskan bahwa validasi sisi klien mudah dilewati, sehingga validasi di sisi server tetap wajib. Atribut required membantu pengguna jujur; PHP yang menghentikan yang iseng.
  🧑 Pengguna ──► 📝 Form HTML ──► ⚙️ Server PHP ──► ❓ Valid?
                                                  │
                          ┌───────────────────────┴───────────────────┐
                          ▼ Ya                                        ▼ Tidak
                  ✅ Siap disimpan                    ❌ Pesan error + isian dikembalikan

Persiapan Lab: Siapkan Folder Kerja

1
Nyalakan Apache
Buka XAMPP Control Panel, klik Start pada Apache sampai hijau. MySQL belum dibutuhkan, baru dipakai di Artikel 8.
2
Buat folder proyek
Buka C:\xampp\htdocs, lalu buat folder baru bernama validasi-pasien.
3
Buka di Sublime Text
Pilih File → Open Folder… dan arahkan ke folder tadi.
4
Buat file PHP
Buat file baru, simpan dengan Ctrl+S sebagai validasi-pasien.php. Di Windows, cek jangan sampai namanya jadi validasi-pasien.php.txt.
⚠️ Perhatian: Pakai data fiktif!
NIK dan nama di artikel ini hanyalah contoh karangan. Jangan mengetik data pasien sungguhan ke file latihan: data kesehatan adalah data pribadi yang sensitif, dan komputer lab dipakai bergantian.

Praktik 1: Validasi Input PHP untuk Wajib Isi dan Pesan Error

Aturan paling dasar adalah wajib isi, ibarat tanda bintang merah di formulir kertas: kolom bertanda bintang tidak boleh kosong. Di PHP, kita mengumpulkan semua pesan kesalahan dalam satu array bernama $errors, bukan berhenti di error pertama. Jadi pasien tahu semua yang perlu diperbaiki sekaligus, bukan dimarahi satu per satu seperti revisi skripsi.

1
Salin kode di bawah
Tempel ke validasi-pasien.php di Sublime Text. Perhatikan komentar penanda // === ATURAN ... ===; kita akan mengubahnya di praktik berikutnya.
2
Simpan dan buka di browser
Akses http://localhost/validasi-pasien/validasi-pasien.php.
3
Uji dengan form kosong
Klik Simpan Data tanpa mengisi apa pun.
4
Uji dengan data lengkap
Isi nama "Budi Santoso", NIK 3578014505990001, tanggal lahir 1999-05-05, poli "Poli Umum", lalu simpan.
📄 validasi-pasien.php
<?php
date_default_timezone_set("Asia/Jakarta");

$daftar_poli = ["Poli Umum", "Poli Gigi", "Poli Anak", "Poli KIA"];
$errors = [];
$nama = $nik = $tgl_lahir = $poli = "";
$sukses = false;

if ($_SERVER["REQUEST_METHOD"] === "POST") {
    $nama      = trim($_POST["nama"] ?? "");
    $nik       = trim($_POST["nik"] ?? "");
    $tgl_lahir = trim($_POST["tgl_lahir"] ?? "");
    $poli      = trim($_POST["poli"] ?? "");

    // === ATURAN NAMA ===
    if ($nama === "") {
        $errors["nama"] = "Nama lengkap pasien wajib diisi.";
    }

    // === ATURAN NIK ===
    if ($nik === "") {
        $errors["nik"] = "NIK wajib diisi.";
    }

    // === ATURAN TANGGAL LAHIR ===
    if ($tgl_lahir === "") {
        $errors["tgl_lahir"] = "Tanggal lahir wajib diisi.";
    }

    // === ATURAN POLI ===
    if ($poli === "") {
        $errors["poli"] = "Poli tujuan wajib dipilih.";
    } elseif (!in_array($poli, $daftar_poli, true)) {
        $errors["poli"] = "Poli yang dipilih tidak dikenal.";
    }

    $sukses = empty($errors);
}
?>
<!DOCTYPE html>
<html lang="id">
<head>
    <meta charset="UTF-8">
    <title>Pendaftaran Pasien</title>
</head>
<body>
    <h2>Pendaftaran Pasien Baru</h2>

    <?php if ($sukses): ?>
        <p style="color:green;">Data atas nama <b><?= htmlspecialchars($nama) ?></b> valid.</p>
    <?php endif; ?>

    <form method="post" novalidate>
        <p>Nama Lengkap:<br>
            <input type="text" name="nama" value="<?= htmlspecialchars($nama) ?>">
            <small style="color:red;"><?= $errors["nama"] ?? "" ?></small></p>

        <p>NIK:<br>
            <input type="text" name="nik" value="<?= htmlspecialchars($nik) ?>">
            <small style="color:red;"><?= $errors["nik"] ?? "" ?></small></p>

        <p>Tanggal Lahir:<br>
            <input type="date" name="tgl_lahir" value="<?= htmlspecialchars($tgl_lahir) ?>">
            <small style="color:red;"><?= $errors["tgl_lahir"] ?? "" ?></small></p>

        <p>Poli Tujuan:<br>
            <select name="poli">
                <option value="">-- Pilih Poli --</option>
                <?php foreach ($daftar_poli as $p): ?>
                    <option value="<?= $p ?>" <?= $poli === $p ? "selected" : "" ?>><?= $p ?></option>
                <?php endforeach; ?>
            </select>
            <small style="color:red;"><?= $errors["poli"] ?? "" ?></small></p>

        <button type="submit">Simpan Data</button>
    </form>
</body>
</html>

Hasil yang diharapkan: saat form kosong dikirim, muncul empat pesan merah di samping tiap kolom. Saat data lengkap dikirim, muncul tulisan hijau "Data atas nama Budi Santoso valid." Tiga hal kecil yang berperan besar: ?? "" mencegah error undefined array key saat halaman pertama dibuka, htmlspecialchars() mencegah isian berisi tag HTML ikut dieksekusi, dan novalidate mematikan validasi bawaan browser agar kamu bisa melihat validasi PHP bekerja.

💡 Tips: Biasakan trim() sebagai refleks pertama
Pengguna sering menekan spasi tanpa sadar. Tanpa trim(), isian "   " dianggap terisi dan lolos validasi wajib isi. Jadikan trim() langkah pertama setiap kali menerima data dari $_POST.

Validasi Input PHP untuk Format NIK 16 Digit

Sekarang kolom NIK tidak cukup hanya terisi, isinya harus 16 digit angka. Seperti mesin ATM yang menolak PIN berisi huruf, tapi pesan penolakannya kita buat spesifik.

🔥 Fakta Menarik: NIK ternyata bisa "dibaca"
Secara umum, 6 digit pertama NIK adalah kode wilayah (provinsi, kabupaten/kota, kecamatan), 6 digit berikutnya tanggal lahir berformat DDMMYY (untuk perempuan tanggalnya ditambah 40), dan 4 digit terakhir nomor urut. Ingat, validasi kita hanya memeriksa format, bukan keaslian NIK.
1
Cari blok NIK
Di Sublime Text, temukan blok di bawah penanda // === ATURAN NIK ===.
2
Ganti dengan aturan baru
Hapus blok lama, lalu tempel kode di bawah.
3
Tambahkan atribut bantu
Pada <input name="nik"> tambahkan maxlength="16" dan inputmode="numeric" agar HP menampilkan keypad angka. Ini hanya kenyamanan, PHP tetap penjaganya.
4
Uji semua skenario
Coba lima input pada tabel hasil di bawah, lalu bandingkan pesan yang muncul.
📄 Blok pengganti: aturan NIK
    // === ATURAN NIK ===
    if ($nik === "") {
        $errors["nik"] = "NIK wajib diisi.";
    } elseif (!ctype_digit($nik)) {
        $errors["nik"] = "NIK hanya boleh berisi angka, tanpa spasi atau tanda baca.";
    } elseif (strlen($nik) !== 16) {
        $errors["nik"] = "NIK harus tepat 16 digit (sekarang " . strlen($nik) . " digit).";
    }
Input NIK (fiktif)HasilPesan yang muncul
(kosong)❌ DitolakNIK wajib diisi.
12345❌ DitolakNIK harus tepat 16 digit (sekarang 5 digit).
35780145059900AB❌ DitolakNIK hanya boleh berisi angka, tanpa spasi atau tanda baca.
3578 0145 0599 0001❌ DitolakNIK hanya boleh berisi angka, tanpa spasi atau tanda baca.
3578014505990001✅ Lolos(tidak ada pesan)

Kenapa bukan is_numeric()? Fungsi itu meloloskan "1e15" dan "+123". Kenapa bukan integer? NIK adalah identitas, bukan bilangan untuk dihitung, dan angka 0 di depan akan hilang. Simpan NIK selalu sebagai string; di Artikel 8 kolomnya akan kita buat bertipe VARCHAR(16).

🔍 Analysis Box: Pesan Error Buruk vs Baik
❌ Buruk
"Error!", "Input salah", "Data tidak valid".
Pengguna bingung: kolom mana, salahnya apa, harus bagaimana?
✅ Baik
"NIK harus tepat 16 digit (sekarang 5 digit)."
Menyebut kolomnya, aturannya, dan kondisi saat ini.

Validasi Input PHP untuk Tanggal Lahir Pasien

Tanggal lahir tampak sepele, tapi banyak data kacau lahir di sini: 31 Februari, tahun 2099, atau format acak. Kita periksa tiga hal: tidak kosong, format benar, dan bukan masa depan. Triknya, DateTime::createFromFormat() itu toleran: "2026-02-31" diam-diam diubah jadi 3 Maret. Karena itu hasilnya kita format ulang, lalu dibandingkan dengan teks aslinya.

1
Cari blok tanggal lahir
Temukan blok di bawah // === ATURAN TANGGAL LAHIR ===.
2
Ganti dengan kode baru
Tanda ! pada format !Y-m-d mengatur jam ke 00:00, supaya bayi yang lahir hari ini tidak ditolak sebagai "masa depan".
3
Uji lima skenario
Gunakan tabel hasil di bawah. Untuk meniru input ngawur, hapus sementara atribut tipe date di HTML dan ganti dengan text.
📄 Blok pengganti: aturan tanggal lahir
    // === ATURAN TANGGAL LAHIR ===
    if ($tgl_lahir === "") {
        $errors["tgl_lahir"] = "Tanggal lahir wajib diisi.";
    } else {
        $tgl = DateTime::createFromFormat("!Y-m-d", $tgl_lahir);
        $format_ok = $tgl && $tgl->format("Y-m-d") === $tgl_lahir;

        if (!$format_ok) {
            $errors["tgl_lahir"] = "Tanggal tidak valid. Gunakan format tahun-bulan-tanggal.";
        } elseif ($tgl > new DateTime("today")) {
            $errors["tgl_lahir"] = "Tanggal lahir tidak boleh di masa depan.";
        }
    }
Input tanggal lahirHasilAlasan
(kosong)❌ DitolakWajib diisi
abc❌ DitolakBukan format tahun-bulan-tanggal
2026-02-31❌ DitolakTanggal tidak ada di kalender
2099-01-01❌ DitolakMasa depan
1999-05-05✅ LolosFormat benar dan masuk akal

Error yang Sering Muncul & Cara Mengatasinya

Gejala / pesan errorPenyebabCara mengatasi
Warning: Undefined array key$_POST dibaca sebelum form dikirimBungkus dengan cek REQUEST_METHOD === "POST" dan pakai operator ??
Kode PHP tampil mentah / file terunduhFile dibuka lewat file:/// atau Apache belum jalanAkses lewat http://localhost/..., pastikan Apache hijau di XAMPP
File jadi nama.php.txtWindows menyembunyikan ekstensi, atau Save as type TextAktifkan "File name extensions" di Explorer, pilih All Files saat menyimpan
Isian hilang setelah submitAtribut value tidak diisi ulangTambahkan value="<?= htmlspecialchars($nama) ?>"
Tanggal hari ini ditolak sebagai masa depanLupa tanda ! pada format atau zona waktu belum diaturPakai !Y-m-d dan date_default_timezone_set("Asia/Jakarta")
Parse error: syntax errorTitik koma, kurung kurawal, atau tanda kutip kurangPeriksa baris yang disebut dan satu baris sebelumnya

Latihan Mandiri: Asah Validasi Input PHP Kamu

Kerjakan di folder yang sama, dan untuk setiap tugas buat tabel uji kecil (minimal 3 input).

1
Tugas Validasi nama pasien
Nama minimal 3 karakter dan hanya boleh berisi huruf, spasi, titik, apostrof, atau tanda hubung. Petunjuk: mb_strlen() dan preg_match().
2
Tugas Cocokkan NIK dengan tanggal lahir
Ambil digit ke-7 sampai ke-12 NIK dan bandingkan dengan tanggal lahir. Petunjuk: substr($nik, 6, 2) untuk tanggal; jika lebih dari 40, kurangi 40 (pasien perempuan).
3
Tugas Percantik pesan error
Beri border merah pada kolom yang bermasalah dan tampilkan ringkasan di atas form, misalnya "Ada 3 isian yang perlu diperbaiki".
🏁

Kesimpulan

Form pasienmu kini tidak pasrah menerima data apa adanya. Lewat validasi input PHP, setiap isian diperiksa sebelum masuk sistem:

  • Validasi sisi klien itu kenyamanan; validasi input PHP di server adalah benteng yang wajib ada.
  • Mulai dengan trim(), kumpulkan semua error di array $errors, dan tampilkan bersamaan.
  • NIK = string 16 digit (ctype_digit + strlen); tanggal lahir = createFromFormat + cek balik + cek masa depan.
  • Pesan error yang baik menyebut kolom, aturan, dan kondisi saat ini.

Data yang sudah valid ini siap kita simpan ke MySQL di artikel berikutnya. Menurutmu, aturan validasi apa lagi yang wajib ada di form pasien? Tulis di komentar, dan bagikan artikel ini ke teman sekelasmu!

💬 Tulis Komentar📤 Bagikan via WhatsApp
TAG
#PemrogramanWeb#D4MIK#ValidasiInput#ValidasiNIK#PesanError
LABEL
Validasi Input PHPForm Data PasienFormat NIKTanggal LahirPesan Error
Artikel Utama
📚 Pemrograman Web D4 MIK

Lihat seluruh 16 artikel dalam seri ini, dari dasar PHP sampai aplikasi data pasien.

Buka Daftar Isi Artikel →

No comments:

Post a Comment

saifiahmada.com adalah blog belajar programming Indonesia, membahas lengkap materi bahasa pemrograman: code HTML, CSS, Bootstrap, Desain, PHP, MySQL, coding Java, Query, SQL, dan dunia linux