0"; } $stmt = $db->prepare(" SELECT pm.nik_kk, pm.nama_kk, pm.no_hp, pm.alamat, pm.rt, pm.rw, COALESCE(w.kelurahan,'–') AS kelurahan, COALESCE(w.kecamatan,'–') AS kecamatan, pm.jumlah_anggota, pm.jumlah_anak_sekolah, pm.penghasilan_bulanan, pm.sumber_penghasilan, pm.status_pekerjaan, pm.kategori_kemiskinan, pm.kondisi_rumah, pm.kepemilikan_rumah, CASE pm.punya_bpjs WHEN 1 THEN 'Ya' ELSE 'Tidak' END AS punya_bpjs, pm.jenis_bpjs, pm.lat, pm.lng, pm.status_verifikasi, COALESCE(u.nama,'–') AS nama_surveyor, DATE_FORMAT(pm.created_at,'%d/%m/%Y %H:%i') AS tgl_input, (SELECT GROUP_CONCAT(jb.kode ORDER BY jb.kode SEPARATOR ', ') FROM bantuan_penduduk bp JOIN jenis_bantuan jb ON jb.id = bp.bantuan_id WHERE bp.penduduk_id = pm.id AND bp.status='aktif') AS bantuan_diterima FROM penduduk_miskin pm LEFT JOIN wilayah w ON w.id = pm.wilayah_id LEFT JOIN users u ON u.id = pm.surveyor_id $where ORDER BY w.kelurahan, pm.nama_kk "); $stmt->execute($params); $rows = $stmt->fetchAll(); // ── Nama file ───────────────────────────────────────────── $filter = $kelurahan ? "_" . preg_replace('/\s+/', '-', $kelurahan) : ''; $filename = "data_kemiskinan{$filter}_" . date('Ymd_His') . ".csv"; // ── Output header HTTP ───────────────────────────────────── header('Content-Type: text/csv; charset=UTF-8'); header('Content-Disposition: attachment; filename="' . $filename . '"'); header('Cache-Control: no-cache, no-store, must-revalidate'); header('Pragma: no-cache'); // BOM UTF-8 agar Excel baca karakter Indonesia dengan benar echo "\xEF\xBB\xBF"; $out = fopen('php://output', 'w'); // ── Header kolom ────────────────────────────────────────── fputcsv($out, [ 'No','NIK KK','Nama KK','No HP', 'Alamat','RT','RW','Kelurahan','Kecamatan', 'Jml Anggota','Anak Sekolah', 'Penghasilan/Bln','Sumber Penghasilan','Status Pekerjaan', 'Kategori Kemiskinan','Kondisi Rumah','Kepemilikan Rumah', 'Punya BPJS','Jenis BPJS', 'Latitude','Longitude', 'Status Verifikasi','Bantuan Diterima', 'Petugas Input','Tgl Input', ], ';'); // ── Data rows ───────────────────────────────────────────── $no = 1; foreach ($rows as $r) { fputcsv($out, [ $no++, $r['nik_kk'], $r['nama_kk'], $r['no_hp'] ?? '–', $r['alamat'] ?? '–', $r['rt'] ?? '–', $r['rw'] ?? '–', $r['kelurahan'], $r['kecamatan'], $r['jumlah_anggota'], $r['jumlah_anak_sekolah'], $r['penghasilan_bulanan'] ? 'Rp ' . number_format($r['penghasilan_bulanan'],0,',','.') : '–', $r['sumber_penghasilan'] ?? '–', ucwords(str_replace('_',' ', $r['status_pekerjaan'])), $r['kategori_kemiskinan'] === 'hampir_miskin' ? 'Nyaris Miskin' : ucwords(str_replace('_',' ', $r['kategori_kemiskinan'])), ucwords(str_replace('_',' ', $r['kondisi_rumah'])), ucwords(str_replace('_',' ', $r['kepemilikan_rumah'])), $r['punya_bpjs'], strtoupper(str_replace('_',' ', $r['jenis_bpjs'])), $r['lat'], $r['lng'], ucwords(str_replace('_',' ', $r['status_verifikasi'])), $r['bantuan_diterima'] ?? 'Belum Ada', $r['nama_surveyor'], $r['tgl_input'], ], ';'); } fclose($out); exit;