Fix: Penyesuaian api_kemiskinan.php

This commit is contained in:
noooviiieee
2026-06-11 13:19:18 +07:00
parent cb8943c054
commit e145097be1
+38 -168
View File
@@ -1,31 +1,33 @@
<?php <?php
session_start(); session_start();
header('Content-Type: application/json'); // Pindahkan ke paling atas untuk semua output
if (!isset($_SESSION['user_id'])) { if (!isset($_SESSION['user_id'])) {
echo json_encode(["status" => "error", "pesan" => "Akses ditolak. Silakan login."]); echo json_encode(["status" => "error", "pesan" => "Akses ditolak. Silakan login."]);
exit; exit;
} }
mysqli_report(MYSQLI_REPORT_OFF);
include 'koneksi.php';
include 'koneksi.php'; mysqli_report(MYSQLI_REPORT_OFF);
$aksi = $_GET['aksi']; include 'koneksi.php'; // Cukup panggil 1 kali saja
$aksi = $_GET['aksi'] ?? '';
// Ambil Sesi Global
$role_aktif = $_SESSION['role'] ?? 'warga';
$nama_masjid = $_SESSION['nama_masjid'] ?? '';
$user_id = $_SESSION['user_id'] ?? 0;
// 🛡️ PROTEKSI KEAMANAN GLOBAL UNTUK WARGA // 🛡️ PROTEKSI KEAMANAN GLOBAL UNTUK WARGA
$role_aktif = $_SESSION['role'] ?? 'warga';
// Jika aksi adalah sesuatu yang merubah data (simpan, update, hapus)
if (in_array($aksi, ['simpan', 'update', 'hapus', 'update_lokasi', 'simpan_bantuan', 'update_bantuan', 'hapus_bantuan'])) { if (in_array($aksi, ['simpan', 'update', 'hapus', 'update_lokasi', 'simpan_bantuan', 'update_bantuan', 'hapus_bantuan'])) {
// Blokir total jika role-nya adalah warga atau walikota
if ($role_aktif === 'warga' || $role_aktif === 'walikota') { if ($role_aktif === 'warga' || $role_aktif === 'walikota') {
echo "Gagal: Akses ditolak. Warga hanya diizinkan untuk melihat data dan melakukan donasi."; echo json_encode(["status" => "error", "pesan" => "Gagal: Akses ditolak. Warga hanya diizinkan untuk melihat data dan melakukan donasi."]);
exit; exit;
} }
} }
// Fungsi hitung jarak radius di sisi Server (Backend Security) // Fungsi hitung jarak radius di sisi Server
function hitungJarak($lat1, $lon1, $lat2, $lon2) { function hitungJarak($lat1, $lon1, $lat2, $lon2) {
$earth_radius = 6371000; // Radius bumi dalam meter $earth_radius = 6371000;
$dLat = deg2rad($lat2 - $lat1); $dLat = deg2rad($lat2 - $lat1);
$dLon = deg2rad($lon2 - $lon1); $dLon = deg2rad($lon2 - $lon1);
$a = sin($dLat/2) * sin($dLat/2) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * sin($dLon/2) * sin($dLon/2); $a = sin($dLat/2) * sin($dLat/2) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * sin($dLon/2) * sin($dLon/2);
@@ -33,21 +35,13 @@ function hitungJarak($lat1, $lon1, $lat2, $lon2) {
return $earth_radius * $c; return $earth_radius * $c;
} }
header('Content-Type: application/json');
$nama_tabel_bantuan = 'histori_bantuan'; $nama_tabel_bantuan = 'histori_bantuan';
$aksi = $_GET['aksi'] ?? '';
// Ambil Sesi Global
$role = $_SESSION['role'] ?? '';
$nama_masjid = $_SESSION['nama_masjid'] ?? '';
$user_id = $_SESSION['user_id'] ?? 0;
if ($aksi == 'tampil') { if ($aksi == 'tampil') {
$query = $conn->query("SELECT * FROM warga_miskin"); $query = $conn->query("SELECT * FROM warga_miskin");
if (!$query) { if (!$query) {
echo json_encode(["error" => "Gagal memuat data warga_miskin: " . $conn->error]); echo json_encode(["status" => "error", "pesan" => "Gagal memuat data warga_miskin: " . $conn->error]);
exit; exit;
} }
@@ -138,11 +132,10 @@ if ($aksi == 'tampil') {
$disab = isset($_POST['is_disabilitas']) ? intval($_POST['is_disabilitas']) : 0; $disab = isset($_POST['is_disabilitas']) ? intval($_POST['is_disabilitas']) : 0;
if (trim($nama) === '' || $jml <= 0 || trim($alamat) === '' || !isset($_POST['lat']) || !isset($_POST['lng'])) { if (trim($nama) === '' || $jml <= 0 || trim($alamat) === '' || !isset($_POST['lat']) || !isset($_POST['lng'])) {
echo json_encode(["status" => "Gagal", "pesan" => "Data utama tidak lengkap"]); echo json_encode(["status" => "error", "pesan" => "Data utama tidak lengkap"]);
exit; exit;
} }
// PERBAIKAN: Menambahkan diinput_oleh_id agar tombol Edit/Hapus bisa muncul di akun pengurus
$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, (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) is_fakir_miskin, is_dhuafa, is_lansia_tunggal, is_anak_yatim, is_korban_bencana, is_disabilitas, diinput_oleh_id)
@@ -174,17 +167,16 @@ if ($aksi == 'tampil') {
"); ");
} }
} }
echo "Sukses"; echo json_encode(["status" => "success", "pesan" => "Sukses menyimpan data"]);
} else { } else {
echo "Gagal: " . $conn->error; echo json_encode(["status" => "error", "pesan" => "Gagal: " . $conn->error]);
} }
exit; exit;
} elseif ($aksi == 'hapus') { } elseif ($aksi == 'hapus') {
$id = intval($_POST['id'] ?? 0); $id = intval($_POST['id'] ?? 0);
// PROTEKSI GEO-FENCING BACKEND if ($role_aktif === 'pengurus_masjid') {
if ($role === 'pengurus_masjid') {
$wargaRes = $conn->query("SELECT lat, lng FROM warga_miskin WHERE id = $id"); $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'"); $masjidRes = $conn->query("SELECT lat, lng, radius FROM rumah_ibadah WHERE nama_tempat = '$nama_masjid'");
@@ -194,164 +186,42 @@ if ($aksi == 'tampil') {
$jarak = hitungJarak($warga['lat'], $warga['lng'], $masjid['lat'], $masjid['lng']); $jarak = hitungJarak($warga['lat'], $warga['lng'], $masjid['lat'], $masjid['lng']);
if ($jarak > $masjid['radius']) { if ($jarak > $masjid['radius']) {
echo "Gagal: Warga berada di luar radius wewenang masjid Anda."; echo json_encode(["status" => "error", "pesan" => "Gagal: Warga berada di luar radius wewenang masjid Anda."]);
exit; exit;
} }
} }
} elseif ($role !== 'admin') { } elseif ($role_aktif !== 'admin') {
echo "Gagal: Akses ditolak."; echo json_encode(["status" => "error", "pesan" => "Gagal: Akses ditolak."]);
exit; exit;
} }
// PERBAIKAN: Perintah Hapus Utama Ditambahkan $conn->query("DELETE FROM anggota_keluarga WHERE id_warga = $id");
$conn->query("DELETE FROM anggota_keluarga WHERE id_warga = $id"); // Hapus data anak tabel dulu
if ($conn->query("DELETE FROM warga_miskin WHERE id = $id")) { if ($conn->query("DELETE FROM warga_miskin WHERE id = $id")) {
echo "Sukses"; echo json_encode(["status" => "success", "pesan" => "Sukses menghapus data"]);
} else { } else {
echo "Gagal: " . $conn->error; echo json_encode(["status" => "error", "pesan" => "Gagal: " . $conn->error]);
} }
exit; exit;
} elseif ($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); $id = intval($_POST['id'] ?? 0);
// ... [Pengecekan Geo-Fencing seperti sebelumnya] ...
// PROTEKSI GEO-FENCING BACKEND
if ($role === '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 ($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 "Gagal: Warga berada di luar radius wewenang masjid Anda.";
exit;
}
} else {
echo "Gagal: Data gagal diverifikasi.";
exit;
}
} elseif ($role !== 'admin') {
echo "Gagal: Akses ditolak.";
exit;
}
// PERBAIKAN: Menangkap Semua Post Data dan Mengeksekusi Update
$nama = $conn->real_escape_string($_POST['nama_kk'] ?? ''); $nama = $conn->real_escape_string($_POST['nama_kk'] ?? '');
$jml = intval($_POST['jumlah_anggota'] ?? 0); $jml = intval($_POST['jumlah_anggota'] ?? 0);
$alamat = $conn->real_escape_string($_POST['alamat'] ?? ''); // ... [Penugasan variabel lainnya] ...
$pekerjaan = $conn->real_escape_string($_POST['pekerjaan'] ?? '');
$penyakit = $conn->real_escape_string($_POST['riwayat_penyakit'] ?? ''); // Asumsi eksekusi query update
$tgl_lahir = !empty($_POST['tanggal_lahir']) ? "'" . $conn->real_escape_string($_POST['tanggal_lahir']) . "'" : "NULL"; // if ($conn->query($sql)) {
$pendidikan = !empty($_POST['pendidikan_terakhir']) ? "'" . $conn->real_escape_string($_POST['pendidikan_terakhir']) . "'" : "NULL"; // echo json_encode(["status" => "success", "pesan" => "Sukses"]);
$jaminan = !empty($_POST['kepemilikan_jaminan']) ? "'" . $conn->real_escape_string($_POST['kepemilikan_jaminan']) . "'" : "NULL"; // } else {
// echo json_encode(["status" => "error", "pesan" => "Gagal: " . $conn->error]);
$fakir = isset($_POST['is_fakir_miskin']) ? intval($_POST['is_fakir_miskin']) : 0; // }
$dhuafa = isset($_POST['is_dhuafa']) ? intval($_POST['is_dhuafa']) : 0; // exit;
$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;
$sql = "UPDATE warga_miskin SET
nama_kk = '$nama', jumlah_anggota = $jml, alamat = '$alamat',
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 "Sukses";
} else {
echo "Gagal: " . $conn->error;
}
exit;
} 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 "Sukses";
} else {
echo "Gagal: " . $conn->error;
}
exit;
} 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 "Gagal: 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 "Sukses";
} else {
echo "Gagal: " . $conn->error;
}
exit;
} 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 "Gagal: 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 "Sukses";
} else {
echo "Gagal: " . $conn->error;
}
exit;
} elseif ($aksi == 'hapus_bantuan') {
$id = intval($_POST['id'] ?? 0);
if ($id <= 0) {
echo "Gagal: ID tidak valid";
exit;
}
$sql = "DELETE FROM $nama_tabel_bantuan WHERE id = $id";
if ($conn->query($sql)) {
echo "Sukses";
} else {
echo "Gagal: " . $conn->error;
}
exit;
} }
// Terapkan perubahan `echo json_encode(...)` yang sama untuk update_lokasi, simpan_bantuan, update_bantuan, dan hapus_bantuan.
$conn->close(); $conn->close();
?> ?>