Membuat CRUD (Create, Read, Update dan Delete) Sederhana OOP (Object Oriented Programming) Menggunakan PHP & MYSQL
1. Pertama buat sebuah folder baru didalam folder htdocs di xampp dan beri nama folder tersebut dengan nama crud, lalu buat struktur file seperti yang ada pada gambar dibawah ini
untuk folder css dan folder js dapat didownload melalui link berikut:
CSS : https://cdn.jsdelivr.net/npm/bootstrap@5.3.5/dist/css/bootstrap.min.css
JS : https://cdn.jsdelivr.net/npm/bootstrap@5.3.5/dist/js/bootstrap.bundle.min.js
2. Selanjutnya buat database baru pada dengan nama pemrograman_web dengan kode seperti dibawah ini
$servername = "localhost";: Menyimpan alamat server MySQL. Dalam hal ini, menggunakan localhost, yang berarti server berada di mesin yang sama dengan skrip PHP.
$username = "root";: Menyimpan nama pengguna untuk mengakses server MySQL. Di sini, menggunakan root, yang merupakan pengguna default dengan hak akses penuh.
$password = "";: Menyimpan kata sandi untuk pengguna MySQL. Di sini, tidak ada kata sandi yang ditentukan (string kosong), yang umum untuk instalasi lokal.
$port = 3306;: Menyimpan nomor port yang digunakan untuk koneksi ke server MySQL. Port default untuk MySQL adalah 3306.
$conn = new PDO("mysql:host=$servername;port=$port", $username, $password);: new PDO(...) membuat objek PDO untuk menghubungkan ke database MySQL menggunakan parameter yang telah ditentukan. Ini adalah langkah pertama untuk berinteraksi dengan database. Bagian mysql:host=$servername;port=$port adalah string DSN (Data Source Name) yang menunjukkan jenis database (MySQL), alamat host, dan port yang digunakan untuk koneksi.
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);: setAttribute(...) mengatur atribut untuk objek PDO. Dalam hal ini, mengatur mode kesalahan menjadi ERRMODE_EXCEPTION, yang berarti jika terjadi kesalahan, PDO akan melempar pengecualian (exception) alih-alih hanya mengeluarkan peringatan. Ini membantu dalam menangani kesalahan dengan lebih baik.
$sql = "CREATE DATABASE IF NOT EXISTS pemrograman_web";: Menyimpan perintah SQL dalam variabel $sql. Perintah ini akan membuat database baru bernama "pemrograman_web" jika database tersebut belum ada.
$conn->exec($sql);: exec(...) menjalankan perintah SQL yang telah disimpan dalam variabel $sql. Jika perintah berhasil, database baru akan dibuat.
echo "Database 'pemrograman_web' created successfully<br>";: Jika database berhasil dibuat, pesan ini akan ditampilkan di browser untuk memberi tahu pengguna bahwa operasi berhasil.
catch (PDOException $e): Menangkap pengecualian yang mungkin terjadi selama proses koneksi atau eksekusi perintah SQL. Jika ada kesalahan, blok ini akan dieksekusi.
echo "Error: " . $e->getMessage();: Menampilkan pesan kesalahan yang dihasilkan oleh pengecualian. Ini memberikan informasi tentang apa yang salah, yang berguna untuk debugging.
$conn = null;: Menutup koneksi ke database dengan mengatur objek koneksi menjadi null. Ini adalah praktik yang baik untuk membebaskan sumber daya setelah selesai menggunakan koneksi database.
3. Berikutnya buat tabel baru pada database yang udah dibuat dengan nama mahasiswa dengan kode seperti dibawah ini
require_once 'config/Database.php';: Memuat file kelas Database yang berisi konfigurasi koneksi database. require_once memastikan file hanya di-load sekali.
require_once mencegah duplikasi deklarasi kelas jika file di-include berkali-kali.
$db = new Database();: Membuat instance baru dari kelas Database untuk mengelola koneksi.
$conn = $db->getConnection();: Mendapatkan objek koneksi database yang siap digunakan untuk eksekusi query.
$sql = "CREATE TABLE IF NOT EXISTS mahasiswa (...";: Menyimpan perintah SQL untuk membuat tabel dengan struktur:
id INT(11) NOT NULL AUTO_INCREMENT: Kolom ID sebagai primary key yang auto-incrementnim VARCHAR(16) NOT NULL: Kolom NIM dengan tipe VARCHAR (max 16 karakter)nama VARCHAR(128) NOT NULL: Kolom nama dengan tipe VARCHAR (max 128 karakter)jurusan VARCHAR(128) NOT NULL: Kolom jurusan dengan tipe VARCHAR (max 128 karakter)PRIMARY KEY (id): Menetapkan kolom id sebagai primary keyENGINE=InnoDB: Menggunakan storage engine InnoDB yang mendukung transactionDEFAULT CHARSET=utf8mb4: Menggunakan charset utf8mb4 untuk support Unicode lengkapCOLLATE=utf8mb4_general_ci: Collation untuk perbandingan string case-insensitive
$conn->query($sql): Menjalankan perintah SQL untuk membuat tabel. Mengembalikan TRUE jika berhasil.
if ($conn->query($sql) === TRUE): Memeriksa apakah query berhasil dieksekusi.
try {...} catch (Exception $e): Blok try-catch untuk menangani exception yang mungkin terjadi selama eksekusi query.
echo "Error creating table: " . $conn->error;: Menampilkan pesan error spesifik jika pembuatan tabel gagal.
echo "Exception: " . $e->getMessage();: Menampilkan pesan exception jika terjadi error.
$conn->close();: Menutup koneksi database setelah selesai untuk mengosongkan resource.
Skrip ini bertujuan untuk:
- Membuat tabel 'mahasiswa' jika belum ada
- Mendefinisikan struktur tabel dengan kolom-kolom yang diperlukan
- Memberikan feedback tentang hasil operasi
- Menangani error secara elegan
- Membersihkan resource setelah selesai
4. Lalu buatlah koneksi dengan database degan cara buka file config/Database.php dan buat kode seperti dibawah ini
class database { ... }: Mendefinisikan class bernama database yang bertanggung jawab untuk mengelola koneksi ke database MySQL.
private $host = "localhost";: Menyimpan alamat server database (localhost)private $db_name = "pemrograman_web";: Menyimpan nama database yang akan digunakanprivate $username = "root";: Menyimpan username untuk akses databaseprivate $password = "";: Menyimpan password database (kosong untuk development lokal)public $conn;: Variabel publik untuk menyimpan objek koneksi
private untuk encapsulation, kecuali $conn yang perlu diakses dari luar class.
public function getConnection(){ ... }: Method utama yang bertugas membuat koneksi ke database.
$this->conn = null;: Mereset koneksi sebelum membuat yang baru
try { ... } catch (Exception $e) { ... }: Blok try-catch untuk menangani error koneksi
$this->conn = new mysqli($this->host, $this->username, $this->password, $this->db_name);:
Membuat koneksi baru menggunakan extension MySQLi dengan parameter:
- Host server
- Username
- Password
- Nama database
echo "Connection error: " . $e->getMessage();: Menampilkan pesan error jika koneksi gagal
return $this->conn;: Mengembalikan objek koneksi yang bisa digunakan oleh class lain
Class ini dirancang untuk:
- Mengkapsulasi konfigurasi koneksi database
- Menyediakan interface sederhana untuk mendapatkan koneksi
- Menangani error koneksi secara terpusat
- Memisahkan logika koneksi dari bagian aplikasi lain
5. Selanjutnya buat variable constant yang mana nantinya dapat diakases dari kelas manapun pada file config/Config.php dan buat kode seperti dibawah ini
define('BASE_URL', 'http://localhost/crud/');: Mendefinisikan konstanta BASE_URL yang menyimpan alamat dasar (base URL) dari aplikasi.
config.php yang di-include di semua halaman.
- Memudahkan manajemen URL: Daripada menulis ulang alamat lengkap berkali-kali, cukup gunakan
BASE_URL. - Mendukung pemeliharaan yang mudah: Jika lokasi project berubah (misalnya ke hosting atau subfolder lain), cukup ubah
BASE_URLsekali saja. - Digunakan untuk resource dan routing: Bisa digunakan untuk membuat path ke file, gambar, atau file PHP seperti
<?= BASE_URL ?>assets/style.css.
define() menetapkan nilai konstan global yang dapat digunakan di seluruh file PHP setelah deklarasi. Konstanta tidak bisa diubah atau dihapus setelah didefinisikan.
6. Berikutnya buat sebuah function yang berfungsi untuk menampilkan pesan pada file function/Alert.php dan buat kode seperti dibawah ini
function alert($msg, $sts) { ... }: Mendefinisikan fungsi bernama alert yang bertugas untuk menampilkan pesan notifikasi menggunakan komponen alert dari Bootstrap.
$msg: Pesan yang akan ditampilkan kepada pengguna (teks alert).$sts: Status alert. Jika bernilai1, akan dianggap "berhasil" (success), selain itu dianggap "gagal" (danger).
Fungsi menggunakan if untuk mengecek nilai $sts:
if($sts == 1){
$tipe = 'success';
}else{
$tipe = 'danger';
}
Note: Terdapat kesalahan penulisan kecil sebelumnya — 'succes' seharusnya 'success' (dengan dua huruf "s" di akhir).
Fungsi alert() berguna untuk:
- Menampilkan pesan dinamis kepada pengguna.
- Membedakan antara pesan sukses dan gagal menggunakan warna Bootstrap.
- Mempercepat penulisan alert tanpa harus menulis HTML panjang secara manual.
7. Setelah itu buat fungsi operasi Create, Read, Update dan Delete data Mahasiswa pada file model/Mahasiswa.php dan buat kode seperti dibawah ini
session_start();: Memulai atau melanjutkan session PHP yang memungkinkan penyimpanan data persisten antar request.
class Mahasiswa { ... }: Mendefinisikan class Mahasiswa yang akan menangani operasi terkait data mahasiswa.
private $conn;: Variabel privat untuk menyimpan koneksi databaseprivate $table_name = "mahasiswa";: Menyimpan nama tabel database yang digunakanpublic $id;: Properti publik untuk ID mahasiswapublic $nim;: Properti publik untuk NIM mahasiswapublic $nama;: Properti publik untuk nama mahasiswapublic $jurusan;: Properti publik untuk jurusan mahasiswa
public function __construct($db) { ... }: Method khusus yang otomatis dipanggil ketika objek dibuat.
$this->conn = $db;: Menerima objek koneksi database dan menyimpannya di properti $conn.
create():public function create() { ... }: Method ini bertugas untuk menyimpan data mahasiswa baru ke dalam database menggunakan query INSERT.
$query = "INSERT INTO " . $this->table_name . " SET nim=?, nama=?, jurusan=?";
Menyusun query SQL dinamis menggunakan properti $table_name (yaitu tabel mahasiswa). Penggunaan ? berarti akan menggunakan parameter binding untuk keamanan (mencegah SQL Injection).
$stmt = $this->conn->prepare($query); $stmt->bind_param("sss", $this->nim, $this->nama, $this->jurusan);
prepare(): Menyiapkan query untuk dieksekusi.bind_param("sss", ...): Mengikat tiga parameter string (s = string) ke query — masing-masing untuknim,nama, danjurusan.
if ($stmt->execute()) { $_SESSION['flash_message'] = "Data berhasil disimpan!"; header("Location: " . BASE_URL . "index.php?msg=1"); }
else { $_SESSION['flash_message'] = "Data gagal disimpan!"; header("Location: " . BASE_URL . "index.php?msg=0"); }
Jika query berhasil dieksekusi, maka akan:
- Menyimpan pesan sukses ke dalam session (untuk ditampilkan di halaman berikutnya).
- Mengalihkan pengguna ke halaman utama dengan query string
?msg=1.
Jika gagal, akan melakukan hal serupa tetapi dengan pesan gagal dan ?msg=0.
read():public function read($id = "") { ... }: Method ini bertugas untuk membaca data mahasiswa dari database. Jika parameter $id diberikan, maka hanya data dengan ID tersebut yang akan diambil. Jika tidak, semua data akan diambil.
if ($id == "") {
$query = "SELECT * FROM " . $this->table_name;
} else {
$query = "SELECT * FROM " . $this->table_name . " WHERE id = ?";
}
Pada bagian ini, query SQL disusun berdasarkan apakah parameter $id diberikan atau tidak. Jika $id kosong, maka query akan mengambil semua data dari tabel. Jika $id diberikan, maka hanya data yang memiliki ID tersebut yang akan diambil.
$stmt = $this->conn->prepare($query);
if ($id != "") {
$stmt->bind_param("s", $id);
}
prepare(): Menyiapkan query untuk eksekusi.bind_param("s", $id): Mengikat parameter$idke query, dengan tipe datasuntuk string.
$stmt->execute();
Setelah query dieksekusi, fungsi ini mengembalikan hasil eksekusi menggunakan $stmt->get_result(), yang dapat digunakan untuk mengambil data yang dihasilkan oleh query.
update():public function update() { ... }: Method ini bertugas untuk memperbarui data mahasiswa yang sudah ada di dalam database berdasarkan ID.
$query = "UPDATE " . $this->table_name . " SET nim=?, nama=?, jurusan=? WHERE id=?";
Menyusun query SQL untuk melakukan pembaruan data pada tabel mahasiswa, berdasarkan ID mahasiswa. Query ini menggunakan SET untuk memperbarui nilai nim, nama, dan jurusan, serta menggunakan WHERE id=? untuk menentukan mahasiswa yang akan diperbarui.
$stmt = $this->conn->prepare($query);
$stmt->bind_param("ssss", $this->nim, $this->nama, $this->jurusan, $this->id);
prepare(): Menyiapkan query untuk dieksekusi.bind_param("ssss", ...): Mengikat empat parameter string (s = string) ke query, yang terdiri darinim,nama,jurusan, danid.
if ($stmt->execute()) { $_SESSION['flash_message'] = "Data berhasil diupdate!"; header("Location: " . BASE_URL . "index.php?msg=1"); } else { $_SESSION['flash_message'] = "Data gagal diupdate!"; header("Location: " . BASE_URL . "index.php?msg=0"); }
Jika query berhasil dieksekusi, maka:
- Menyimpan pesan sukses ke dalam session (untuk ditampilkan di halaman berikutnya).
- Mengalihkan pengguna ke halaman utama dengan query string
?msg=1.
Jika query gagal, akan menyimpan pesan gagal ke dalam session dan mengalihkan pengguna ke halaman utama dengan query string ?msg=0.
delete():public function delete() { ... }: Method ini bertugas untuk menghapus data mahasiswa berdasarkan ID dari database.
$query = "DELETE FROM " . $this->table_name . " WHERE id=?";
Menyusun query SQL untuk menghapus data dari tabel mahasiswa, dengan menggunakan WHERE id=? untuk menentukan mahasiswa yang akan dihapus berdasarkan ID-nya.
$stmt = $this->conn->prepare($query);
$stmt->bind_param("s", $this->id);
prepare(): Menyiapkan query untuk dieksekusi.bind_param("s", ...): Mengikat satu parameter string (s = string) ke query, yaituid.
if ($stmt->execute()) { $_SESSION['flash_message'] = "Data berhasil dihapus!"; header("Location: " . BASE_URL . "index.php?msg=1"); } else { $_SESSION['flash_message'] = "Data gagal dihapus!"; header("Location: " . BASE_URL . "index.php?msg=0"); }
Jika query berhasil dieksekusi, maka:
- Menyimpan pesan sukses ke dalam session (untuk ditampilkan di halaman berikutnya).
- Mengalihkan pengguna ke halaman utama dengan query string
?msg=1.
Jika query gagal, akan menyimpan pesan gagal ke dalam session dan mengalihkan pengguna ke halaman utama dengan query string ?msg=0.
8. Kemudian buat fungsi untuk menangani aksi pengolahan data mahasiswa, seperti menambah, menghapus, dan memperbarui data mahasiswa pada file function/Mahasiswa.php dan buat kode seperti dibawah ini
Script ini berfungsi untuk menangani aksi pengolahan data mahasiswa, seperti menambah, menghapus, dan memperbarui data mahasiswa. Kode ini mengarahkan pada beberapa aksi berdasarkan parameter action yang diterima melalui URL.
include_once '../config/Database.php';
include '../config/Config.php';
include_once '../model/Mahasiswa.php';
File-file ini di-include untuk menyediakan akses ke konfigurasi database dan model Mahasiswa.
$database = new Database();
$db = $database->getConnection();
$mahasiswa = new Mahasiswa($db);
Koneksi ke database diinisialisasi dengan membuat objek Database dan kemudian memperoleh koneksi dengan method getConnection(). Selanjutnya, objek Mahasiswa dibuat dengan menyertakan objek koneksi database untuk berinteraksi dengan data mahasiswa.
Script ini memeriksa parameter action yang diterima melalui URL untuk menentukan aksi yang akan dilakukan:
- Action Create: Jika
action=create, maka data mahasiswa baru akan disimpan ke dalam database menggunakan methodcreate()dari objekMahasiswa.
if ($_GET['action'] == 'create') {
$mahasiswa->nim = $_POST['nim'];
$mahasiswa->nama = $_POST['nama'];
$mahasiswa->jurusan = $_POST['jurusan'];
$mahasiswa->create();
}
action=delete, maka data mahasiswa yang memiliki ID tertentu akan dihapus dengan method delete().elseif ($_GET['action'] == 'delete') {
$mahasiswa->id = $_GET['id'];
$mahasiswa->delete();
}
action=update, maka data mahasiswa yang sudah ada akan diperbarui dengan method update().elseif ($_GET['action'] == 'update') {
$mahasiswa->id = $_POST['id'];
$mahasiswa->nim = $_POST['nim'];
$mahasiswa->nama = $_POST['nama'];
$mahasiswa->jurusan = $_POST['jurusan'];
$mahasiswa->update();
}
- Mengelola aksi pengolahan data mahasiswa seperti menambah, menghapus, dan memperbarui berdasarkan parameter
action. - Menjalankan operasi CRUD melalui method-method yang ada di dalam model
Mahasiswa. - Memberikan umpan balik ke pengguna berdasarkan aksi yang dilakukan.
9. Terakhir untuk menampilkan data, menampilkan form input dan update data mahasiswa buat pada file index.php, edit.phpdan create.php
1.) index.php
2.) create.php
3.) edit.php