Membuat CRUD (Create, Read, Update dan Delete) Sederhana OOP (Object Oriented Programming) Menggunakan PHP & MYSQL

Card image

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

Card image

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

Card image
Inisialisasi Variabel Koneksi:

$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.

Membuat Koneksi ke Server MySQL:

$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.

Membuat Database:

$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.

Menampilkan Pesan Sukses:

echo "Database 'pemrograman_web' created successfully<br>";: Jika database berhasil dibuat, pesan ini akan ditampilkan di browser untuk memberi tahu pengguna bahwa operasi berhasil.

Menangani Kesalahan:

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.

Menutup Koneksi:

$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

Card image
Mengimpor Konfigurasi Database:

require_once 'config/Database.php';: Memuat file kelas Database yang berisi konfigurasi koneksi database. require_once memastikan file hanya di-load sekali.

Note: Penggunaan require_once mencegah duplikasi deklarasi kelas jika file di-include berkali-kali.

Membuat Koneksi Database:

$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.

Struktur Pembuatan Tabel:

$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-increment
  • nim 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 key
  • ENGINE=InnoDB: Menggunakan storage engine InnoDB yang mendukung transaction
  • DEFAULT CHARSET=utf8mb4: Menggunakan charset utf8mb4 untuk support Unicode lengkap
  • COLLATE=utf8mb4_general_ci: Collation untuk perbandingan string case-insensitive
Eksekusi Query:

$conn->query($sql): Menjalankan perintah SQL untuk membuat tabel. Mengembalikan TRUE jika berhasil.

if ($conn->query($sql) === TRUE): Memeriksa apakah query berhasil dieksekusi.

Manajemen Error:

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.

Penutupan Koneksi:

$conn->close();: Menutup koneksi database setelah selesai untuk mengosongkan resource.

Fungsi Utama:

Skrip ini bertujuan untuk:

  1. Membuat tabel 'mahasiswa' jika belum ada
  2. Mendefinisikan struktur tabel dengan kolom-kolom yang diperlukan
  3. Memberikan feedback tentang hasil operasi
  4. Menangani error secara elegan
  5. Membersihkan resource setelah selesai

4. Lalu buatlah koneksi dengan database degan cara buka file config/Database.php dan buat kode seperti dibawah ini

Card image
Deklarasi Class Database:

class database { ... }: Mendefinisikan class bernama database yang bertanggung jawab untuk mengelola koneksi ke database MySQL.

Properti Class:
  • private $host = "localhost";: Menyimpan alamat server database (localhost)
  • private $db_name = "pemrograman_web";: Menyimpan nama database yang akan digunakan
  • private $username = "root";: Menyimpan username untuk akses database
  • private $password = "";: Menyimpan password database (kosong untuk development lokal)
  • public $conn;: Variabel publik untuk menyimpan objek koneksi
Note: Properti dibuat private untuk encapsulation, kecuali $conn yang perlu diakses dari luar class.

Method getConnection():

public function getConnection(){ ... }: Method utama yang bertugas membuat koneksi ke database.

Proses Inisialisasi Koneksi:

$this->conn = null;: Mereset koneksi sebelum membuat yang baru

try { ... } catch (Exception $e) { ... }: Blok try-catch untuk menangani error koneksi

Pembuatan Koneksi MySQLi:

$this->conn = new mysqli($this->host, $this->username, $this->password, $this->db_name);: Membuat koneksi baru menggunakan extension MySQLi dengan parameter:

  1. Host server
  2. Username
  3. Password
  4. Nama database
Error Handling:

echo "Connection error: " . $e->getMessage();: Menampilkan pesan error jika koneksi gagal

Return Value:

return $this->conn;: Mengembalikan objek koneksi yang bisa digunakan oleh class lain

Fungsi Utama Class:

Class ini dirancang untuk:

  1. Mengkapsulasi konfigurasi koneksi database
  2. Menyediakan interface sederhana untuk mendapatkan koneksi
  3. Menangani error koneksi secara terpusat
  4. 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

Card image
Deklarasi Konstanta BASE_URL:

define('BASE_URL', 'http://localhost/crud/');: Mendefinisikan konstanta BASE_URL yang menyimpan alamat dasar (base URL) dari aplikasi.

Note: Konstanta ini biasanya didefinisikan di file konfigurasi utama seperti config.php yang di-include di semua halaman.

Tujuan Penggunaan BASE_URL:
  • 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_URL sekali saja.
  • Digunakan untuk resource dan routing: Bisa digunakan untuk membuat path ke file, gambar, atau file PHP seperti <?= BASE_URL ?>assets/style.css.
Cakupan Konstanta:

define() menetapkan nilai konstan global yang dapat digunakan di seluruh file PHP setelah deklarasi. Konstanta tidak bisa diubah atau dihapus setelah didefinisikan.

Note: BASE_URL harus diakhiri dengan slash (/) untuk memastikan path yang benar ketika digabungkan dengan bagian URL lainnya.

6. Berikutnya buat sebuah function yang berfungsi untuk menampilkan pesan pada file function/Alert.php dan buat kode seperti dibawah ini

Card image
Deklarasi Fungsi alert():

function alert($msg, $sts) { ... }: Mendefinisikan fungsi bernama alert yang bertugas untuk menampilkan pesan notifikasi menggunakan komponen alert dari Bootstrap.

Parameter Fungsi:
  • $msg: Pesan yang akan ditampilkan kepada pengguna (teks alert).
  • $sts: Status alert. Jika bernilai 1, akan dianggap "berhasil" (success), selain itu dianggap "gagal" (danger).
Logika Penentuan Tipe Alert:

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 Utama:

Fungsi alert() berguna untuk:

  1. Menampilkan pesan dinamis kepada pengguna.
  2. Membedakan antara pesan sukses dan gagal menggunakan warna Bootstrap.
  3. 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

Card image
Session Initialization:

session_start();: Memulai atau melanjutkan session PHP yang memungkinkan penyimpanan data persisten antar request.

Class Declaration:

class Mahasiswa { ... }: Mendefinisikan class Mahasiswa yang akan menangani operasi terkait data mahasiswa.

Class Properties:
  • private $conn;: Variabel privat untuk menyimpan koneksi database
  • private $table_name = "mahasiswa";: Menyimpan nama tabel database yang digunakan
  • public $id;: Properti publik untuk ID mahasiswa
  • public $nim;: Properti publik untuk NIM mahasiswa
  • public $nama;: Properti publik untuk nama mahasiswa
  • public $jurusan;: Properti publik untuk jurusan mahasiswa
Note: Properti database connection dan table_name dibuat private untuk encapsulation, sedangkan properti data mahasiswa dibuat public untuk memudahkan akses.

Constructor Method:

public function __construct($db) { ... }: Method khusus yang otomatis dipanggil ketika objek dibuat.

$this->conn = $db;: Menerima objek koneksi database dan menyimpannya di properti $conn.

Card image
Method create():

public function create() { ... }: Method ini bertugas untuk menyimpan data mahasiswa baru ke dalam database menggunakan query INSERT.

Query SQL:
$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).

Persiapan dan Binding Parameter:
$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 untuk nim, nama, dan jurusan.
Eksekusi dan Penanganan Hasil:
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.

Card image
Method 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.

Query SQL:
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.

Persiapan dan Binding Parameter:
$stmt = $this->conn->prepare($query);
                if ($id != "") {
                    $stmt->bind_param("s", $id);
                }
  • prepare(): Menyiapkan query untuk eksekusi.
  • bind_param("s", $id): Mengikat parameter $id ke query, dengan tipe data s untuk string.
Eksekusi dan Pengembalian Hasil:
$stmt->execute();

Setelah query dieksekusi, fungsi ini mengembalikan hasil eksekusi menggunakan $stmt->get_result(), yang dapat digunakan untuk mengambil data yang dihasilkan oleh query.

Card image
Method update():

public function update() { ... }: Method ini bertugas untuk memperbarui data mahasiswa yang sudah ada di dalam database berdasarkan ID.

Query SQL:
$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.

Persiapan dan Binding Parameter:
$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 dari nim, nama, jurusan, dan id.
Eksekusi dan Penanganan Hasil:
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.

Card image
Method delete():

public function delete() { ... }: Method ini bertugas untuk menghapus data mahasiswa berdasarkan ID dari database.

Query SQL:
$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.

Persiapan dan Binding Parameter:
$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, yaitu id.
Eksekusi dan Penanganan Hasil:
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

Card image
Script Pengolahan Data Mahasiswa

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.

Inklusi File Konfigurasi dan Model:
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.

Inisialisasi Koneksi Database dan Model:
$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.

Pengolahan Berdasarkan Aksi:

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 method create() dari objek Mahasiswa.
  • if ($_GET['action'] == 'create') {
                        $mahasiswa->nim = $_POST['nim'];
                        $mahasiswa->nama = $_POST['nama'];
                        $mahasiswa->jurusan = $_POST['jurusan'];
                        $mahasiswa->create();
                    }
  • Action Delete: Jika 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: Jika 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();
                    }
Fungsi Utama:
  1. Mengelola aksi pengolahan data mahasiswa seperti menambah, menghapus, dan memperbarui berdasarkan parameter action.
  2. Menjalankan operasi CRUD melalui method-method yang ada di dalam model Mahasiswa.
  3. 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

Card image

2.) create.php

Card image

3.) edit.php

Card image

Konvigurasi Laravel

Card image Read More

Laravel AUTH, CRUD Multi Level User

Card image Read More