Membangun Sistem CRUD dengan PHP & MySQL

Panduan langkah demi langkah membuat aplikasi pengelolaan (CRUD) data user menggunakan Prepared Statement.

CRUD PHP MySQL

Apa itu CRUD?

CRUD adalah singkatan dari Create (Buat), Read (Baca), Update (Ubah), dan Delete (Hapus). Ini adalah operasi dasar yang dilakukan sebagian besar aplikasi web terhadap database.

Penting: Tutorial ini menggunakan Prepared Statement. Ini adalah standar keamanan modern untuk mencegah serangan SQL Injection. Jangan gunakan query SQL biasa untuk menangani input user!

1. Persiapan Database

Pertama, buat database baru dan tabel users. Copy kode SQL berikut dan jalankan di phpMyAdmin.

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nama VARCHAR(100) NOT NULL,
    email VARCHAR(100) NOT NULL UNIQUE,
    no_hp VARCHAR(20) NOT NULL
);

2. Koneksi Database (koneksi.php)

Buat file koneksi.php untuk menghubungkan skrip PHP dengan database MySQL.

<?php
$host = "localhost";
$user = "root";
$pass = "";
$db   = "crud_db"; // Sesuaikan nama database

$conn = new mysqli($host, $user, $pass, $db);

if ($conn->connect_error) {
    die("Koneksi gagal: " . $conn->connect_error);
}
?>

3. Menambah Data (Create)

Pertama, buat form HTML untuk menginput data.

<form action="tambah.php" method="POST">
    <input type="text" name="nama" placeholder="Nama Lengkap" required><br>
    <input type="email" name="email" placeholder="Email" required><br>
    <input type="text" name="hp" placeholder="No HP" required><br>
    <button type="submit">Simpan</button>
</form>

Kemudian, buat kode PHP untuk memproses inputan tersebut dan menyimpannya ke database dengan aman.

<?php
include 'koneksi.php';

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $nama  = $_POST['nama']; 
    $email = $_POST['email'];
    $hp    = $_POST['hp'];

    
    // Gunakan Prepared Statement
    $stmt = $conn->prepare("INSERT INTO users (nama, email, no_hp) VALUES (?, ?, ?)");
    
    // "sss" artinya 3 parameter bertipe String
    $stmt->bind_param("sss", $nama, $email, $hp);

    if ($stmt->execute()) {
        echo "Data berhasil ditambahkan!";
    } else {
        echo "Error: " . $stmt->error;
    }

    $stmt->close();
}
?>

4. Menampilkan Data (Read)

Menampilkan daftar user dari database dalam bentuk tabel.

<?php
include 'koneksi.php';

$sql = "SELECT * FROM users";
$result = $conn->query($sql);
?>

<table border="1">
    <tr>
        <th>No</th>
        <th>Nama</th>
        <th>Email</th>
        <th>Aksi</th>
    </tr>
    <?php while($row = $result->fetch_assoc()): ?>
    <tr>
        <td><?= $row['id'] ?></td>
        <td><?= htmlspecialchars($row['nama']) ?></td>
        <td><?= htmlspecialchars($row['email']) ?></td>
        <td>
            <a href="edit.php?id=<?= $row['id'] ?>">Edit</a> | 
            <a href="hapus.php?id=<?= $row['id'] ?>" onclick="return confirm('Yakin?')">Hapus</a>
        </td>
    </tr>
    <?php endwhile; ?>
</table>

5. Mengedit Data (Update)

Proses update juga wajib menggunakan Prepared Statement.

<?php
include 'koneksi.php';

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $id    = $_POST['id'];
    $nama  = $_POST['nama'];
    $email = $_POST['email'];

    $stmt = $conn->prepare("UPDATE users SET nama=?, email=? WHERE id=?");
    $stmt->bind_param("ssi", $nama, $email, $id); // "ssi": String, String, Integer

    if ($stmt->execute()) {
        header("Location: index.php");
    } else {
        echo "Update gagal.";
    }
    $stmt->close();
}
?>

6. Menghapus Data (Delete)

Hapus data berdasarkan ID.

<?php
include 'koneksi.php';

$id = $_GET['id'];

$stmt = $conn->prepare("DELETE FROM users WHERE id=?");
$stmt->bind_param("i", $id); // "i": Integer

if ($stmt->execute()) {
    header("Location: index.php");
} else {
    echo "Gagal menghapus.";
}
$stmt->close();
?>

Kesimpulan

Selamat! Kamu sudah berhasil membuat sistem CRUD sederhana. Selalu ingat rumus Prepared Statement: Prepare -> Bind -> Execute. Ini adalah kunci agar website kamu terhindar dari sql injection.

Untuk keamanan lebih lanjut bisa di tambahkan function strip_tags, pada $_POST supaya format tag HTML di bersihkan dari input atau function lain yang berhubungan dengan keamanan input supaya lebih aman.

Selalu tingkatkan keamanan input dari user agar terhindar dari hal-hal yang tidak diinginkan.