Dalam dunia pengembangan web, kemampuan untuk mengelola data adalah inti dari hampir setiap aplikasi. Baik itu sistem manajemen pengguna, toko online, atau blog, semua membutuhkan cara untuk membuat, membaca, memperbarui, dan menghapus informasi. Inilah yang dikenal sebagai operasi CRUD (Create, Read, Update, Delete).
Panduan ini akan membawa Anda langkah demi langkah dalam membangun aplikasi CRUD sederhana menggunakan PHP sebagai bahasa server-side dan MySQL sebagai sistem manajemen basis data. Anda akan belajar bagaimana menghubungkan PHP ke MySQL, membuat antarmuka pengguna dasar, dan menjalankan semua empat operasi CRUD.
Apa itu CRUD?
CRUD adalah akronim yang menggambarkan empat fungsi dasar yang harus dimiliki sebuah aplikasi untuk berinteraksi dengan data dalam database:
Create (Buat): Menambahkan data baru ke dalam database. Contoh: mendaftarkan pengguna baru, menambahkan produk.
Read (Baca): Mengambil atau menampilkan data dari database. Contoh: melihat daftar pengguna, menampilkan detail produk.
Update (Perbarui): Mengubah data yang sudah ada di database. Contoh: mengedit profil pengguna, mengubah harga produk.
Delete (Hapus): Menghapus data dari database. Contoh: menghapus akun pengguna, menghapus produk.
Menguasai CRUD adalah fondasi penting bagi setiap pengembang web. Dengan PHP dan MySQL, Anda memiliki kombinasi kuat yang sangat populer untuk membangun aplikasi web dinamis.
Persiapan Lingkungan Pengembangan
Sebelum kita mulai menulis kode, pastikan Anda memiliki lingkungan pengembangan yang siap:
Web Server: Apache (biasanya sudah termasuk dalam XAMPP/WAMP/MAMP).
PHP: Versi 7.x atau lebih tinggi.
MySQL: Sistem manajemen basis data.
XAMPP/WAMP/MAMP: Paket all-in-one yang mempermudah instalasi Apache, PHP, dan MySQL di sistem operasi Anda. Unduh dan instal salah satunya jika Anda belum memilikinya.
Code Editor: Visual Studio Code, Sublime Text, atau Notepad++.
Setelah menginstal XAMPP/WAMP, pastikan Apache dan MySQL berjalan.
Langkah 1: Membuat Database dan Tabel
Pertama, kita akan membuat database dan tabel yang akan digunakan untuk menyimpan data. Kita akan membuat database bernama crud_db dan tabel bernama users.
1. Buka phpMyAdmin (biasanya diakses melalui http://localhost/phpmyadmin setelah menginstal XAMPP/WAMP).
2. Klik "New" di sidebar kiri untuk membuat database baru. Beri nama crud_db dan klik "Create".
3. Setelah database crud_db terpilih, buat tabel baru dengan nama users dan 4 kolom. Klik "Create".
4. Konfigurasikan kolom-kolom tabel users sebagai berikut:
✏️ id: INT, Length/Values: 11, Index: PRIMARY, A_I (Auto Increment)
✏️ name: VARCHAR, Length/Values: 255
✏️ email: VARCHAR, Length/Values: 255
✏️ phone: VARCHAR, Length/Values: 15
Klik "Save". Atau, Anda bisa menjalankan SQL berikut di tab "SQL" di phpMyAdmin:
CREATE DATABASE crud_db; USE crud_db; CREATE TABLE users ( id INT(11) NOT NULL PRIMARY KEY AUTO_INCREMENT, name VARCHAR(255) NOT NULL, email VARCHAR(255) NOT NULL, phone VARCHAR(15) );
Langkah 2: Koneksi ke Database
Buat file config.php di root proyek Anda. File ini akan berisi detail koneksi ke database.
<?php define('DB_SERVER', 'localhost'); define('DB_USERNAME', 'root'); // Username default XAMPP/WAMP define('DB_PASSWORD', ''); // Password default XAMPP/WAMP (kosong) define('DB_NAME', 'crud_db'); // Mencoba koneksi ke database MySQL $link = mysqli_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_NAME); // Cek koneksi if($link === false){ die("ERROR: Could not connect. " . mysqli_connect_error()); } ?>
Sumber: mysqli_connect - PHP Manual
Langkah 3: Operasi CREATE (Menambah Data)
Kita akan membuat form HTML untuk input data dan script PHP untuk menyimpannya ke database.
File: create.php
<?php // Include file konfigurasi database require_once "config.php"; // Definisikan variabel dan inisialisasi dengan nilai kosong $name = $email = $phone = ""; $name_err = $email_err = $phone_err = ""; // Proses data form ketika form disubmit if($_SERVER["REQUEST_METHOD"] == "POST"){ // Validasi nama if(empty(trim($_POST["name"]))){ $name_err = "Mohon masukkan nama."; } else { $name = trim($_POST["name"]); } // Validasi email if(empty(trim($_POST["email"]))){ $email_err = "Mohon masukkan email."; } else { $email = trim($_POST["email"]); } // Validasi telepon if(empty(trim($_POST["phone"]))){ $phone_err = "Mohon masukkan nomor telepon."; } else { $phone = trim($_POST["phone"]); } // Cek input error sebelum menyimpan ke database if(empty($name_err) && empty($email_err) && empty($phone_err)){ // Persiapkan statement INSERT $sql = "INSERT INTO users (name, email, phone) VALUES (?, ?, ?)"; if($stmt = mysqli_prepare($link, $sql)){ // Bind parameter ke statement mysqli_stmt_bind_param($stmt, "sss", $param_name, $param_email, $param_phone); // Set parameter $param_name = $name; $param_email = $email; $param_phone = $phone; // Jalankan statement if(mysqli_stmt_execute($stmt)){ // Redirect ke halaman index setelah berhasil header("location: index.php"); exit(); } else{ echo "Terjadi kesalahan. Silakan coba lagi nanti."; } } // Tutup statement mysqli_stmt_close($stmt); } // Tutup koneksi mysqli_close($link); } ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Tambah User</title> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css"> <style> .wrapper{ width: 600px; margin: 0 auto; } </style> </head> <body> <div class="wrapper"> <div class="container-fluid"> <div class="row"> <div class="col-md-12"> <h2 class="mt-5">Tambah User Baru</h2> <p>Silakan isi form ini untuk menambahkan user baru.</p> <form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post"> <div class="form-group"> <label>Nama</label> <input type="text" name="name" class="form-control <?php echo (!empty($name_err)) ? 'is-invalid' : ''; ?>" value="<?php echo $name; ?>"> <span class="invalid-feedback"><?php echo $name_err; ?></span> </div> <div class="form-group"> <label>Email</label> <input type="email" name="email" class="form-control <?php echo (!empty($email_err)) ? 'is-invalid' : ''; ?>" value="<?php echo $email; ?>"> <span class="invalid-feedback"><?php echo $email_err; ?></span> </div> <div class="form-group"> <label>Telepon</label> <input type="text" name="phone" class="form-control <?php echo (!empty($phone_err)) ? 'is-invalid' : ''; ?>" value="<?php echo $phone; ?>"> <span class="invalid-feedback"><?php echo $phone_err; ?></span> </div> <input type="submit" class="btn btn-primary" value="Submit"> <a href="index.php" class="btn btn-secondary ml-2">Cancel</a> </form> </div> </div> </div> </div> </body> </html>
Langkah 4: Operasi READ (Membaca/Menampilkan Data)
File ini akan menampilkan semua data dari tabel users dalam bentuk tabel HTML. Ini akan menjadi halaman utama aplikasi kita.
File: index.php
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Dashboard</title> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css"> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css"> <script src="https://code.jquery.com/jquery-3.5.1.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js"></script> <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script> <style> .wrapper{ width: 800px; margin: 0 auto; } table tr td:last-child{ width: 120px; } </style> <script> $(document).ready(function(){ $('[data-toggle="tooltip"]').tooltip(); }); </script> </head> <body> <div class="wrapper"> <div class="container-fluid"> <div class="row"> <div class="col-md-12"> <div class="mt-5 mb-3 clearfix"> <h2 class="pull-left">Daftar Pengguna</h2> <a href="create.php" class="btn btn-success pull-right"><i class="fa fa-plus"></i> Tambah Pengguna Baru</a> </div> <?php // Include file konfigurasi database require_once "config.php"; // Ambil semua data dari tabel users $sql = "SELECT * FROM users"; if($result = mysqli_query($link, $sql)){ if(mysqli_num_rows($result) > 0){ echo '<table class="table table-bordered table-striped">'; echo "<thead>"; echo "<tr>"; echo "<th>ID</th>"; echo "<th>Nama</th>"; echo "<th>Email</th>"; echo "<th>Telepon</th>"; echo "<th>Aksi</th>"; echo "</tr>"; echo "</thead>"; echo "<tbody>"; while($row = mysqli_fetch_array($result)){ echo "<tr>"; echo "<td>" . $row['id'] . "</td>"; echo "<td>" . $row['name'] . "</td>"; echo "<td>" . $row['email'] . "</td>"; echo "<td>" . $row['phone'] . "</td>"; echo "<td>"; echo '<a href="read.php?id='. $row['id'] .'" class="mr-3" title="Lihat Rekaman" data-toggle="tooltip"><span class="fa fa-eye"></span></a>'; echo '<a href="update.php?id='. $row['id'] .'" class="mr-3" title="Perbarui Rekaman" data-toggle="tooltip"><span class="fa fa-pencil"></span></a>'; echo '<a href="delete.php?id='. $row['id'] .'" title="Hapus Rekaman" data-toggle="tooltip"><span class="fa fa-trash"></span></a>'; echo "</td>"; echo "</tr>"; } echo "</tbody>"; echo "</table>"; // Bebaskan set hasil mysqli_free_result($result); } else{ echo '<div class="alert alert-danger"><em>Tidak ada rekaman yang ditemukan.</em></div>'; } } else{ echo "ERROR: Tidak dapat menjalankan $sql. " . mysqli_error($link); } // Tutup koneksi mysqli_close($link); ?> </div> </div> </div> </div> </body> </html>
File: read.php (Untuk melihat detail satu pengguna)
<?php // Include file konfigurasi database require_once "config.php"; // Cek apakah parameter id ada di URL if(isset($_GET["id"]) && !empty(trim($_GET["id"]))){ // Persiapkan statement SELECT $sql = "SELECT * FROM users WHERE id = ?"; if($stmt = mysqli_prepare($link, $sql)){ // Bind parameter ke statement mysqli_stmt_bind_param($stmt, "i", $param_id); // Set parameter $param_id = trim($_GET["id"]); // Jalankan statement if(mysqli_stmt_execute($stmt)){ $result = mysqli_stmt_get_result($stmt); if(mysqli_num_rows($result) == 1){ /* Ambil baris hasil sebagai array asosiatif. Karena hasil hanya satu baris, tidak perlu loop. */ $row = mysqli_fetch_array($result, MYSQLI_ASSOC); // Ambil nilai field $name = $row["name"]; $email = $row["email"]; $phone = $row["phone"]; } else{ // URL tidak mengandung id yang valid. Redirect ke halaman error header("location: error.php"); exit(); } } else{ echo "Terjadi kesalahan. Silakan coba lagi nanti."; } } // Tutup statement mysqli_stmt_close($stmt); // Tutup koneksi mysqli_close($link); } else{ // URL tidak mengandung parameter id. Redirect ke halaman error header("location: error.php"); exit(); } ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Lihat Rekaman</title> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css"> <style> .wrapper{ width: 600px; margin: 0 auto; } </style> </head> <body> <div class="wrapper"> <div class="container-fluid"> <div class="row"> <div class="col-md-12"> <h1 class="mt-5 mb-3">Lihat Rekaman</h1> <div class="form-group"> <label>Nama</label> <p><b><?php echo $row["name"]; ?></b></p> </div> <div class="form-group"> <label>Email</label> <p><b><?php echo $row["email"]; ?></b></p> </div> <div class="form-group"> <label>Telepon</label> <p><b><?php echo $row["phone"]; ?></b></p> </div> <p><a href="index.php" class="btn btn-primary">Kembali</a></p> </div> </div> </div> </div> </body> </html>
Langkah 5: Operasi UPDATE (Memperbarui Data)
Ini adalah halaman yang memungkinkan Anda untuk mengedit data pengguna yang sudah ada.
File: update.php
<?php // Include file konfigurasi database require_once "config.php"; // Definisikan variabel dan inisialisasi dengan nilai kosong $name = $email = $phone = ""; $name_err = $email_err = $phone_err = ""; // Proses data form ketika form disubmit if(isset($_POST["id"]) && !empty($_POST["id"])){ // Ambil nilai id dari hidden input $id = $_POST["id"]; // Validasi nama if(empty(trim($_POST["name"]))){ $name_err = "Mohon masukkan nama."; } else { $name = trim($_POST["name"]); } // Validasi email if(empty(trim($_POST["email"]))){ $email_err = "Mohon masukkan email."; } else { $email = trim($_POST["email"]); } // Validasi telepon if(empty(trim($_POST["phone"]))){ $phone_err = "Mohon masukkan nomor telepon."; } else { $phone = trim($_POST["phone"]); } // Cek input error sebelum menyimpan ke database if(empty($name_err) && empty($email_err) && empty($phone_err)){ // Persiapkan statement UPDATE $sql = "UPDATE users SET name=?, email=?, phone=? WHERE id=?"; if($stmt = mysqli_prepare($link, $sql)){ // Bind parameter ke statement mysqli_stmt_bind_param($stmt, "sssi", $param_name, $param_email, $param_phone, $param_id); // Set parameter $param_name = $name; $param_email = $email; $param_phone = $phone; $param_id = $id; // Jalankan statement if(mysqli_stmt_execute($stmt)){ // Redirect ke halaman index setelah berhasil header("location: index.php"); exit(); } else{ echo "Terjadi kesalahan. Silakan coba lagi nanti."; } } // Tutup statement mysqli_stmt_close($stmt); } // Tutup koneksi mysqli_close($link); } else { // Cek apakah parameter id ada di URL if(isset($_GET["id"]) && !empty(trim($_GET["id"]))){ // Ambil nilai id dari parameter URL $id = trim($_GET["id"]); // Persiapkan statement SELECT $sql = "SELECT * FROM users WHERE id = ?"; if($stmt = mysqli_prepare($link, $sql)){ // Bind parameter ke statement mysqli_stmt_bind_param($stmt, "i", $param_id); // Set parameter $param_id = $id; // Jalankan statement if(mysqli_stmt_execute($stmt)){ $result = mysqli_stmt_get_result($stmt); if(mysqli_num_rows($result) == 1){ // Ambil baris hasil sebagai array asosiatif. $row = mysqli_fetch_array($result, MYSQLI_ASSOC); // Ambil nilai field ke dalam variabel $name = $row["name"]; $email = $row["email"]; $phone = $row["phone"]; } else{ // URL tidak mengandung id yang valid. Redirect ke halaman error header("location: error.php"); exit(); } } else{ echo "Terjadi kesalahan. Silakan coba lagi nanti."; } } // Tutup statement mysqli_stmt_close($stmt); // Tutup koneksi mysqli_close($link); } else{ // URL tidak mengandung parameter id. Redirect ke halaman error header("location: error.php"); exit(); } } ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Perbarui Rekaman</title> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css"> <style> .wrapper{ width: 600px; margin: 0 auto; } </style> </head> <body> <div class="wrapper"> <div class="container-fluid"> <div class="row"> <div class="col-md-12"> <h2 class="mt-5">Perbarui Rekaman</h2> <p>Edit nilai input dan submit untuk memperbarui rekaman.</p> <form action="<?php echo htmlspecialchars(basename($_SERVER['REQUEST_URI'])); ?>" method="post"> <div class="form-group"> <label>Nama</label> <input type="text" name="name" class="form-control <?php echo (!empty($name_err)) ? 'is-invalid' : ''; ?>" value="<?php echo $name; ?>"> <span class="invalid-feedback"><?php echo $name_err; ?></span> </div> <div class="form-group"> <label>Email</label> <input type="email" name="email" class="form-control <?php echo (!empty($email_err)) ? 'is-invalid' : ''; ?>" value="<?php echo $email; ?>"> <span class="invalid-feedback"><?php echo $email_err; ?></span> </div> <div class="form-group"> <label>Telepon</label> <input type="text" name="phone" class="form-control <?php echo (!empty($phone_err)) ? 'is-invalid' : ''; ?>" value="<?php echo $phone; ?>"> <span class="invalid-feedback"><?php echo $phone_err; ?></span> </div> <input type="hidden" name="id" value="<?php echo $id; ?>"/> <input type="submit" class="btn btn-primary" value="Submit"> <a href="index.php" class="btn btn-secondary ml-2">Cancel</a> </form> </div> </div> </div> </div> </body> </html>
Langkah 6: Operasi DELETE (Menghapus Data)
Untuk menghapus data, kita akan meminta konfirmasi pengguna sebelum menjalankan query DELETE.
File: delete.php
<?php // Proses operasi delete setelah konfirmasi if(isset($_POST["id"]) && !empty($_POST["id"])){ // Include file konfigurasi database require_once "config.php"; // Persiapkan statement DELETE $sql = "DELETE FROM users WHERE id = ?"; if($stmt = mysqli_prepare($link, $sql)){ // Bind parameter ke statement mysqli_stmt_bind_param($stmt, "i", $param_id); // Set parameter $param_id = trim($_POST["id"]); // Jalankan statement if(mysqli_stmt_execute($stmt)){ // Redirect ke halaman index setelah berhasil header("location: index.php"); exit(); } else{ echo "Terjadi kesalahan. Silakan coba lagi nanti."; } } // Tutup statement mysqli_stmt_close($stmt); // Tutup koneksi mysqli_close($link); } else{ // Cek apakah parameter id ada di URL if(empty(trim($_GET["id"]))){ // URL tidak mengandung parameter id. Redirect ke halaman error header("location: error.php"); exit(); } } ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Hapus Rekaman</title> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css"> <style> .wrapper{ width: 600px; margin: 0 auto; } </style> </head> <body> <div class="wrapper"> <div class="container-fluid"> <div class="row"> <div class="col-md-12"> <h2 class="mt-5 mb-3">Hapus Rekaman</h2> <form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post"> <div class="alert alert-danger"> <input type="hidden" name="id" value="<?php echo trim($_GET["id"]); ?>"/> <p>Apakah Anda yakin ingin menghapus rekaman ini?</p> <p> <input type="submit" value="Ya" class="btn btn-danger"> <a href="index.php" class="btn btn-secondary ml-2">Tidak</a> </p> </div> </form> </div> </div> </div> </div> </body> </html>
File: error.php (Halaman error generik)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Error</title> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css"> <style> .wrapper{ width: 600px; margin: 0 auto; } </style> </head> <body> <div class="wrapper"> <div class="container-fluid"> <div class="row"> <div class="col-md-12"> <h2 class="mt-5 mb-3">Permintaan Tidak Valid</h2> <div class="alert alert-danger">Maaf, Anda telah membuat permintaan tidak valid. Silakan <a href="index.php" class="alert-link">kembali</a> dan coba lagi.</div> </div> </div> </div> </div> </body> </html>
Sumber: PHP MySQL Select Data - W3Schools, PHP MySQL Update Data - W3Schools
Kesimpulan
Selamat! Anda telah berhasil membangun aplikasi CRUD sederhana menggunakan PHP dan MySQL. Anda sekarang memiliki pemahaman dasar tentang bagaimana cara membuat, membaca, memperbarui, dan menghapus data dari database menggunakan PHP.

No comments
Jangan lupa kasih komentar ya!. Karena komentar kalian membantu kami menyediakan informasi yang lebih baik
Tidak boleh menyertakan link atau promosi produk saat berkomentar. Komentar tidak akan ditampilkan. Hubungi 081271449921(WA) untuk dapat menyertakan link dan promosi