Tutorial PHP #27: CRUD Dasar dengan PHP Native

1. Apa itu CRUD?

CRUD adalah empat operasi dasar pada database:

  • Create - tambah data baru (INSERT)
  • Read - baca/tampilkan data (SELECT)
  • Update - ubah data yang ada (UPDATE)
  • Delete - hapus data (DELETE)

Memahami CRUD adalah fondasi dari hampir semua fitur aplikasi web.

2. Create - INSERT Data

<?php
require_once "db.php";

if ($_SERVER["REQUEST_METHOD"] === "POST") {
    $nama  = trim($_POST["nama"]  ?? "");
    $email = trim($_POST["email"] ?? "");
    $pass  = $_POST["password"]   ?? "";

    // Validasi sederhana
    if (empty($nama) || empty($email) || empty($pass)) {
        die("Semua field wajib diisi");
    }

    // Hash password sebelum simpan
    $hashedPass = password_hash($pass, PASSWORD_DEFAULT);

    // Prepared statement untuk INSERT
    $stmt = mysqli_prepare($conn, "INSERT INTO users (nama, email, password) VALUES (?, ?, ?)");
    mysqli_stmt_bind_param($stmt, "sss", $nama, $email, $hashedPass);

    if (mysqli_stmt_execute($stmt)) {
        $newId = mysqli_insert_id($conn);
        echo "User berhasil ditambahkan! ID: $newId";
    } else {
        echo "Gagal: " . mysqli_error($conn);
    }

    mysqli_stmt_close($stmt);
}
?>

3. Read - SELECT Data

<?php
require_once "db.php";

// Baca semua user
function getAllUsers($conn): array {
    $result = mysqli_query($conn, "SELECT id, nama, email, created_at FROM users ORDER BY id DESC");
    $users  = [];

    while ($row = mysqli_fetch_assoc($result)) {
        $users[] = $row;
    }

    mysqli_free_result($result);
    return $users;
}

// Baca user berdasarkan ID
function getUserById($conn, int $id): ?array {
    $stmt = mysqli_prepare($conn, "SELECT * FROM users WHERE id = ? LIMIT 1");
    mysqli_stmt_bind_param($stmt, "i", $id);
    mysqli_stmt_execute($stmt);
    $result = mysqli_stmt_get_result($stmt);
    return mysqli_fetch_assoc($result) ?: null;
}

$users = getAllUsers($conn);
foreach ($users as $user) {
    echo "{$user['nama']} - {$user['email']} <br>";
}
?>

4. Update - UPDATE Data

<?php
require_once "db.php";

if ($_SERVER["REQUEST_METHOD"] === "POST") {
    $id    = (int) ($_POST["id"]   ?? 0);
    $nama  = trim($_POST["nama"]   ?? "");
    $email = trim($_POST["email"]  ?? "");

    if ($id <= 0 || empty($nama) || empty($email)) {
        die("Data tidak valid");
    }

    $stmt = mysqli_prepare($conn, "UPDATE users SET nama = ?, email = ? WHERE id = ?");
    mysqli_stmt_bind_param($stmt, "ssi", $nama, $email, $id);

    if (mysqli_stmt_execute($stmt)) {
        $affected = mysqli_stmt_affected_rows($stmt);
        if ($affected > 0) {
            echo "Data berhasil diupdate";
        } else {
            echo "Tidak ada data yang diubah atau ID tidak ditemukan";
        }
    } else {
        echo "Gagal update: " . mysqli_error($conn);
    }

    mysqli_stmt_close($stmt);
}
?>

5. Delete - DELETE Data

<?php
require_once "db.php";

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

if ($id <= 0) {
    die("ID tidak valid");
}

// Konfirmasi sebelum hapus
$user = getUserById($conn, $id);
if (!$user) {
    die("User tidak ditemukan");
}

$stmt = mysqli_prepare($conn, "DELETE FROM users WHERE id = ?");
mysqli_stmt_bind_param($stmt, "i", $id);

if (mysqli_stmt_execute($stmt)) {
    echo "User '{$user['nama']}' berhasil dihapus";
    header("Location: index.php");
    exit;
} else {
    echo "Gagal hapus: " . mysqli_error($conn);
}

mysqli_stmt_close($stmt);
?>

6. Tampilkan Data di HTML Table

<?php require_once "db.php"; $users = getAllUsers($conn); ?>
<table border="1">
    <tr>
        <th>ID</th>
        <th>Nama</th>
        <th>Email</th>
        <th>Aksi</th>
    </tr>
    <?php foreach ($users as $user): ?>
    <tr>
        <td><?= $user["id"] ?></td>
        <td><?= htmlspecialchars($user["nama"]) ?></td>
        <td><?= htmlspecialchars($user["email"]) ?></td>
        <td>
            <a href="edit.php?id=<?= $user["id"] ?>">Edit</a>
            <a href="delete.php?id=<?= $user["id"] ?>" onclick="return confirm(''Hapus?'')">Hapus</a>
        </td>
    </tr>
    <?php endforeach; ?>
</table>

7. Ringkasan

  • CRUD adalah fondasi semua aplikasi database: Create, Read, Update, Delete
  • Selalu pakai prepared statement untuk operasi yang melibatkan input user
  • Hash password dengan password_hash() sebelum disimpan
  • Gunakan htmlspecialchars() saat menampilkan data ke HTML

Tutorial berikutnya membahas PDO di PHP untuk akses database.