"error","msg"=>"Nama tidak boleh kosong"]); exit; } $stmt = $conn->prepare("INSERT INTO rumah_ibadah (nama,jenis,kontak,alamat,lat,lng,radius) VALUES (?,?,?,?,?,?,?)"); $stmt->bind_param("ssssddd", $nama,$jenis,$kontak,$alamat,$lat,$lng,$radius); if ($stmt->execute()) { echo json_encode(["status"=>"success","id"=>(int)$conn->insert_id]); } else { echo json_encode(["status"=>"error","msg"=>$stmt->error]); } $stmt->close(); } // ===== PENDUDUK ===== elseif ($tipe === 'penduduk') { $nik = trim($_POST['nik'] ?? ''); $nama = trim($_POST['nama'] ?? ''); $jk = $_POST['jenis_kelamin'] ?? 'L'; $tgl_lahir = !empty($_POST['tanggal_lahir']) ? $_POST['tanggal_lahir'] : null; $status_kel = $_POST['status_keluarga'] ?? 'lainnya'; $status_kawin = $_POST['status_perkawinan'] ?? 'belum_kawin'; $alamat = $_POST['alamat'] ?? ''; $no_hp = $_POST['no_hp'] ?? ''; $pekerjaan = $_POST['pekerjaan'] ?? ''; $penghasilan = (float)($_POST['penghasilan'] ?? 0); $status_ekonomi = $_POST['status_ekonomi'] ?? 'rentan'; $pend_terakhir = $_POST['pendidikan_terakhir'] ?? 'tidak_sekolah'; $status_pend = $_POST['status_pendidikan'] ?? 'tidak_sekolah'; $lat = (float)($_POST['lat'] ?? 0); $lng = (float)($_POST['lng'] ?? 0); if (!$nik || !$nama) { echo json_encode(["status"=>"error","msg"=>"NIK dan Nama wajib diisi"]); exit; } // Cari rumah ibadah terdekat otomatis $rumah_ibadah_id = null; if ($lat && $lng) { $s = $conn->prepare("SELECT id FROM rumah_ibadah ORDER BY (6371*acos(cos(radians(?))*cos(radians(lat))*cos(radians(lng)-radians(?))+sin(radians(?))*sin(radians(lat)))) ASC LIMIT 1"); $s->bind_param("ddd", $lat, $lng, $lat); $s->execute(); $row = $s->get_result()->fetch_assoc(); $rumah_ibadah_id = $row ? (int)$row['id'] : null; $s->close(); } // INSERT — semua 16 kolom, tipe dijaga ketat // Gunakan query langsung dengan escape untuk menghindari masalah nullable $nik_e = $conn->real_escape_string($nik); $nama_e = $conn->real_escape_string($nama); $jk_e = $conn->real_escape_string($jk); $tgl_e = $tgl_lahir ? "'".$conn->real_escape_string($tgl_lahir)."'" : 'NULL'; $stkel_e = $conn->real_escape_string($status_kel); $stkaw_e = $conn->real_escape_string($status_kawin); $almt_e = $conn->real_escape_string($alamat); $hp_e = $conn->real_escape_string($no_hp); $pkrj_e = $conn->real_escape_string($pekerjaan); $ekn_e = $conn->real_escape_string($status_ekonomi); $pend_e = $conn->real_escape_string($pend_terakhir); $spnd_e = $conn->real_escape_string($status_pend); $rid_e = $rumah_ibadah_id ? (int)$rumah_ibadah_id : 'NULL'; $sql = "INSERT INTO penduduk (nik,nama,jenis_kelamin,tanggal_lahir,status_keluarga,status_perkawinan, alamat,no_hp,pekerjaan,penghasilan,status_ekonomi, pendidikan_terakhir,status_pendidikan,lat,lng,rumah_ibadah_id) VALUES ('{$nik_e}','{$nama_e}','{$jk_e}',{$tgl_e},'{$stkel_e}','{$stkaw_e}', '{$almt_e}','{$hp_e}','{$pkrj_e}',{$penghasilan},'{$ekn_e}', '{$pend_e}','{$spnd_e}',{$lat},{$lng},{$rid_e})"; $stmt = $conn; // dummy untuk cek execute if ($conn->query($sql)) { $new_id = (int)$conn->insert_id; // Log $uid = (int)($_POST['user_id'] ?? 0); if ($uid) { $l = $conn->prepare("INSERT INTO log_aktivitas (user_id,aksi,tabel,record_id,detail,ip) VALUES (?,?,?,?,?,?)"); $aksi='tambah_penduduk'; $tbl='penduduk'; $det="Tambah penduduk: $nama"; $ip=$_SERVER['REMOTE_ADDR']??''; $l->bind_param("ississ",$uid,$aksi,$tbl,$new_id,$det,$ip); $l->execute(); } echo json_encode(["status"=>"success","id"=>$new_id]); } else { echo json_encode(["status"=>"error","msg"=>$conn->error]); } } // ===== LAPORAN ===== elseif ($tipe === 'laporan') { $nama_pelapor = trim($_POST['nama_pelapor'] ?? 'Anonim') ?: 'Anonim'; $deskripsi = trim($_POST['deskripsi'] ?? ''); $urgensi = $_POST['urgensi'] ?? 'sedang'; $lat = (float)($_POST['lat'] ?? 0); $lng = (float)($_POST['lng'] ?? 0); if (!$deskripsi) { echo json_encode(["status"=>"error","msg"=>"Deskripsi wajib diisi"]); exit; } $stmt = $conn->prepare("INSERT INTO laporan (nama_pelapor,deskripsi,lat,lng,urgensi) VALUES (?,?,?,?,?)"); $stmt->bind_param("ssdds", $nama_pelapor,$deskripsi,$lat,$lng,$urgensi); if ($stmt->execute()) { echo json_encode(["status"=>"success","id"=>(int)$conn->insert_id]); } else { echo json_encode(["status"=>"error","msg"=>$stmt->error]); } $stmt->close(); } // ===== BANTUAN ===== elseif ($tipe === 'bantuan') { $pid = (int)($_POST['penduduk_id'] ?? 0); $jid = (int)($_POST['jenis_bantuan_id'] ?? 0); $src = $_POST['sumber_bantuan'] ?? ''; $tgl = $_POST['tanggal'] ?? date('Y-m-d'); $jml = (float)($_POST['jumlah'] ?? 0); $cat = $_POST['catatan'] ?? ''; $stat = $_POST['status'] ?? 'direncanakan'; $stmt = $conn->prepare("INSERT INTO histori_bantuan (penduduk_id,jenis_bantuan_id,sumber_bantuan,tanggal,jumlah,catatan,status) VALUES (?,?,?,?,?,?,?)"); $stmt->bind_param("iissdss",$pid,$jid,$src,$tgl,$jml,$cat,$stat); if ($stmt->execute()) { echo json_encode(["status"=>"success","id"=>(int)$conn->insert_id]); } else { echo json_encode(["status"=>"error","msg"=>$stmt->error]); } $stmt->close(); } // ===== KELUARGA ===== elseif ($tipe === 'keluarga') { $no_kk = trim($_POST['no_kk'] ?? ''); $alamat = $_POST['alamat'] ?? ''; $lat = (float)($_POST['lat'] ?? 0); $lng = (float)($_POST['lng'] ?? 0); if (!$no_kk) { echo json_encode(["status"=>"error","msg"=>"No. KK wajib diisi"]); exit; } $stmt = $conn->prepare("INSERT INTO keluarga (no_kk,alamat,lat,lng) VALUES (?,?,?,?)"); $stmt->bind_param("ssdd",$no_kk,$alamat,$lat,$lng); if ($stmt->execute()) { echo json_encode(["status"=>"success","id"=>(int)$conn->insert_id]); } else { echo json_encode(["status"=>"error","msg"=>$stmt->error]); } $stmt->close(); } else { http_response_code(400); echo json_encode(["status"=>"error","msg"=>"Tipe tidak dikenal: $tipe"]); }