Belajar PHP & MySQL #8: Operasi Update dan Delete

Heru Iryanto
Heru Iryanto
Teacher, Content Creator and Full-Stack Developer

Sistem kita belum lengkap. Jika kita memasukkan judul yang salah (typo), saat ini tidak ada cara untuk menghapusnya/mengeditnya kecuali kita menelusuri langsung ke phpMyAdmin. Kita harus memunculkan Tombol Aksi di tabel HTML kita.

Masalah logika utamanya adalah: Saat kita mengeklik tombol “Hapus” atau “Edit” pada Buku A, bagaimana cara PHP tahu bahwa yang harus dihapus/diedit itu Buku A, bukan Buku B?

Jawabannya adalah dengan menyisipkan ID buku ke dalam URL GET (materi Menangkap Data Form HTML) ke dalam tautan Tombol Aksi Hapus/Edit!

1️⃣ Menambahkan Tombol Aksi di Tabel Read

Mari kita ubah sedikit tabel HTML yang ada di file index_buku.php dengan menambahkan 1 kolom tabel baru.

Tambahkan <th>Aksi</th> di <tr>:

<!-- ... kode sebelumnya ... -->
<tr>
   <th>No ID</th>
   <th>Judul Buku</th>
   <th>Nama Penulis</th>
   <th>Tahun Terbit</th>
   <th>Aksi</th>
</tr>
<!-- ... kode sebelumnya ... -->

Lalu tambahkan juga link untuk menghapus dan mengedit buku di kolom Aksi:

<!-- ... kode sebelumnya ... -->
<tr>
   <td> <?php echo $baris_buku['id_buku']; ?> </td>
   <td> <?php echo $baris_buku['judul_buku']; ?> </td>     
   <td> <?php echo $baris_buku['nama_penulis']; ?> </td>
   <td> <?php echo $baris_buku['tahun_terbit']; ?> </td>
   <td>
      <!-- INI DIA RAHASIANYA: Menyelundupkan ID Buku ke dalam URL -->
      <a href="proses_hapus.php?id=<?php echo $baris_buku['id_buku']; ?>">Hapus</a>
      <a href="form_edit.php?id=<?php echo $baris_buku['id_buku']; ?>">Edit</a>
   </td>
</tr>
<!-- ... kode sebelumnya ... -->

Perhatikan baik-baik teks href di atas. Jika buku tersebut bernama “Laskar Pelangi” dan memiliki ID 2, maka PHP akan merender baris tersebut menjadi <a href="proses_hapus.php?id=2">Hapus</a>. Ketika pengguna mengeklik tautan tersebut, browser akan meloncat ke halaman penghapus dengan membawa oleh-oleh berupa tulisan ?id=2 di atas URL-nya! Kalau sekarang diklik, belum ada file proses_hapus.php yang kita buat maka tidak akan terjadi apa-apa. Itu baru bagian frontendnya, sekarang mari kita masuk kebagian backendnya!

2️⃣ Operasi Delete (Menghapus Data Berdasarkan URL)

Kita buat file Back-End bernama proses_hapus.php.

<?php
include 'koneksi.php';

// Menangkap oleh-oleh ID dari ujung URL menggunakan Jaring $_GET
// (Sangat penting! Harus $_GET, karena datanya ada di URL, bukan di Form rahasia $_POST)
$id_target = $_GET['id'];

// Merakit Peluru Pemusnah (Ingat Bab 5 MySQL: WAJIB pakai WHERE!)
$mantra_delete = "DELETE FROM tabel_buku WHERE id_buku = $id_target";

// Menembakkan peluru
mysqli_query($koneksi, $mantra_delete);

// Menendang kembali pengunjung ke tabel daftar buku
header("Location: index_buku.php");
?>

Selesai!

Sekarang coba kamu klik tombol “Hapus” pada baris buku yang ingin kamu hapus! Baris buku tersebut akan musnah selamanya, dan pengunjung seolah-olah hanya melihat layarnya berkedip karena prosesnya sangat cepat.

3️⃣ Operasi Update (Membutuhkan 2 Tahapan)

Proses Edit (Update) adalah operasi yang paling sulit karena membutuhkan Dua Putaran Rute:

Rute 1 (Memunculkan Form Isi Sebelumnya):

  1. Pengguna klik tombol Edit (Membawa URL ?id=2).
  2. Masuk ke halaman form_edit.php.
  3. Di halaman ini, PHP harus melakukan SELECT * FROM tabel_buku WHERE id_buku = 2.
  4. PHP mengambil judul lama “Laskar Pelangi” tersebut, lalu mencetaknya ke dalam atribut HTML <input type="text" value="Laskar Pelangi">. Sehingga user melihat bahwa kotaknya sudah terisi teks lama dan bisa diedit.

Rute 2 (Menimpa dengan Data Baru):

  1. Pengguna mengganti teksnya menjadi “Laskar Pelangi Edisi Revisi”.
  2. Pengguna klik tombol Simpan Perubahan.
  3. Form tersebut dilempar (method="POST") ke file rahasia bernama proses_edit.php.
  4. Di sinilah PHP mengeksekusi peluru terakhir: UPDATE tabel_buku SET judul_buku = '... Edisi Revisi' WHERE id_buku = 2.

Berikut ini kodingan di file form_edit.php:

<?php
  include 'koneksi.php';

  // 1. Tangkap ID yang dibawa dari URL
  $id_target = $_GET['id'];

  // 2. Cari data buku yang mau diedit berdasarkan ID
  $query_baca_lama = mysqli_query($koneksi, "SELECT * FROM tabel_buku WHERE id_buku = $id_target");
  $data_lama = mysqli_fetch_assoc($query_baca_lama);
?>

<!DOCTYPE html>
<html>
<head><title>Form Edit Buku</title></head>
<body>

    <h2>Form Edit Buku</h2>

    <form action="proses_edit.php" method="POST">
    
    <input type="hidden" name="id_buku_rahasia" value="<?php echo $id_target; ?>"> 
    
    <label>Judul Buku:</label><br>
    <input type="text" name="judul_buku" value="<?php echo $data_lama['judul_buku']; ?>"><br><br>
    
    <label>Nama Penulis:</label><br>
    <input type="text" name="nama_penulis" value="<?php echo $data_lama['nama_penulis']; ?>"><br><br>
    
    <label>Tahun Terbit:</label><br>
    <input type="number" name="tahun_terbit" value="<?php echo $data_lama['tahun_terbit']; ?>"><br><br>

    <button type="submit">Simpan Perubahan!</button>
    </form>
</body>
</html>

Sedangakan untuk proses_edit.php, kode nya seperti ini:

<?php
include 'koneksi.php';

// Tangkap data baru dari form POST
$id_target   = $_POST['id_buku_rahasia']; // ID rahasia dari input type="hidden"
$judul_baru  = $_POST['judul_buku'];
$penulis_baru = $_POST['nama_penulis'];
$tahun_baru  = $_POST['tahun_terbit'];

// Rumus UPDATE (Gunakan ID untuk menargetkan baris yang tepat!)
$mantra_update = "UPDATE tabel_buku SET 
                 judul_buku = '$judul_baru', 
                 nama_penulis = '$penulis_baru', 
                 tahun_terbit = '$tahun_baru'
                 WHERE id_buku = $id_target";

mysqli_query($koneksi, $mantra_update);

// Tendang kembali ke daftar buku
header("Location: index_buku.php");

🗽 Kesimpulan

Keempat Operasi Utama (CRUD) akhirnya bersatu!

  • Create: Melalui form tambah ($_POST) + INSERT INTO.
  • Read: Menarik data pakai perulangan while + SELECT *.
  • Update: Memunculkan form ($_GET) lalu menimpanya ($_POST) + UPDATE.
  • Delete: Mengeklik link tautan ($_GET) + DELETE.

Namun sadarkah Anda akan satu celah keamanan terbesar dalam web kita saat ini? Siapapun pengunjung yang iseng mengetik http://localhost/proses_hapus.php?id=1 di HP/Laptop mereka, akan bisa menghapus buku kita dari jarak jauh tanpa permisi!

Tentu hal ini sangat berbahaya. Kita membutuhkan Penjaga Pintu (Satpam) yang hanya membiarkan Admin saja yang boleh melakukan eksekusi penghapusan. Pelajari cara kerja Si Satpam di materi Sistem Login dan Session.