prepare("DELETE FROM keluarga WHERE id=:id")->execute([':id'=>$id]); logAktivitas($pdo, (int)$_SESSION['user_id'], 'DELETE', 'keluarga', (string)$id); $msg = "Data keluarga #$id dihapus."; } catch(Exception $e) { $err = 'Gagal hapus: '.$e->getMessage(); } } // SAVE if ($canEdit && isset($_POST['save'])) { $nokk = trim($_POST['no_kk'] ?? ''); $nama = trim($_POST['nama_kk'] ?? ''); $idEdit = (int)($_POST['id_edit'] ?? 0); if (!preg_match('/^\d{16}$/', $nokk)) $err = 'No KK harus 16 digit.'; elseif (strlen($nama) < 3) $err = 'Nama KK terlalu pendek.'; else { try { $data = [ ':nokk' => $nokk, ':nama' => $nama, ':almt' => $_POST['alamat']??'' ?: null, ':kel' => $_POST['kelurahan']??'' ?: null, ':kec' => $_POST['kecamatan']??'' ?: null, ':kota' => $_POST['kota']??'' ?: null, ':lat' => $_POST['latitude']??'' ?: null, ':lng' => $_POST['longitude']??'' ?: null, ':se' => $_POST['status_ekonomi']??'rentan', ':ri' => $_POST['rumah_ibadah_id']??'' ?: null, ]; if ($idEdit) { $data[':id'] = $idEdit; $pdo->prepare("UPDATE keluarga SET no_kk=:nokk,nama_kk=:nama,alamat=:almt,kelurahan=:kel, kecamatan=:kec,kota=:kota,latitude=:lat,longitude=:lng,status_ekonomi=:se, rumah_ibadah_id=:ri WHERE id=:id")->execute($data); $msg = "Data KK $nama diperbarui."; logAktivitas($pdo, (int)$_SESSION['user_id'], 'UPDATE', 'keluarga', (string)$idEdit); } else { $pdo->prepare("INSERT INTO keluarga (no_kk,nama_kk,alamat,kelurahan,kecamatan,kota,latitude,longitude,status_ekonomi,rumah_ibadah_id) VALUES(:nokk,:nama,:almt,:kel,:kec,:kota,:lat,:lng,:se,:ri)")->execute($data); $msg = "Keluarga $nama berhasil ditambahkan."; logAktivitas($pdo, (int)$_SESSION['user_id'], 'CREATE', 'keluarga', (string)$pdo->lastInsertId()); } } catch(Exception $e) { $err = $e->getMessage(); } } } $edit = null; if (isset($_GET['edit'])) { $s = $pdo->prepare("SELECT * FROM keluarga WHERE id=:id"); $s->execute([':id'=>(int)$_GET['edit']]); $edit = $s->fetch() ?: null; } $search = trim($_GET['s'] ?? ''); $where = []; $params = []; if ($search) { $where[] = '(k.nama_kk LIKE :q OR k.no_kk LIKE :q2)'; $params[':q']='%'.$search.'%'; $params[':q2']='%'.$search.'%'; } $whereStr = $where ? 'WHERE '.implode(' AND ',$where) : ''; $rows = $pdo->prepare(" SELECT k.*, ri.nama AS nama_ri, (SELECT COUNT(*) FROM penduduk p WHERE p.id_keluarga=k.id) AS jml_anggota FROM keluarga k LEFT JOIN rumah_ibadah ri ON ri.id=k.rumah_ibadah_id $whereStr ORDER BY k.nama_kk LIMIT 300 "); $rows->execute($params); $rows = $rows->fetchAll(); $riList = $pdo->query("SELECT id,nama,jenis FROM rumah_ibadah ORDER BY nama")->fetchAll(); render_header('Keluarga (KK)'); ?>