Minggu, 21 Desember 2025

Edit oop

Siap 👍
Kita lanjut UPDATE DATA BUKU versi OOP yang BENAR, RAPI, dan AMAN, pelan-pelan tanpa lompat.
Aku bagi bertahap supaya nyambung dengan struktur yang sudah kamu pakai.
🔷 TARGET AKHIR
Klik Edit
Form terbuka (enable)
Submit
Data ter-UPDATE ke database
Semua via OOP + prepared statement
1️⃣ TAMBAHKAN METHOD update() DI MODEL Buku.php
📌 Model = hanya urusan database
models/Buku.php
Salin kode
Php
public function update($id, $judul, $pengarang, $penerbit, $tahunterbit)
{
    $query = "UPDATE buku 
              SET judul = ?, pengarang = ?, penerbit = ?, tahunterbit = ?
              WHERE id = ?";

    $stmt = mysqli_prepare($this->conn, $query);

    mysqli_stmt_bind_param(
        $stmt,
        "ssssi",
        $judul,
        $pengarang,
        $penerbit,
        $tahunterbit,
        $id
    );

    return mysqli_stmt_execute($stmt);
}
🔍 Penjelasan pelan-pelan
Bagian
Makna
ssssi
string, string, string, string, integer
?
placeholder (anti SQL Injection)
return true/false
tanda update sukses/gagal
2️⃣ FILE EDIT FORM (CONTROLLER + VIEW)
editBuku.php
Salin kode
Php
require_once 'config/database.php';
require_once 'models/Buku.php';

$db = new Database();
$conn = $db->connect();
$buku = new Buku($conn);
3️⃣ AMBIL DATA BERDASARKAN ID
Tambahkan method getById() di model:
Salin kode
Php
public function getById($id)
{
    $query = "SELECT * FROM buku WHERE id = ?";
    $stmt = mysqli_prepare($this->conn, $query);
    mysqli_stmt_bind_param($stmt, "i", $id);
    mysqli_stmt_execute($stmt);

    mysqli_stmt_bind_result(
        $stmt,
        $id,
        $judul,
        $pengarang,
        $penerbit,
        $tahunterbit
    );

    mysqli_stmt_fetch($stmt);

    return [
        'id' => $id,
        'judul' => $judul,
        'pengarang' => $pengarang,
        'penerbit' => $penerbit,
        'tahunterbit' => $tahunterbit
    ];
}
4️⃣ LOAD DATA KE FORM
Salin kode
Php
$data = $buku->getById($_GET['id']);
5️⃣ FORM (AWALNYA READONLY)
Salin kode
Html
<form method="post">
    <input type="hidden" name="id" value="<?= $data['id']; ?>">

    <input type="text" name="judul" value="<?= $data['judul']; ?>" readonly>
    <input type="text" name="pengarang" value="<?= $data['pengarang']; ?>" readonly>
    <input type="text" name="penerbit" value="<?= $data['penerbit']; ?>" readonly>
    <input type="number" name="tahunterbit" value="<?= $data['tahunterbit']; ?>" readonly>

    <button type="button" onclick="enableForm()">Edit</button>
    <button type="submit" name="update">Update</button>
</form>
6️⃣ JAVASCRIPT (BUKA FORM)
Salin kode
Html
<script>
function enableForm() {
    document.querySelectorAll("input").forEach(el => {
        el.removeAttribute("readonly");
    });
}
</script>
📌 Ini solusi dari masalah kamu sebelumnya
➡️ tombol edit PASTI membuka field
7️⃣ PROSES UPDATE (CONTROLLER)
Tambahkan di bawah:
Salin kode
Php
if (isset($_POST['update'])) {
    $buku->update(
        $_POST['id'],
        $_POST['judul'],
        $_POST['pengarang'],
        $_POST['penerbit'],
        $_POST['tahunterbit']
    );

    header("Location: tampilBuku.php");
}
8️⃣ FLOW YANG TERJADI (PAHAMIN INI)
Salin kode
Text
Klik Edit
JS buka readonly
Klik Update
POST dikirim
Controller panggil Model
Prepared UPDATE
Redirect
9️⃣ KESALAHAN UMUM (JANGAN DILAKUKAN)
❌ Query di file HTML
❌ mysqli_query di view
❌ JS dicampur PHP
❌ Input langsung tanpa prepared
🔥 NEXT STEP (TINGGAL PILIH)
1️⃣ DELETE OOP (aman)
2️⃣ Validasi form (OOP)
3️⃣ AdminLTE integration (benar)
4️⃣ MVC mini ala Laravel
Balas saja:
LANJUT DELETE OOP

0 komentar:

Posting Komentar

 
Design by Free WordPress Themes | Bloggerized by Lasantha - Premium Blogger Themes | Press Release Distribution