Panduan Praktikum Simple Blog (PHP Dasar)
Dokumen ini dipakai siswa saat praktikum mapel Pemrograman Web dan Basis Data.
1. Tujuan Praktikum
Setelah praktikum ini, siswa mampu:
- Membuat aplikasi blog sederhana berbasis PHP dan MySQL.
- Menampilkan, menambah, mengubah, dan menghapus data kategori dan post.
- Menerapkan tampilan web yang rapi menggunakan CSS dasar.
- Menambahkan interaksi dasar menggunakan JavaScript.
- Memahami alur data dari form ke database lalu ditampilkan kembali.
2. Tools dan Persiapan
- Editor kode (misalnya VS Code).
- Server lokal (XAMPP/Laragon/Docker).
- Database MySQL aktif.
- Browser untuk uji hasil.
3. Struktur Folder Praktikum
simple-blog/
config/
koneksi.php
categories/
index.php
create.php
insert.php
edit.php
update.php
delete.php
posts/
index.php
create.php
insert.php
edit.php
update.php
delete.php
assets/
style.css
scripts.js
index.php
4. Rancangan Database
Buat database: db_simple_blog
Skema inti (wajib, fokus CRUD):
- Tabel
categories. - Tabel
posts. - Relasi
posts.category_id -> categories.id.
CREATE TABLE categories (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL UNIQUE,
slug VARCHAR(120) NOT NULL UNIQUE,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NULL ON UPDATE CURRENT_TIMESTAMP
);
CREATE TABLE posts (
id INT AUTO_INCREMENT PRIMARY KEY,
category_id INT NOT NULL,
title VARCHAR(200) NOT NULL,
slug VARCHAR(220) NOT NULL UNIQUE,
content TEXT NOT NULL,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NULL ON UPDATE CURRENT_TIMESTAMP,
CONSTRAINT fk_posts_category FOREIGN KEY (category_id)
REFERENCES categories(id) ON DELETE RESTRICT
);
5. Langkah Praktikum
Langkah A - Koneksi Database
- Buat file
config/koneksi.php. - Simpan konfigurasi host, username, password, dan nama database.
- Uji koneksi berhasil sebelum lanjut.
Target:
- Tidak ada error koneksi saat file dipanggil.
Langkah B - CRUD Kategori
- Buat folder
categoriesberisi file CRUD sederhana. - Tambahkan data kategori minimal 3 item.
- Pastikan nama kategori unik.
Target:
- Data kategori siap dipakai pada form post.
Langkah C - Tampil Data Post (Read)
- Buka
posts/index.php. - Panggil file koneksi.
- Jalankan query
JOINagar nama kategori ikut tampil. - Tampilkan hasilnya dalam tabel HTML.
Contoh query:
SELECT posts.id, posts.title, categories.name AS category_name, posts.created_at
FROM posts
INNER JOIN categories ON categories.id = posts.category_id
ORDER BY posts.id DESC;
Target:
- Data post tampil beserta kategori di browser.
Langkah D - Form Tambah Data (Create Form)
- Buat
posts/create.php. - Isi form: judul, kategori, dan isi post.
- Form mengarah ke
posts/insert.phpdengan methodPOST.
Target:
- Form bisa ditampilkan dan diisi.
Langkah E - Proses Simpan (Insert)
- Buat
posts/insert.php. - Ambil data dari
$_POST. - Validasi data tidak kosong.
- Pastikan
category_idvalid dari tabelcategories. - Jalankan query
INSERT. - Redirect kembali ke
posts/index.php.
Target:
- Data baru berhasil masuk ke tabel
posts.
Langkah F - Form Edit
- Tambahkan tombol edit di
posts/index.php. - Buat
posts/edit.php?id=.... - Ambil data lama berdasarkan
id. - Tampilkan data lama ke dalam form.
Target:
- Data lama muncul di form edit.
Langkah G - Proses Update
- Buat
posts/update.php. - Ambil
id,category_id,title, dancontentdari$_POST. - Validasi data.
- Jalankan query
UPDATE. - Redirect ke
posts/index.php.
Target:
- Data post berhasil diubah.
Langkah H - Hapus Data
- Tambahkan tombol hapus di
posts/index.php. - Arahkan ke
posts/delete.php?id=.... - Jalankan query
DELETEberdasarkanid. - Redirect kembali ke daftar post.
Target:
- Data terhapus dari tabel.
Langkah I - Styling Tampilan (CSS)
- Rapikan tampilan halaman list kategori, list post, dan form.
- Gunakan gaya konsisten untuk tabel, tombol, input, dan alert.
- Atur responsif dasar agar tampilan tetap nyaman di layar mobile.
Target:
- Halaman tidak hanya berjalan, tetapi juga rapi dan mudah dibaca.
Langkah J - Interaksi Dasar (JavaScript)
- Tambahkan konfirmasi sebelum hapus data.
- Tambahkan validasi klien sederhana untuk field wajib.
- Tambahkan interaksi kecil seperti tutup pesan alert.
Target:
- Interaksi penting berjalan tanpa mengganggu alur CRUD.
6. Aturan Penulisan Kode
- Nama file harus sesuai fungsi.
- Gunakan nama variabel yang jelas.
- Pisahkan file tampilan dan file proses.
- Gunakan validasi input sebelum query dijalankan.
- Hindari hardcode berulang untuk konfigurasi koneksi.
- Gunakan penamaan kelas CSS yang konsisten.
- Gunakan JavaScript hanya untuk interaksi yang relevan.
7. Standar Tampilan Minimum (Wajib)
- Layout halaman rapi dengan jarak antar elemen yang konsisten.
- Tabel data mudah dibaca dan memiliki state saat data kosong.
- Form memiliki label jelas, fokus input, dan pesan error sederhana.
- Tombol aksi mudah dibedakan (utama, ubah, hapus).
- Tampilan tetap bisa digunakan pada layar mobile.
- Konfirmasi hapus berjalan dengan JavaScript.
8. Checklist Praktikum Siswa
- Koneksi database berhasil.
- Data kategori tersedia minimal 3 item.
- Halaman daftar post tampil.
- Fitur tambah data berhasil.
- Fitur edit data berhasil.
- Fitur hapus data berhasil.
- Tampilan halaman list dan form sudah rapi.
- Tampilan tetap nyaman di layar mobile.
- Konfirmasi hapus berjalan.
- Validasi klien dasar berjalan.
- Tidak ada error PHP saat diuji.
- Struktur folder sesuai panduan.
9. Error Umum dan Cara Cek
- Data tidak masuk:
cek method form, nama input, dan query
INSERT. - Data tidak tampil:
cek query
SELECT,JOIN, dan koneksi database. - Kategori tidak terbaca:
cek nilai
category_iddan data master kategori. - Edit/hapus gagal:
cek apakah
idterkirim dengan benar. - Konfirmasi hapus tidak muncul:
cek selector JS dan apakah file
scripts.jsterpanggil. - Tampilan berantakan: cek class HTML dan rule CSS yang belum sinkron.
- Halaman putih/error: aktifkan tampilan error dan baca pesan error PHP.
10. Tugas Pengayaan (Opsional)
- Tambah fitur pencarian judul post.
- Tambah fitur detail post.
- Tambah pagination sederhana.
- Tambah upload gambar thumbnail.
- Tambah dark/light mode sederhana.
11. Kriteria Penilaian
50%Fitur CRUD inti dan relasi tabel berjalan lengkap.20%Struktur file dan kerapian kode.20%Kualitas tampilan CSS dan responsif dasar.10%Interaksi JavaScript yang relevan.
12. Cross-References
- Referensi praktikum PHP Native menggunakan OOP studi kasus web blog: https://habibabdillah.my.id/materi/example-materi
- Portal publikasi materi ajar: https://materi-ajar-smk.pages.dev