Cara Membuat CRUD Sederhana dengan PHP Native dan MySQL

CRUD adalah singkatan dari Create, Read, Update, Delete โ€” empat operasi dasar yang hampir selalu ada di setiap aplikasi web yang menggunakan database. Memahami CRUD dengan PHP nati...

Cara Membuat CRUD Sederhana dengan PHP Native dan MySQL

CRUD adalah singkatan dari Create, Read, Update, Delete โ€” empat operasi dasar yang hampir selalu ada di setiap aplikasi web yang menggunakan database. Memahami CRUD dengan PHP native adalah fondasi yang wajib dikuasai sebelum berpindah ke framework. Pada tutorial ini, kita akan membangun aplikasi CRUD sederhana untuk mengelola data buku menggunakan PHP dan MySQL dengan PDO.

Persiapan Database

Pertama, buat database dan tabel di MySQL. Jalankan SQL berikut di phpMyAdmin atau MySQL CLI:

CREATE DATABASE perpustakaan;
USE perpustakaan;

CREATE TABLE buku (
    id INT AUTO_INCREMENT PRIMARY KEY,
    judul VARCHAR(200) NOT NULL,
    pengarang VARCHAR(100) NOT NULL,
    tahun INT NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

File Koneksi Database

Buat file koneksi.php yang akan kita gunakan di semua halaman:

<?php
// koneksi.php
$dsn = "mysql:host=localhost;dbname=perpustakaan;charset=utf8mb4";
$options = [
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
];

try {
    $pdo = new PDO($dsn, 'root', '', $options);
} catch (PDOException $e) {
    die("Koneksi gagal: " . $e->getMessage());
}

Read โ€” Menampilkan Data

Buat file index.php untuk menampilkan semua data buku sekaligus link ke halaman tambah, edit, dan hapus:

<?php
require 'koneksi.php';

$stmt = $pdo->query("SELECT * FROM buku ORDER BY id DESC");
$daftar_buku = $stmt->fetchAll();
?>
<!-- HTML tabel daftar buku -->
<a href="tambah.php">Tambah Buku</a>
<table border="1">
  <tr>
    <th>Judul</th><th>Pengarang</th><th>Tahun</th><th>Aksi</th>
  </tr>
  <?php foreach ($daftar_buku as $buku): ?>
  <tr>
    <td><?= htmlspecialchars($buku['judul']) ?></td>
    <td><?= htmlspecialchars($buku['pengarang']) ?></td>
    <td><?= $buku['tahun'] ?></td>
    <td>
      <a href="edit.php?id=<?= $buku['id'] ?>">Edit</a> |
      <a href="hapus.php?id=<?= $buku['id'] ?>" onclick="return confirm('Yakin hapus?')">Hapus</a>
    </td>
  </tr>
  <?php endforeach; ?>
</table>

Perhatikan penggunaan htmlspecialchars() saat menampilkan data ke HTML โ€” ini mencegah serangan XSS.

Create โ€” Menambah Data

Buat file tambah.php dengan form input dan logika penyimpanan:

<?php
require 'koneksi.php';

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $judul     = trim($_POST['judul']);
    $pengarang = trim($_POST['pengarang']);
    $tahun     = (int) $_POST['tahun'];

    if ($judul && $pengarang && $tahun) {
        $stmt = $pdo->prepare(
            "INSERT INTO buku (judul, pengarang, tahun) VALUES (:judul, :pengarang, :tahun)"
        );
        $stmt->execute([
            ':judul'     => $judul,
            ':pengarang' => $pengarang,
            ':tahun'     => $tahun,
        ]);
        header('Location: index.php');
        exit;
    }
}
?>
<form method="POST">
  <input type="text" name="judul" placeholder="Judul Buku" required>
  <input type="text" name="pengarang" placeholder="Pengarang" required>
  <input type="number" name="tahun" placeholder="Tahun Terbit" required>
  <button type="submit">Simpan</button>
</form>

Kita menggunakan prepared statements dengan prepare() dan execute() โ€” cara aman memasukkan data ke database karena input pengguna tidak pernah langsung digabung ke query SQL.

Update โ€” Mengubah Data

Buat file edit.php untuk mengambil data lama dan memperbaruinya:

<?php
require 'koneksi.php';

$id = (int) ($_GET['id'] ?? 0);

// Ambil data lama
$stmt = $pdo->prepare("SELECT * FROM buku WHERE id = :id");
$stmt->execute([':id' => $id]);
$buku = $stmt->fetch();

if (!$buku) {
    die("Buku tidak ditemukan.");
}

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $judul     = trim($_POST['judul']);
    $pengarang = trim($_POST['pengarang']);
    $tahun     = (int) $_POST['tahun'];

    $stmt = $pdo->prepare(
        "UPDATE buku SET judul = :judul, pengarang = :pengarang, tahun = :tahun WHERE id = :id"
    );
    $stmt->execute([
        ':judul'     => $judul,
        ':pengarang' => $pengarang,
        ':tahun'     => $tahun,
        ':id'        => $id,
    ]);
    header('Location: index.php');
    exit;
}
?>
<form method="POST">
  <input type="text" name="judul" value="<?= htmlspecialchars($buku['judul']) ?>" required>
  <input type="text" name="pengarang" value="<?= htmlspecialchars($buku['pengarang']) ?>" required>
  <input type="number" name="tahun" value="<?= $buku['tahun'] ?>" required>
  <button type="submit">Update</button>
</form>

Delete โ€” Menghapus Data

Buat file hapus.php yang sederhana namun aman:

<?php
require 'koneksi.php';

$id = (int) ($_GET['id'] ?? 0);

if ($id > 0) {
    $stmt = $pdo->prepare("DELETE FROM buku WHERE id = :id");
    $stmt->execute([':id' => $id]);
}

header('Location: index.php');
exit;

ID selalu di-cast ke integer ((int)) sebelum digunakan โ€” ini cara cepat mencegah manipulasi parameter yang berbahaya.

Kesimpulan

Dengan PHP native dan PDO, kamu sudah bisa membangun aplikasi CRUD yang fungsional dan aman. Kunci utamanya adalah selalu gunakan prepared statements untuk operasi INSERT, UPDATE, dan DELETE, serta htmlspecialchars() saat menampilkan data ke HTML. Dari fondasi ini, kamu bisa mengembangkan aplikasi lebih lanjut dengan menambahkan validasi, autentikasi, hingga antarmuka yang lebih baik.

crud php mysql php native crud create read update delete php tutorial php mysql pdo crud php php database mysql
Bagikan artikel
Kembali

Komentar (0)

Punya pertanyaan atau tambahan? Tulis di bawah โ€” tak perlu login.

Membalas komentarโ€ฆ batal

Belum ada komentar. Jadilah yang pertama!

๐Ÿš€ Partner Recommendation

Butuh Source Code & Aplikasi Premium?

Download aplikasi Laravel, POS, Sekolah, Klinik, ERP, dan source code siap pakai di GudangCode.

GudangCode
  • โœ” Source Code Premium
  • โœ” Sistem Siap Pakai
  • โœ” Lifetime Update
  • โœ” Membership Lifetime
  • โœ” Update Aplikasi Harian
Daftar Membership โ†’