connect_error) { die(json_encode([ 'status' => 'error', 'message' => 'Koneksi DB gagal: ' . $conn->connect_error ])); } $conn->set_charset('utf8mb4'); function bersih($str, $conn) { return $conn->real_escape_string(htmlspecialchars(strip_tags(trim($str)))); } function cekLogin() { if (!isset($_SESSION['user_id'])) { header('Location: login.php'); exit; } } function cekRole(...$roles) { if (!in_array($_SESSION['role'] ?? '', $roles)) { header('Location: index.php?error=akses_ditolak'); exit; } } function rupiah($angka) { return 'Rp ' . number_format($angka, 0, ',', '.'); } function hitungUsia($tgl) { if (!$tgl || $tgl === '0000-00-00') return '-'; $lahir = new DateTime($tgl); $sekarang = new DateTime(); return $lahir->diff($sekarang)->y . ' th'; } ?>