From 1036d4f50dfbcb8c9c3c8071b14125028ad86f75 Mon Sep 17 00:00:00 2001 From: noooviiieee Date: Thu, 11 Jun 2026 13:20:43 +0700 Subject: [PATCH] Fix: Penyesuaian api_kemiskinan.php --- webgisdatakemiskinan/api_kemiskinan.php | 371 +++++++++++++++++------- 1 file changed, 262 insertions(+), 109 deletions(-) diff --git a/webgisdatakemiskinan/api_kemiskinan.php b/webgisdatakemiskinan/api_kemiskinan.php index e1fb264..ba9a694 100644 --- a/webgisdatakemiskinan/api_kemiskinan.php +++ b/webgisdatakemiskinan/api_kemiskinan.php @@ -1,31 +1,37 @@ "error", "pesan" => "Akses ditolak. Silakan login."]); exit; } -mysqli_report(MYSQLI_REPORT_OFF); -include 'koneksi.php'; // Cukup panggil 1 kali saja +mysqli_report(MYSQLI_REPORT_OFF); +include 'koneksi.php'; // FIX BUG 1: Hapus include duplikat (sebelumnya ada 2x) +// FIX BUG 2: Pindahkan header() ke ATAS sebelum output apapun +header('Content-Type: application/json'); + +// FIX BUG 3: Definisi $aksi hanya sekali, dengan null coalescing $aksi = $_GET['aksi'] ?? ''; +$nama_tabel_bantuan = 'histori_bantuan'; + // Ambil Sesi Global -$role_aktif = $_SESSION['role'] ?? 'warga'; +$role = $_SESSION['role'] ?? ''; $nama_masjid = $_SESSION['nama_masjid'] ?? ''; -$user_id = $_SESSION['user_id'] ?? 0; +$user_id = $_SESSION['user_id'] ?? 0; +$role_aktif = $role; // 🛡️ PROTEKSI KEAMANAN GLOBAL UNTUK WARGA if (in_array($aksi, ['simpan', 'update', 'hapus', 'update_lokasi', 'simpan_bantuan', 'update_bantuan', 'hapus_bantuan'])) { if ($role_aktif === 'warga' || $role_aktif === 'walikota') { - echo json_encode(["status" => "error", "pesan" => "Gagal: Akses ditolak. Warga hanya diizinkan untuk melihat data dan melakukan donasi."]); + echo json_encode(["status" => "error", "pesan" => "Akses ditolak. Warga hanya diizinkan untuk melihat data dan melakukan donasi."]); exit; } } -// Fungsi hitung jarak radius di sisi Server +// Fungsi hitung jarak radius (Haversine) function hitungJarak($lat1, $lon1, $lat2, $lon2) { $earth_radius = 6371000; $dLat = deg2rad($lat2 - $lat1); @@ -35,74 +41,77 @@ function hitungJarak($lat1, $lon1, $lat2, $lon2) { return $earth_radius * $c; } -$nama_tabel_bantuan = 'histori_bantuan'; - +// ───────────────────────────────────────── +// AKSI: tampil +// ───────────────────────────────────────── if ($aksi == 'tampil') { - $query = $conn->query("SELECT * FROM warga_miskin"); - + $query = $conn->query("SELECT * FROM warga_miskin"); if (!$query) { - echo json_encode(["status" => "error", "pesan" => "Gagal memuat data warga_miskin: " . $conn->error]); + echo json_encode(["error" => "Gagal memuat data warga_miskin: " . $conn->error]); exit; } - + $result = []; while ($row = $query->fetch_assoc()) { - $id_warga = $row['id']; - - // 1. Ambil data anggota keluarga - $query_anggota = $conn->query("SELECT * FROM anggota_keluarga WHERE id_warga = '$id_warga'"); - $anggota = []; - if ($query_anggota) { - while ($row_anggota = $query_anggota->fetch_assoc()) { - $anggota[] = $row_anggota; - } - } - $row['anggota'] = $anggota; + $id_warga = (int)$row['id']; // FIX BUG 5: Cast ke integer agar aman di query - // 2. Ambil bantuan TERAKHIR - $query_bantuan = $conn->query(" - SELECT * FROM $nama_tabel_bantuan - WHERE warga_id = '$id_warga' - ORDER BY tanggal_distribusi DESC + // Ambil anggota keluarga (FIX BUG 5: pakai prepared statement) + $stmt_anggota = $conn->prepare("SELECT * FROM anggota_keluarga WHERE id_warga = ?"); + $stmt_anggota->bind_param("i", $id_warga); + $stmt_anggota->execute(); + $anggota_result = $stmt_anggota->get_result(); + $anggota = []; + while ($row_anggota = $anggota_result->fetch_assoc()) { + $anggota[] = $row_anggota; + } + $stmt_anggota->close(); + $row['anggota'] = $anggota; + + // Ambil bantuan terakhir + $stmt_bantuan = $conn->prepare(" + SELECT * FROM $nama_tabel_bantuan + WHERE warga_id = ? + ORDER BY tanggal_distribusi DESC LIMIT 1 "); - - if ($query_bantuan && $query_bantuan->num_rows > 0) { - $bantuan_terakhir = $query_bantuan->fetch_assoc(); - - $tgl_bantuan = new DateTime($bantuan_terakhir['tanggal_distribusi']); + $stmt_bantuan->bind_param("i", $id_warga); + $stmt_bantuan->execute(); + $bantuan_result = $stmt_bantuan->get_result(); + $stmt_bantuan->close(); + + if ($bantuan_result && $bantuan_result->num_rows > 0) { + $bantuan_terakhir = $bantuan_result->fetch_assoc(); + $tgl_bantuan = new DateTime($bantuan_terakhir['tanggal_distribusi']); $tgl_sekarang = new DateTime(); - $interval = $tgl_sekarang->diff($tgl_bantuan); - + $interval = $tgl_sekarang->diff($tgl_bantuan); $selisih_bulan = ($interval->y * 12) + $interval->m; $sumber = $bantuan_terakhir['nama_penyalur'] ?: 'Rumah Ibadah'; - - if ($selisih_bulan == 0) { - $row['status_bantuan'] = "Warga ini baru saja menerima bantuan bulan ini dari " . $sumber; - } else { - $row['status_bantuan'] = "Warga ini terakhir menerima bantuan " . $selisih_bulan . " bulan lalu dari " . $sumber; - } + + $row['status_bantuan'] = $selisih_bulan == 0 + ? "Warga ini baru saja menerima bantuan bulan ini dari " . $sumber + : "Warga ini terakhir menerima bantuan " . $selisih_bulan . " bulan lalu dari " . $sumber; } else { $row['status_bantuan'] = "Warga ini belum pernah menerima bantuan."; } - + $result[] = $row; } - echo json_encode($result); exit; +// ───────────────────────────────────────── +// AKSI: tampil_bantuan +// ───────────────────────────────────────── } elseif ($aksi == 'tampil_bantuan') { $query = $conn->query(" - SELECT + SELECT h.id, h.warga_id, h.tanggal_distribusi AS tanggal, h.nama_penyalur AS sumber_bantuan, IF(h.catatan IS NOT NULL AND h.catatan != '', h.catatan, 'Bantuan Sosial') AS jenis_bantuan, - w.nama_kk, w.lat, w.lng + w.nama_kk, w.lat, w.lng FROM $nama_tabel_bantuan h JOIN warga_miskin w ON h.warga_id = w.id ORDER BY h.tanggal_distribusi DESC "); - $bantuan = []; if ($query) { while ($row = $query->fetch_assoc()) { $bantuan[] = $row; } @@ -110,54 +119,57 @@ if ($aksi == 'tampil') { echo json_encode($bantuan); exit; +// ───────────────────────────────────────── +// AKSI: simpan +// ───────────────────────────────────────── } elseif ($aksi == 'simpan') { - $nama = $conn->real_escape_string($_POST['nama_kk'] ?? ''); - $jml = intval($_POST['jumlah_anggota'] ?? 0); - $alamat = $conn->real_escape_string($_POST['alamat'] ?? ''); - $lat = floatval($_POST['lat'] ?? 0); - $lng = floatval($_POST['lng'] ?? 0); + $nama = $conn->real_escape_string($_POST['nama_kk'] ?? ''); + $jml = intval($_POST['jumlah_anggota'] ?? 0); + $alamat = $conn->real_escape_string($_POST['alamat'] ?? ''); + $lat = floatval($_POST['lat'] ?? 0); + $lng = floatval($_POST['lng'] ?? 0); - $pekerjaan = $conn->real_escape_string($_POST['pekerjaan'] ?? ''); - $penyakit = $conn->real_escape_string($_POST['riwayat_penyakit'] ?? ''); - - $tgl_lahir = !empty($_POST['tanggal_lahir']) ? "'" . $conn->real_escape_string($_POST['tanggal_lahir']) . "'" : "NULL"; - $pendidikan = !empty($_POST['pendidikan_terakhir']) ? "'" . $conn->real_escape_string($_POST['pendidikan_terakhir']) . "'" : "NULL"; - $jaminan = !empty($_POST['kepemilikan_jaminan']) ? "'" . $conn->real_escape_string($_POST['kepemilikan_jaminan']) . "'" : "NULL"; + $pekerjaan = $conn->real_escape_string($_POST['pekerjaan'] ?? ''); + $penyakit = $conn->real_escape_string($_POST['riwayat_penyakit'] ?? ''); - $fakir = isset($_POST['is_fakir_miskin']) ? intval($_POST['is_fakir_miskin']) : 0; - $dhuafa = isset($_POST['is_dhuafa']) ? intval($_POST['is_dhuafa']) : 0; - $lansia = isset($_POST['is_lansia_tunggal']) ? intval($_POST['is_lansia_tunggal']) : 0; - $yatim = isset($_POST['is_anak_yatim']) ? intval($_POST['is_anak_yatim']) : 0; - $bencana = isset($_POST['is_korban_bencana']) ? intval($_POST['is_korban_bencana']) : 0; - $disab = isset($_POST['is_disabilitas']) ? intval($_POST['is_disabilitas']) : 0; + $tgl_lahir = !empty($_POST['tanggal_lahir']) ? "'" . $conn->real_escape_string($_POST['tanggal_lahir']) . "'" : "NULL"; + $pendidikan = !empty($_POST['pendidikan_terakhir']) ? "'" . $conn->real_escape_string($_POST['pendidikan_terakhir']) . "'" : "NULL"; + $jaminan = !empty($_POST['kepemilikan_jaminan']) ? "'" . $conn->real_escape_string($_POST['kepemilikan_jaminan']) . "'" : "NULL"; + + $fakir = isset($_POST['is_fakir_miskin']) ? intval($_POST['is_fakir_miskin']) : 0; + $dhuafa = isset($_POST['is_dhuafa']) ? intval($_POST['is_dhuafa']) : 0; + $lansia = isset($_POST['is_lansia_tunggal']) ? intval($_POST['is_lansia_tunggal']) : 0; + $yatim = isset($_POST['is_anak_yatim']) ? intval($_POST['is_anak_yatim']) : 0; + $bencana = isset($_POST['is_korban_bencana']) ? intval($_POST['is_korban_bencana']) : 0; + $disab = isset($_POST['is_disabilitas']) ? intval($_POST['is_disabilitas']) : 0; if (trim($nama) === '' || $jml <= 0 || trim($alamat) === '' || !isset($_POST['lat']) || !isset($_POST['lng'])) { - echo json_encode(["status" => "error", "pesan" => "Data utama tidak lengkap"]); + echo json_encode(["status" => "Gagal", "pesan" => "Data utama tidak lengkap"]); exit; } - $sql = "INSERT INTO warga_miskin + $sql = "INSERT INTO warga_miskin (nama_kk, jumlah_anggota, alamat, lat, lng, tanggal_lahir, pendidikan_terakhir, pekerjaan, riwayat_penyakit, kepemilikan_jaminan, - is_fakir_miskin, is_dhuafa, is_lansia_tunggal, is_anak_yatim, is_korban_bencana, is_disabilitas, diinput_oleh_id) - VALUES + is_fakir_miskin, is_dhuafa, is_lansia_tunggal, is_anak_yatim, is_korban_bencana, is_disabilitas, diinput_oleh_id) + VALUES ('$nama', $jml, '$alamat', $lat, $lng, $tgl_lahir, $pendidikan, '$pekerjaan', '$penyakit', $jaminan, $fakir, $dhuafa, $lansia, $yatim, $bencana, $disab, $user_id)"; - + if ($conn->query($sql)) { - $id_warga = $conn->insert_id; + $id_warga = $conn->insert_id; $anggota_json = $_POST['anggota'] ?? '[]'; $anggota_list = json_decode($anggota_json, true); if (!empty($anggota_list) && is_array($anggota_list)) { foreach ($anggota_list as $an) { - $an_nama = $conn->real_escape_string($an['nama'] ?? ''); - $an_hub = $conn->real_escape_string($an['hubungan_kk'] ?? ''); - $an_jk = !empty($an['jenis_kelamin']) ? "'" . $conn->real_escape_string($an['jenis_kelamin']) . "'" : 'NULL'; - $an_tgl = !empty($an['tanggal_lahir']) ? "'" . $conn->real_escape_string($an['tanggal_lahir']) . "'" : 'NULL'; - $an_pend = !empty($an['pendidikan_terakhir']) ? "'" . $conn->real_escape_string($an['pendidikan_terakhir']) . "'" : 'NULL'; - $an_kerja = $conn->real_escape_string($an['pekerjaan'] ?? ''); - $an_sakit = $conn->real_escape_string($an['riwayat_penyakit'] ?? ''); - $an_jamin = !empty($an['kepemilikan_jaminan']) ? "'" . $conn->real_escape_string($an['kepemilikan_jaminan']) . "'" : 'NULL'; + $an_nama = $conn->real_escape_string($an['nama'] ?? ''); + $an_hub = $conn->real_escape_string($an['hubungan_kk'] ?? ''); + $an_jk = !empty($an['jenis_kelamin']) ? "'" . $conn->real_escape_string($an['jenis_kelamin']) . "'" : 'NULL'; + $an_tgl = !empty($an['tanggal_lahir']) ? "'" . $conn->real_escape_string($an['tanggal_lahir']) . "'" : 'NULL'; + $an_pend = !empty($an['pendidikan_terakhir']) ? "'" . $conn->real_escape_string($an['pendidikan_terakhir']) . "'" : 'NULL'; + $an_kerja = $conn->real_escape_string($an['pekerjaan'] ?? ''); + $an_sakit = $conn->real_escape_string($an['riwayat_penyakit'] ?? ''); + $an_jamin = !empty($an['kepemilikan_jaminan']) ? "'" . $conn->real_escape_string($an['kepemilikan_jaminan']) . "'" : 'NULL'; $conn->query(" INSERT INTO anggota_keluarga @@ -167,61 +179,202 @@ if ($aksi == 'tampil') { "); } } - echo json_encode(["status" => "success", "pesan" => "Sukses menyimpan data"]); + echo json_encode(["status" => "Sukses"]); } else { - echo json_encode(["status" => "error", "pesan" => "Gagal: " . $conn->error]); + echo json_encode(["status" => "Gagal", "pesan" => $conn->error]); } exit; +// ───────────────────────────────────────── +// AKSI: hapus +// ───────────────────────────────────────── } elseif ($aksi == 'hapus') { $id = intval($_POST['id'] ?? 0); - if ($role_aktif === 'pengurus_masjid') { - $wargaRes = $conn->query("SELECT lat, lng FROM warga_miskin WHERE id = $id"); - $masjidRes = $conn->query("SELECT lat, lng, radius FROM rumah_ibadah WHERE nama_tempat = '$nama_masjid'"); + if ($role === 'pengurus_masjid') { + $nama_masjid_esc = $conn->real_escape_string($nama_masjid); + $wargaRes = $conn->query("SELECT lat, lng FROM warga_miskin WHERE id = $id"); + $masjidRes = $conn->query("SELECT lat, lng, radius FROM rumah_ibadah WHERE nama_tempat = '$nama_masjid_esc'"); if ($wargaRes && $masjidRes && $wargaRes->num_rows > 0 && $masjidRes->num_rows > 0) { - $warga = $wargaRes->fetch_assoc(); + $warga = $wargaRes->fetch_assoc(); $masjid = $masjidRes->fetch_assoc(); - - $jarak = hitungJarak($warga['lat'], $warga['lng'], $masjid['lat'], $masjid['lng']); + $jarak = hitungJarak($warga['lat'], $warga['lng'], $masjid['lat'], $masjid['lng']); if ($jarak > $masjid['radius']) { - echo json_encode(["status" => "error", "pesan" => "Gagal: Warga berada di luar radius wewenang masjid Anda."]); + echo json_encode(["status" => "Gagal", "pesan" => "Warga berada di luar radius wewenang masjid Anda."]); exit; } } - } elseif ($role_aktif !== 'admin') { - echo json_encode(["status" => "error", "pesan" => "Gagal: Akses ditolak."]); + } elseif ($role !== 'admin') { + echo json_encode(["status" => "Gagal", "pesan" => "Akses ditolak."]); exit; } - - $conn->query("DELETE FROM anggota_keluarga WHERE id_warga = $id"); + + $conn->query("DELETE FROM anggota_keluarga WHERE id_warga = $id"); if ($conn->query("DELETE FROM warga_miskin WHERE id = $id")) { - echo json_encode(["status" => "success", "pesan" => "Sukses menghapus data"]); + echo json_encode(["status" => "Sukses"]); } else { - echo json_encode(["status" => "error", "pesan" => "Gagal: " . $conn->error]); + echo json_encode(["status" => "Gagal", "pesan" => $conn->error]); } exit; +// ───────────────────────────────────────── +// AKSI: update +// ───────────────────────────────────────── } elseif ($aksi == 'update') { - // ... (kode update lainnya mengikuti pola yang sama) - // Singkat cerita, gunakan json_encode untuk balasan status $id = intval($_POST['id'] ?? 0); - // ... [Pengecekan Geo-Fencing seperti sebelumnya] ... - $nama = $conn->real_escape_string($_POST['nama_kk'] ?? ''); - $jml = intval($_POST['jumlah_anggota'] ?? 0); - // ... [Penugasan variabel lainnya] ... - - // Asumsi eksekusi query update - // if ($conn->query($sql)) { - // echo json_encode(["status" => "success", "pesan" => "Sukses"]); - // } else { - // echo json_encode(["status" => "error", "pesan" => "Gagal: " . $conn->error]); - // } - // exit; + if ($role === 'pengurus_masjid') { + $nama_masjid_esc = $conn->real_escape_string($nama_masjid); + $wargaRes = $conn->query("SELECT lat, lng FROM warga_miskin WHERE id = $id"); + $masjidRes = $conn->query("SELECT lat, lng, radius FROM rumah_ibadah WHERE nama_tempat = '$nama_masjid_esc'"); + + if ($wargaRes && $masjidRes && $wargaRes->num_rows > 0 && $masjidRes->num_rows > 0) { + $warga = $wargaRes->fetch_assoc(); + $masjid = $masjidRes->fetch_assoc(); + $jarak = hitungJarak($warga['lat'], $warga['lng'], $masjid['lat'], $masjid['lng']); + if ($jarak > $masjid['radius']) { + echo json_encode(["status" => "Gagal", "pesan" => "Warga berada di luar radius wewenang masjid Anda."]); + exit; + } + } else { + echo json_encode(["status" => "Gagal", "pesan" => "Data gagal diverifikasi."]); + exit; + } + } elseif ($role !== 'admin') { + echo json_encode(["status" => "Gagal", "pesan" => "Akses ditolak."]); + exit; + } + + $nama = $conn->real_escape_string($_POST['nama_kk'] ?? ''); + $jml = intval($_POST['jumlah_anggota'] ?? 0); + $alamat = $conn->real_escape_string($_POST['alamat'] ?? ''); + $pekerjaan = $conn->real_escape_string($_POST['pekerjaan'] ?? ''); + $penyakit = $conn->real_escape_string($_POST['riwayat_penyakit'] ?? ''); + // FIX BUG 4: Tambahkan lat & lng agar lokasi ikut terupdate + $lat = floatval($_POST['lat'] ?? 0); + $lng = floatval($_POST['lng'] ?? 0); + + $tgl_lahir = !empty($_POST['tanggal_lahir']) ? "'" . $conn->real_escape_string($_POST['tanggal_lahir']) . "'" : "NULL"; + $pendidikan = !empty($_POST['pendidikan_terakhir']) ? "'" . $conn->real_escape_string($_POST['pendidikan_terakhir']) . "'" : "NULL"; + $jaminan = !empty($_POST['kepemilikan_jaminan']) ? "'" . $conn->real_escape_string($_POST['kepemilikan_jaminan']) . "'" : "NULL"; + + $fakir = isset($_POST['is_fakir_miskin']) ? intval($_POST['is_fakir_miskin']) : 0; + $dhuafa = isset($_POST['is_dhuafa']) ? intval($_POST['is_dhuafa']) : 0; + $lansia = isset($_POST['is_lansia_tunggal']) ? intval($_POST['is_lansia_tunggal']) : 0; + $yatim = isset($_POST['is_anak_yatim']) ? intval($_POST['is_anak_yatim']) : 0; + $bencana = isset($_POST['is_korban_bencana']) ? intval($_POST['is_korban_bencana']) : 0; + $disab = isset($_POST['is_disabilitas']) ? intval($_POST['is_disabilitas']) : 0; + + // FIX BUG 4: lat dan lng sekarang ikut di-UPDATE + $sql = "UPDATE warga_miskin SET + nama_kk = '$nama', jumlah_anggota = $jml, alamat = '$alamat', + lat = $lat, lng = $lng, + tanggal_lahir = $tgl_lahir, pendidikan_terakhir = $pendidikan, pekerjaan = '$pekerjaan', + riwayat_penyakit = '$penyakit', kepemilikan_jaminan = $jaminan, + is_fakir_miskin = $fakir, is_dhuafa = $dhuafa, is_lansia_tunggal = $lansia, + is_anak_yatim = $yatim, is_korban_bencana = $bencana, is_disabilitas = $disab + WHERE id = $id"; + + if ($conn->query($sql)) { + echo json_encode(["status" => "Sukses"]); + } else { + echo json_encode(["status" => "Gagal", "pesan" => $conn->error]); + } + exit; + +// ───────────────────────────────────────── +// AKSI: update_lokasi +// ───────────────────────────────────────── +} elseif ($aksi == 'update_lokasi') { + $id = intval($_POST['id'] ?? 0); + $lat = floatval($_POST['lat'] ?? 0); + $lng = floatval($_POST['lng'] ?? 0); + + if ($conn->query("UPDATE warga_miskin SET lat=$lat, lng=$lng WHERE id=$id")) { + echo json_encode(["status" => "Sukses"]); + } else { + echo json_encode(["status" => "Gagal", "pesan" => $conn->error]); + } + exit; + +// ───────────────────────────────────────── +// AKSI: simpan_bantuan +// ───────────────────────────────────────── +} elseif ($aksi == 'simpan_bantuan') { + $warga_id = intval($_POST['warga_id'] ?? 0); + $jenis_id = intval($_POST['jenis_id'] ?? 0); + $tgl = $conn->real_escape_string($_POST['tanggal_distribusi'] ?? ''); + $penyalur = $conn->real_escape_string($_POST['nama_penyalur'] ?? ''); + $deskripsi = $conn->real_escape_string($_POST['deskripsi_bantuan'] ?? ''); + $catatan = $conn->real_escape_string($_POST['catatan'] ?? ''); + + if ($warga_id <= 0 || $jenis_id <= 0 || $tgl == '' || $penyalur == '' || $deskripsi == '') { + echo json_encode(["status" => "Gagal", "pesan" => "Data tidak lengkap"]); + exit; + } + + $sql = "INSERT INTO $nama_tabel_bantuan + (warga_id, jenis_id, tanggal_distribusi, nama_penyalur, jumlah, satuan_custom, catatan) + VALUES + ($warga_id, $jenis_id, '$tgl', '$penyalur', 1, '$deskripsi', '$catatan')"; + + if ($conn->query($sql)) { + echo json_encode(["status" => "Sukses"]); + } else { + echo json_encode(["status" => "Gagal", "pesan" => $conn->error]); + } + exit; + +// ───────────────────────────────────────── +// AKSI: update_bantuan +// ───────────────────────────────────────── +} elseif ($aksi == 'update_bantuan') { + $id = intval($_POST['id'] ?? 0); + $jenis_id = intval($_POST['jenis_id'] ?? 0); + $tgl = $conn->real_escape_string($_POST['tanggal_distribusi'] ?? ''); + $penyalur = $conn->real_escape_string($_POST['nama_penyalur'] ?? ''); + $deskripsi = $conn->real_escape_string($_POST['deskripsi_bantuan'] ?? ''); + $catatan = $conn->real_escape_string($_POST['catatan'] ?? ''); + + if ($id <= 0 || $jenis_id <= 0 || $tgl == '' || $penyalur == '' || $deskripsi == '') { + echo json_encode(["status" => "Gagal", "pesan" => "Data tidak lengkap"]); + exit; + } + + $sql = "UPDATE $nama_tabel_bantuan SET + jenis_id = $jenis_id, + tanggal_distribusi = '$tgl', + nama_penyalur = '$penyalur', + satuan_custom = '$deskripsi', + catatan = '$catatan' + WHERE id = $id"; + + if ($conn->query($sql)) { + echo json_encode(["status" => "Sukses"]); + } else { + echo json_encode(["status" => "Gagal", "pesan" => $conn->error]); + } + exit; + +// ───────────────────────────────────────── +// AKSI: hapus_bantuan +// ───────────────────────────────────────── +} elseif ($aksi == 'hapus_bantuan') { + $id = intval($_POST['id'] ?? 0); + + if ($id <= 0) { + echo json_encode(["status" => "Gagal", "pesan" => "ID tidak valid"]); + exit; + } + + if ($conn->query("DELETE FROM $nama_tabel_bantuan WHERE id = $id")) { + echo json_encode(["status" => "Sukses"]); + } else { + echo json_encode(["status" => "Gagal", "pesan" => $conn->error]); + } + exit; } -// Terapkan perubahan `echo json_encode(...)` yang sama untuk update_lokasi, simpan_bantuan, update_bantuan, dan hapus_bantuan. $conn->close(); ?> \ No newline at end of file