java php laravel linux mysql sql bootstrap html css query java php laravel linux mysql sql bootstrap html css query

Saturday, October 10, 2026

crud create read data pasien

๐Ÿฅ๐Ÿ“‹

Simpan dan Tampilkan: CRUD Bagian Create dan Read Data Pasien

INSERT, SELECT, dan Tampil dalam Tabel — Artikel 9 dari 16, Pemrograman Web D4 MIK

CRUD PHP MySQL INSERT SELECT Data Pasien
±10 mnt
Estimasi baca
Menengah
Level
2026
Tahun

Bayangkan kamu bertugas di pendaftaran sebuah klinik. Setiap pagi puluhan pasien datang, dan semua datanya masih ditulis tangan di buku register. Saat dokter meminta data Bu Siti, kamu harus membolak-balik puluhan halaman. Capek, kan? Nah, di sinilah CRUD PHP MySQL jadi penyelamat.

Di artikel ini kamu akan membuat dua kemampuan paling dasar sebuah aplikasi data: menyimpan pasien baru (Create) dan menampilkannya dalam tabel yang rapi (Read). Semuanya dipraktikkan langsung di laboratorium dengan XAMPP, phpMyAdmin, dan Sublime Text, memakai data fiktif. Cocok untukmu yang baru belajar pemrograman web. Artikel ini adalah bagian dari seri Pemrograman Web D4 MIK (Artikel 9 dari 16).

๐ŸŽฏ Target belajarmu (CPMK 3 · Sub-CPMK 5)
Mahasiswa mampu mengimplementasikan proses Create dan Read pada aplikasi PHP-MySQL untuk pengelolaan data pasien. Di akhir artikel, kamu punya form input pasien dan halaman daftar pasien yang berjalan di http://localhost/.

Konsep CRUD PHP MySQL: Create dan Read Itu Apa Sih?

CRUD adalah singkatan dari Create, Read, Update, Delete, empat operasi dasar pada data. Di artikel ini kita fokus pada dua yang pertama. Analoginya begini: Create itu petugas pendaftaran yang mengisi buku register pasien baru, sedangkan Read itu perawat yang membuka daftar pasien hari ini. Bedanya, buku register kita sekarang berupa tabel pasien di MySQL.

๐Ÿงช Rumus Inti Create & Read
CREATE → INSERT INTO tabel (kolom...) VALUES (nilai...)
READ   → SELECT kolom FROM tabel ORDER BY kolom
Formulir di browser → PHP → MySQL → kembali ke browser sebagai tabel.
Aspek Create (INSERT) Read (SELECT)
TugasMenambah baris data baruMengambil dan menampilkan data
Mengubah isi tabel?YaTidak, hanya membaca
Fungsi PHP (mysqli)mysqli_prepare(), mysqli_stmt_execute()mysqli_query(), mysqli_fetch_assoc()
AnalogiMengisi buku registerMembuka daftar pasien
⚡ Insight Penting
Aplikasi PHP tidak pernah “menyimpan” data sendiri. PHP hanya perantara yang mengirim perintah SQL ke MySQL. Jadi kalau data tidak muncul, tanyakan dua hal: perintah SQL-nya benar tidak, dan koneksinya nyambung tidak?

Praktik Create: Form dan INSERT Data Pasien di CRUD PHP MySQL

Saatnya praktik. Pastikan Apache dan MySQL di XAMPP Control Panel sudah Start (berwarna hijau). Kita pakai tabel pasien dari Artikel 8. Kalau namamu berbeda, sesuaikan nama database dan kolom di semua kode berikut.

๐Ÿ’ก Tips
Belum punya tabelnya? Buka http://localhost/phpmyadmin, klik tab SQL, lalu jalankan kode di bawah. Perintah IF NOT EXISTS membuatnya aman dijalankan ulang.
๐Ÿ—„️ phpMyAdmin → tab SQL
CREATE DATABASE IF NOT EXISTS db_klinik_mik;
USE db_klinik_mik;

CREATE TABLE IF NOT EXISTS pasien (
  id_pasien     INT AUTO_INCREMENT PRIMARY KEY,
  no_rm         VARCHAR(10)  NOT NULL UNIQUE,
  nama_pasien   VARCHAR(100) NOT NULL,
  tanggal_lahir DATE         NOT NULL,
  jenis_kelamin ENUM('L','P') NOT NULL,
  alamat        TEXT,
  no_hp         VARCHAR(15)
);

Langkah Kerja: Membuat Form dan Proses Simpan

1
Buat folder kerja. Di C:\xampp\htdocs\, buat folder klinik_mik. Semua file di bawah disimpan di folder ini lewat Sublime Text (File → Save As, ekstensi .php).
2
Buat koneksi.php. File ini jembatan ke MySQL, dan akan kamu include di file lain.
๐Ÿ“„ klinik_mik/koneksi.php
<?php
$host = "localhost";
$user = "root";
$pass = "";            // bawaan XAMPP: kosong
$db   = "db_klinik_mik";

$koneksi = mysqli_connect($host, $user, $pass, $db);

if (!$koneksi) {
    die("Koneksi gagal: " . mysqli_connect_error());
}
mysqli_set_charset($koneksi, "utf8mb4");
?>
3
Buat form_tambah.php. Perhatikan atribut name di tiap input. Nama itulah yang nanti dibaca PHP lewat $_POST.
๐Ÿ“„ klinik_mik/form_tambah.php
<!DOCTYPE html>
<html lang="id">
<head>
  <meta charset="UTF-8">
  <title>Tambah Pasien</title>
</head>
<body>
  <h2>Form Pendaftaran Pasien Baru</h2>
  <form action="proses_simpan.php" method="POST">
    <p>No. RM<br>
       <input type="text" name="no_rm" maxlength="10" required></p>
    <p>Nama Pasien<br>
       <input type="text" name="nama_pasien" required></p>
    <p>Tanggal Lahir<br>
       <input type="date" name="tanggal_lahir" required></p>
    <p>Jenis Kelamin<br>
       <select name="jenis_kelamin" required>
         <option value="">-- Pilih --</option>
         <option value="L">Laki-laki</option>
         <option value="P">Perempuan</option>
       </select></p>
    <p>Alamat<br>
       <textarea name="alamat" rows="3" required></textarea></p>
    <p>No. HP<br>
       <input type="text" name="no_hp"></p>
    <button type="submit">Simpan Data</button>
    <a href="data_pasien.php">Lihat Data</a>
  </form>
</body>
</html>
4
Buat proses_simpan.php. Ini otak dari proses Create. Tanda tanya ? pada query adalah “lubang kosong” yang diisi nilai dari form secara aman (prepared statement).
๐Ÿ“„ klinik_mik/proses_simpan.php
<?php
include "koneksi.php";

// Hanya terima data dari form (method POST)
if ($_SERVER["REQUEST_METHOD"] !== "POST") {
    header("Location: form_tambah.php");
    exit;
}

$no_rm         = trim($_POST["no_rm"]);
$nama_pasien   = trim($_POST["nama_pasien"]);
$tanggal_lahir = $_POST["tanggal_lahir"];
$jenis_kelamin = $_POST["jenis_kelamin"];
$alamat        = trim($_POST["alamat"]);
$no_hp         = trim($_POST["no_hp"]);

$sql = "INSERT INTO pasien
        (no_rm, nama_pasien, tanggal_lahir, jenis_kelamin, alamat, no_hp)
        VALUES (?, ?, ?, ?, ?, ?)";

$stmt = mysqli_prepare($koneksi, $sql);
mysqli_stmt_bind_param($stmt, "ssssss",
    $no_rm, $nama_pasien, $tanggal_lahir, $jenis_kelamin, $alamat, $no_hp);

if (mysqli_stmt_execute($stmt)) {
    header("Location: data_pasien.php?status=sukses");
    exit;
} else {
    echo "Gagal menyimpan: " . mysqli_stmt_error($stmt);
}
mysqli_stmt_close($stmt);
?>
๐Ÿ”ฅ Fakta Menarik
Kategori Injection, termasuk SQL injection, masuk daftar OWASP Top 10 tahun 2021 (A03). Prepared statement adalah salah satu pertahanan utama yang direkomendasikan OWASP. Artikel 10 akan membedahnya lebih dalam.
⚖️ Analisis: Query Rawan vs Query Aman
❌ Rawan (jangan ditiru)
"... VALUES ('$nama', ...)"
Input pengguna menempel langsung ke SQL. Teks “nakal” bisa mengubah makna query.
✅ Aman (kita pakai)
"... VALUES (?, ?, ...)"
Struktur SQL dikirim dulu, nilai dikirim terpisah sebagai data murni, bukan perintah.
5
Uji coba. Buka http://localhost/klinik_mik/form_tambah.php, isi data fiktif (misalnya RM0001, Siti Rahmawati, 1995-04-12, P), lalu klik Simpan Data. Halaman akan berpindah ke data_pasien.php, yang kita buat sekarang.

Praktik Read: SELECT dan Tampilkan dalam Tabel pada CRUD PHP MySQL

Data sudah masuk, tapi belum kelihatan. Bagian Read bekerja dalam tiga gerakan: kirim query SELECT, ambil hasilnya baris demi baris, lalu cetak ke dalam tag <tr> HTML. Seperti perawat yang membaca daftar nama satu per satu sambil mencatatnya di papan antrean.

6
Buat data_pasien.php. Fungsi mysqli_fetch_assoc() mengambil satu baris per putaran while, dan htmlspecialchars() melindungi tampilan dari kode HTML/JavaScript tersisip.
๐Ÿ“„ klinik_mik/data_pasien.php
<?php
include "koneksi.php";

$sql = "SELECT id_pasien, no_rm, nama_pasien, tanggal_lahir,
               jenis_kelamin, alamat, no_hp
        FROM pasien
        ORDER BY id_pasien DESC";
$hasil = mysqli_query($koneksi, $sql);
?>
<!DOCTYPE html>
<html lang="id">
<head>
  <meta charset="UTF-8">
  <title>Data Pasien</title>
</head>
<body>
  <h2>Daftar Pasien</h2>

  <?php if (isset($_GET["status"]) && $_GET["status"] == "sukses") { ?>
    <p style="color:green;">Data pasien berhasil disimpan!</p>
  <?php } ?>

  <a href="form_tambah.php">+ Tambah Pasien</a>
  <table border="1" cellpadding="8" cellspacing="0">
    <tr>
      <th>No</th><th>No. RM</th><th>Nama Pasien</th>
      <th>Tgl Lahir</th><th>JK</th><th>Alamat</th><th>No. HP</th>
    </tr>
    <?php if (mysqli_num_rows($hasil) > 0) { $no = 1;
          while ($row = mysqli_fetch_assoc($hasil)) { ?>
    <tr>
      <td><?php echo $no++; ?></td>
      <td><?php echo htmlspecialchars($row["no_rm"]); ?></td>
      <td><?php echo htmlspecialchars($row["nama_pasien"]); ?></td>
      <td><?php echo $row["tanggal_lahir"]; ?></td>
      <td><?php echo $row["jenis_kelamin"]; ?></td>
      <td><?php echo htmlspecialchars($row["alamat"]); ?></td>
      <td><?php echo htmlspecialchars($row["no_hp"]); ?></td>
    </tr>
    <?php } } else { ?>
    <tr><td colspan="7">Belum ada data pasien.</td></tr>
    <?php } ?>
  </table>
</body>
</html>
7
Cek hasilnya. Buka http://localhost/klinik_mik/data_pasien.php. Tambahkan 2–3 pasien fiktif lagi lewat form, lalu perhatikan bahwa data terbaru muncul paling atas karena ORDER BY id_pasien DESC.
๐Ÿ“บ Hasil yang diharapkan (data fiktif)
+----+--------+----------------+------------+----+
| No | No. RM | Nama Pasien    | Tgl Lahir  | JK |
+----+--------+----------------+------------+----+
| 1  | RM0003 | Ayu Lestari    | 2001-11-30 | P  |
| 2  | RM0002 | Budi Santoso   | 1988-07-02 | L  |
| 3  | RM0001 | Siti Rahmawati | 1995-04-12 | P  |
+----+--------+----------------+------------+----+
๐Ÿ’ก Tips
Mau menyiapkan data uji cepat tanpa mengetik form berulang? Jalankan di tab SQL phpMyAdmin: INSERT INTO pasien (no_rm, nama_pasien, tanggal_lahir, jenis_kelamin, alamat, no_hp) VALUES ('RM0002','Budi Santoso','1988-07-02','L','Jl. Kenanga No. 8','081200000002'); Lalu cek dengan SELECT * FROM pasien;

Error yang Sering Muncul & Cara Mengatasinya

Error itu normal, bahkan programmer berpengalaman tiap hari bertemu dengannya. Baca pesannya pelan-pelan, karena hampir selalu menyebut penyebabnya.

Pesan / Gejala Penyebab Solusi
Access denied for user 'root'@'localhost'User atau password di koneksi.php salahCocokkan dengan pengaturan MySQL di lab; bawaan XAMPP: user root, password kosong
Table 'db_klinik_mik.pasien' doesn't existNama database/tabel tidak sama dengan yang di phpMyAdminCek ejaan nama di phpMyAdmin, lalu samakan di kode
Undefined array key "nama_pasien"Atribut name di form berbeda dengan kunci $_POSTSamakan huruf besar-kecil dan ejaannya di kedua file
Uncaught mysqli_sql_exception: Duplicate entry 'RM0001'No. RM sudah ada, padahal kolomnya UNIQUEGunakan nomor RM lain, atau cek dulu dengan SELECT sebelum INSERT
Kode PHP tampil mentah di browserFile dibuka dari Explorer (file:///), bukan lewat serverAkses lewat http://localhost/klinik_mik/... dan pastikan Apache aktif
⚠️ Perhatian
Jangan pernah memakai data pasien asli untuk latihan. Di dunia nyata, data kesehatan bersifat sangat rahasia. Biasakan dari sekarang memakai nama, NIK, dan nomor HP fiktif.
๐Ÿ”ฅ Fakta Menarik
Sejak PHP 8.1, mysqli melempar exception secara bawaan ketika query gagal. Itu sebabnya error “Duplicate entry” di atas tampil sebagai Fatal error, bukan lewat blok else milik kita.

Latihan Mandiri: Kuasai Create dan Read

Kerjakan di folder klinik_mik dan uji hasilnya satu per satu di browser.

Tugas 1 — Kolom baru. Tambahkan kolom golongan_darah (A, B, AB, O) lewat phpMyAdmin, masukkan ke form dan query INSERT, lalu tampilkan di tabel.

Tugas 2 — Hitung jumlah. Di atas tabel, tampilkan teks “Total pasien: N” memakai SELECT COUNT(*) AS total FROM pasien.

Tugas 3 — Cari pasien. Buat kotak pencarian nama di data_pasien.php dengan WHERE nama_pasien LIKE ? (tetap pakai prepared statement). Tampilkan pesan jika tidak ada hasil.

Kesimpulan CRUD PHP MySQL: Dua Langkah Pertama Sudah Kamu Kuasai

Hari ini kamu sudah membangun fondasi CRUD PHP MySQL. Ringkasnya:

• Create memakai INSERT, dengan data dari form dan prepared statement agar aman.

• Read memakai SELECT, dibaca dengan mysqli_fetch_assoc() dan dicetak ke tabel HTML.

• Tampilan data selalu diamankan dengan htmlspecialchars().

Sudah berhasil menampilkan pasien pertamamu? Tulis pengalamanmu di komentar, termasuk error yang bikin kamu menyerah sejenak. Kalau artikel ini membantu, bagikan ke teman sekelasmu!

๐Ÿ’ฌ Tulis Komentar ๐Ÿ“ค Bagikan via WhatsApp
๐Ÿ“š Referensi
Tag: #PemrogramanWeb #D4MIK #CRUDPHP #INSERTSELECT #DataPasien
Label: CRUD PHP MySQL Create dan Read Data Pasien Praktikum PHP MySQL
๐Ÿ“š

Pemrograman Web D4 MIK

Artikel ini bagian dari seri 16 artikel. Lihat urutan lengkap materinya di daftar isi.

Buka Daftar Isi Artikel

database mysql koneksi php

๐Ÿ—„️๐Ÿฅ
Seri Pemrograman Web D4 MIK, Artikel 8 dari 16
Rumah untuk Data Kita: Membuat Database dan Tabel Pasien di phpMyAdmin serta Koneksi PHP ke MySQL

Dari data pasien yang berserakan menjadi arsip digital yang rapi. Satu artikel, tiga hasil: database, tabel, dan koneksi yang berjalan.

#KoneksiPHPMySQL #phpMyAdmin #XAMPP #DataPasienFiktif
⏱️
±12 menit
Estimasi baca
๐ŸŽฏ
Menengah
Level
๐Ÿ“…
2026
Tahun

Bayangkan kamu bertugas di bagian pendaftaran rumah sakit. Pasien datang, namanya kamu catat di kertas, lalu kertas itu menumpuk di meja. Besok pagi pasien yang sama kembali, dan map-nya entah di mana. Inilah alasan aplikasi kesehatan butuh database.

Di artikel ini kamu akan belajar koneksi PHP MySQL dari nol: membuat database dan tabel pasien di phpMyAdmin, lalu menghubungkannya ke PHP dengan mysqli. Semua dikerjakan di XAMPP dan Sublime Text dengan data fiktif, jadi aman dipraktikkan di laboratorium komputer. Artikel ini bagian dari seri "Pemrograman Web D4 MIK" (CPMK 3, Sub-CPMK 4). Siap memberi data pasienmu rumah yang rapi?

๐ŸŽ“ Target belajarmu hari ini (Sub-CPMK 4)
Mahasiswa mampu membuat database dan tabel MySQL serta menghubungkannya dengan aplikasi PHP. Di akhir artikel, kamu punya database db_simrs_mini, tabel pasien, dan file koneksi.php yang siap dipakai di artikel berikutnya.

Memahami Koneksi PHP MySQL: Dari Rak Arsip sampai Petugas Pendaftaran

Sebelum membuka phpMyAdmin, pahami dulu peran tiap komponen. Bayangkan sebuah rumah sakit: ada gedung arsip rekam medis, ada rak-rak berlabel di dalamnya, dan ada petugas yang mengambil atau menaruh map. PHP adalah petugasnya, MySQL adalah gedung arsipnya, dan koneksi adalah kunci pintu yang dibawa si petugas.

๐Ÿ“ Rumus Koneksi PHP MySQL
koneksi = host + username + password + nama_database
Empat informasi inilah yang PHP butuhkan untuk masuk ke database. Salah satu keliru, pintu arsip tidak terbuka.
Istilah teknis Analogi di rumah sakit Di praktikum kita
DatabaseGedung arsip rekam medisdb_simrs_mini
TabelSatu lemari khusus data pasienpasien
Kolom (field)Kolom pada formulir pendaftarannama_pasien
Baris (record)Satu map milik satu pasienData "Budi Santoso"
Primary keyNomor unik pada mapid_pasien
mysqliPetugas dengan kunci pintu arsipnew mysqli(...)

Alurnya begini. Kamu membuka halaman di browser, lalu Apache meneruskan permintaan itu ke PHP. PHP membuka koneksi ke MySQL, mengambil data yang diminta, kemudian menyusunnya menjadi HTML yang kamu lihat di layar. Jadi browser tidak pernah bicara langsung dengan database. Itu sebabnya data pasien tetap aman di balik "loket" bernama PHP, dan itu pula alasan kita wajib belajar membuat koneksinya dengan benar.

๐Ÿ’ก Tips
Satu tabel sebaiknya mewakili satu hal saja. Data pasien di tabel pasien, data poli di tabel poli. Jangan dicampur dalam satu "lemari", nanti kamu sendiri yang repot mencarinya.

Praktik 1: Siapkan Database dan Tabel Pasien sebelum Koneksi PHP MySQL

Gedung arsip harus berdiri dulu sebelum petugas datang. Ikuti langkah-langkah ini di komputer laboratoriummu (Windows).

1
Nyalakan Apache dan MySQL. Buka XAMPP Control Panel, klik Start pada modul Apache dan MySQL. Tunggu sampai namanya berlatar hijau.
2
Buka phpMyAdmin. Ketik http://localhost/phpmyadmin di browser. Jika halaman terbuka, MySQL-mu sehat.
3
Buat database baru. Klik New di panel kiri. Isi nama db_simrs_mini, pilih collation utf8mb4_general_ci, lalu klik Create.
4
Buat tabel lewat tab SQL. Klik database db_simrs_mini, buka tab SQL, tempel kode di bawah, lalu klik Go.
SQL: tabel pasien
CREATE TABLE pasien (
  id_pasien     INT(11)      NOT NULL AUTO_INCREMENT,
  no_rm         VARCHAR(10)  NOT NULL,
  nik           CHAR(16)     NOT NULL,
  nama_pasien   VARCHAR(100) NOT NULL,
  tanggal_lahir DATE         NOT NULL,
  jenis_kelamin ENUM('L','P') NOT NULL,
  alamat        TEXT,
  no_hp         VARCHAR(15),
  created_at    TIMESTAMP    DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (id_pasien),
  UNIQUE KEY uk_no_rm (no_rm),
  UNIQUE KEY uk_nik (nik)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
⚠️ Perhatian
Simpan NIK sebagai CHAR(16), bukan INT. Angka 16 digit melebihi batas INT, dan NIK yang diawali angka 0 akan kehilangan angka nolnya. NIK adalah identitas, bukan bahan hitung-hitungan.

Tabel sudah ada, tapi masih kosong seperti lemari baru. Isi dengan tiga data fiktif: pada tab SQL, tempel kode berikut lalu klik Go.

SQL: data pasien fiktif
INSERT INTO pasien (no_rm, nik, nama_pasien, tanggal_lahir, jenis_kelamin, alamat, no_hp) VALUES
('RM-0001', '3500000000000001', 'Budi Santoso',   '1998-04-12', 'L', 'Jl. Mawar No. 1, Surabaya', '081200000001'),
('RM-0002', '3500000000000002', 'Siti Rahmawati', '2001-09-30', 'P', 'Jl. Melati No. 2, Sidoarjo', '081200000002'),
('RM-0003', '3500000000000003', 'Andi Pratama',   '1985-01-05', 'L', 'Jl. Kenanga No. 3, Gresik',  '081200000003');

Hasil yang diharapkan: klik tabel pasien lalu tab Browse. Kamu akan melihat 3 baris data dengan id_pasien terisi otomatis 1, 2, 3.

⚡ Insight Penting
Di XAMPP versi modern, mesin database yang berjalan sebenarnya MariaDB, turunan MySQL yang kompatibel. Karena itu di Control Panel namanya tetap "MySQL", dan semua kode di artikel ini bekerja sama persis.

Praktik 2: Membuat File Koneksi PHP MySQL dengan mysqli

Sekarang saatnya petugas (PHP) mengambil kunci. Kita buat satu file khusus bernama koneksi.php yang nanti dipanggil oleh semua halaman lain. Prinsipnya sederhana: tulis sekali, pakai berkali-kali.

1
Buat folder proyek. Buka C:\xampp\htdocs\, buat folder baru bernama pasien_app.
2
Buat file di Sublime Text. Pilih File, New File, tempel kode di bawah, lalu simpan sebagai koneksi.php di dalam folder pasien_app.
PHP: koneksi.php
<?php
// Aktifkan pelaporan error mysqli sebagai exception
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

$host = "localhost";
$user = "root";
$pass = "";               // XAMPP default: password kosong
$db   = "db_simrs_mini";

try {
    $koneksi = new mysqli($host, $user, $pass, $db);
    $koneksi->set_charset("utf8mb4");
} catch (mysqli_sql_exception $e) {
    die("Koneksi gagal: " . $e->getMessage());
}
?>

Baca kodenya per bagian. Empat variabel di awal menyimpan "kunci" yang tadi kita bahas. Baris new mysqli(...) adalah momen PHP mengetuk pintu MySQL. Blok try dan catch bertugas menangkap kegagalan, lalu menampilkan pesan yang bisa kamu baca, bukan layar putih membingungkan. Sedangkan set_charset("utf8mb4") memastikan nama pasien yang berhuruf khusus tidak berubah menjadi tanda tanya.

๐Ÿ”ฅ Fakta Menarik
Kamu mungkin menemukan tutorial lama dengan fungsi mysql_connect(). Fungsi itu sudah dihapus sejak PHP 7.0. Pengganti resminya adalah mysqli ("MySQL Improved") atau PDO, sesuai dokumentasi PHP.

Selanjutnya kita uji. Satu file koneksi yang tidak pernah dites sama seperti kunci yang belum dicoba di lubangnya. Buat file tes_koneksi.php di folder yang sama.

PHP: tes_koneksi.php
<?php
require_once "koneksi.php";

echo "<h3>Koneksi PHP MySQL berhasil!</h3>";

$hasil = $koneksi->query("SELECT no_rm, nama_pasien, tanggal_lahir FROM pasien");

echo "<table border='1' cellpadding='8'>";
echo "<tr><th>No. RM</th><th>Nama</th><th>Tgl Lahir</th></tr>";
while ($baris = $hasil->fetch_assoc()) {
    echo "<tr>";
    echo "<td>" . htmlspecialchars($baris['no_rm']) . "</td>";
    echo "<td>" . htmlspecialchars($baris['nama_pasien']) . "</td>";
    echo "<td>" . htmlspecialchars($baris['tanggal_lahir']) . "</td>";
    echo "</tr>";
}
echo "</table>";
?>
3
Jalankan lewat localhost. Buka browser dan ketik http://localhost/pasien_app/tes_koneksi.php. Jangan klik dua kali file-nya dari Explorer, karena PHP hanya jalan lewat Apache.

Hasil yang diharapkan: muncul tulisan "Koneksi PHP MySQL berhasil!" dan tabel berisi tiga pasien fiktif (Budi Santoso, Siti Rahmawati, Andi Pratama).

๐Ÿ’ก Tips
Perhatikan fungsi htmlspecialchars() saat menampilkan data. Kebiasaan kecil ini mencegah data yang mengandung tanda < atau > merusak tampilan halaman, dan jadi dasar pengamanan yang akan kamu butuhkan nanti.
๐Ÿ” Analisis: mysqli atau PDO?
mysqli
Khusus MySQL/MariaDB, sintaks lebih ringkas, dan cocok untuk pemula. Inilah pilihan kita di seri ini.
PDO
Bisa dipakai untuk banyak jenis database, jadi lebih fleksibel kalau suatu hari aplikasimu pindah mesin. Layak kamu pelajari setelah dasar kuat.
Kesimpulannya: untuk kebutuhan belajar koneksi PHP MySQL di laboratorium, mysqli sudah lebih dari cukup.
⚡ Insight Penting
Menaruh kredensial di satu file koneksi.php berarti kalau password berubah, kamu cukup mengedit satu tempat. Di sisi lain, akun root tanpa password hanya pantas untuk komputer lab. Untuk aplikasi yang benar-benar dipakai, buat user database khusus dengan hak akses terbatas.

Error yang Sering Muncul & Cara Mengatasinya pada Koneksi PHP MySQL

Error itu normal, bahkan bagian dari belajar. Tabel ini kamu bisa jadikan "buku saku" saat koneksimu mogok.

Pesan error Penyebab Cara mengatasi
Access denied for user 'root'@'localhost'Username atau password salahCek $user dan $pass. Di XAMPP default, password dikosongkan.
Unknown database 'db_simrs_mini'Database belum dibuat atau salah ketikCocokkan nama di phpMyAdmin dengan $db.
Connection refusedModul MySQL belum menyalaKlik Start pada MySQL di XAMPP Control Panel.
Call to undefined function mysqli_connect()Ekstensi mysqli tidak aktifPastikan baris extension=mysqli di php.ini tidak diawali titik koma, lalu restart Apache.
Browser menampilkan kode PHP mentahFile dibuka lewat file:///, bukan localhostAkses lewat http://localhost/pasien_app/....
Failed to open stream: No such filePath require_once salahPastikan koneksi.php satu folder dengan file pemanggilnya.
Table 'db_simrs_mini.pasien' doesn't existTabel belum dibuat atau nama bedaUlangi Praktik 1 langkah 4 dan periksa ejaan nama tabel.

Latihan Mandiri

Tugas 1. Tabel poli. Di database db_simrs_mini, buat tabel poli dengan kolom id_poli (primary key, auto increment), kode_poli, dan nama_poli. Isi 4 data fiktif, misalnya Poli Umum, Poli Gigi, Poli Anak, dan Poli KIA.
Tugas 2. Tampilkan poli lewat PHP. Buat tes_poli.php yang memanggil koneksi.php dan menampilkan seluruh isi tabel poli dalam bentuk tabel HTML.
Tugas 3. Uji error. Sengaja ubah $db menjadi nama yang salah, catat pesan error yang muncul, lalu cocokkan dengan tabel error di atas. Kembalikan ke nama yang benar setelah selesai.
Referensi resmi
๐Ÿ ✅

Kesimpulan: Koneksi PHP MySQL Sudah Jadi, Saatnya CRUD

Hari ini kamu sudah membangun "rumah" untuk data pasien: database db_simrs_mini, tabel pasien dengan tipe data yang tepat, dan file koneksi.php berbasis mysqli. Kamu juga sudah tahu cara membaca pesan error saat koneksi PHP MySQL bermasalah.

Di artikel berikutnya, koneksi ini langsung kita pakai untuk menyimpan dan menampilkan data pasien. Pernah mengalami error unik saat praktik? Ceritakan di kolom komentar, siapa tahu jadi penyelamat temanmu. Kalau artikel ini membantu, bagikan ke teman satu kelas.

๐Ÿ’ฌ Tulis Komentar ๐Ÿ“ค Bagikan Artikel
Tag artikel
#PemrogramanWeb #D4MIK #PHPMySQL #phpMyAdmin #DatabasePasien
Label topik
Koneksi PHP MySQL Database dan Tabel Pasien phpMyAdmin mysqli
๐Ÿ“š
Pemrograman Web D4 MIK
Artikel ini bagian dari seri 16 artikel. Lihat semua materi dan urutan belajarnya di Daftar Isi.
Buka Daftar Isi Artikel

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 →

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