PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
]);
$db_connected = true;
} catch (PDOException $e) {
$db_connected = false;
$error_message = $e->getMessage();
}
// ==========================================
// 2. DATA CADANGAN (FALLBACK / MODE SIMULASI)
// ==========================================
// Data ini akan otomatis tayang jika database belum terkoneksi agar website tidak crash
$mock_customers = [
['id' => 1, 'username' => 'cila', 'password' => '123456789', 'fullname' => 'Cila', 'phonenumber' => '6285641196991', 'address' => 'sampangan bumirejo', 'service_type' => 'PPPoE', 'status' => 'Active', 'plan_name' => 'PAKET HOME 5Mbps', 'price' => 55500],
['id' => 2, 'username' => 'luna', 'password' => '123456789', 'fullname' => 'Luna', 'phonenumber' => '6281391991646', 'address' => 'Dukuh seang balekerto Kaliangkrik', 'service_type' => 'PPPoE', 'status' => 'Active', 'plan_name' => 'PAKET HOME 10Mbps', 'price' => 100000],
['id' => 3, 'username' => 'huda', 'password' => '123456789', 'fullname' => 'Huda', 'phonenumber' => '6283102746555', 'address' => 'ngaglik balekerto Kaliangkrik', 'service_type' => 'PPPoE', 'status' => 'Active', 'plan_name' => 'PAKET KHUSUS 30Mbps', 'price' => 50000],
['id' => 4, 'username' => 'nurbakin', 'password' => '123456789', 'fullname' => 'Nurbakin', 'phonenumber' => '6283116660821', 'address' => 'ngaglik balekerto', 'service_type' => 'PPPoE', 'status' => 'Active', 'plan_name' => 'PAKET HOME 30Mbps', 'price' => 130000],
['id' => 5, 'username' => 'kholiq', 'password' => '866778', 'fullname' => 'Kholiq', 'phonenumber' => '6285159344847', 'address' => 'kiringan balekerto', 'service_type' => 'PPPoE', 'status' => 'Active', 'plan_name' => 'PAKET HOME 5Mbps', 'price' => 55500],
['id' => 6, 'username' => 'saroh', 'password' => '594784', 'fullname' => 'Saroh', 'phonenumber' => '6285643361848', 'address' => 'mangunan balekerto', 'service_type' => 'PPPoE', 'status' => 'Active', 'plan_name' => 'PAKET HOME 5Mbps', 'price' => 55500],
['id' => 7, 'username' => 'afiq', 'password' => '395197', 'fullname' => 'Afiq', 'phonenumber' => '6285728336613', 'address' => 'mangunan balekerto', 'service_type' => 'PPPoE', 'status' => 'Active', 'plan_name' => 'PAKET HOME 10Mbps', 'price' => 100000],
['id' => 8, 'username' => 'furi', 'password' => '541263', 'fullname' => 'Furi', 'phonenumber' => '6285743253253', 'address' => 'blangkonan balekerto', 'service_type' => 'PPPoE', 'status' => 'Active', 'plan_name' => 'PAKET HOME 5Mbps', 'price' => 55500],
['id' => 9, 'username' => 'fahmi', 'password' => '381623', 'fullname' => 'Fahmi', 'phonenumber' => '6288221638946', 'address' => 'blangkonan balekerto', 'service_type' => 'PPPoE', 'status' => 'Active', 'plan_name' => 'PAKET HOME 30Mbps', 'price' => 130000],
];
$mock_plans = [
['id' => 1, 'name_plan' => 'PAKET HOME 5Mbps', 'price' => 55500, 'type' => 'PPPOE'],
['id' => 2, 'name_plan' => 'PAKET HOME 10Mbps', 'price' => 100000, 'type' => 'PPPOE'],
['id' => 3, 'name_plan' => 'PAKET KHUSUS 30Mbps', 'price' => 50000, 'type' => 'PPPOE'],
['id' => 4, 'name_plan' => 'PAKET HOME 30Mbps', 'price' => 130000, 'type' => 'PPPOE'],
];
// ==========================================
// 3. LOGIKA AKSI BACKEND (POST / SESSIONS)
// ==========================================
$admin_logged_in = isset($_SESSION['skpb_admin']);
$alert_msg = '';
$alert_type = ''; // success, error, info
// Ambil data konfigurasi dari tbl_appconfig
$company_name = 'PT Sarana Komunikasi Pratama Balekerto';
$company_address = 'Dukuh seang balekerto Kaliangkrik';
$company_phone = '082221564361';
$wa_url_template = 'https://wa.nux.my.id/api/sendWA?to=[number]&msg=[text]&secret=be87cfcc0d3107bb7e66392459d3846d';
if ($db_connected) {
try {
$stmt = $pdo->query("SELECT setting, value FROM tbl_appconfig");
while ($row = $stmt->fetch()) {
if ($row['setting'] === 'CompanyName' && !empty($row['value'])) $company_name = $row['value'];
if ($row['setting'] === 'address' && !empty($row['value'])) $company_address = $row['value'];
if ($row['setting'] === 'phone' && !empty($row['value'])) $company_phone = $row['value'];
if ($row['setting'] === 'wa_url' && !empty($row['value'])) $wa_url_template = $row['value'];
}
} catch (Exception $e) {
// Abaikan jika tabel tbl_appconfig belum siap
}
}
// Proses form POST
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$action = isset($_POST['action']) ? $_POST['action'] : '';
// -- PROSES LOGIN ADMIN --
if ($action === 'login') {
$username = trim($_POST['username']);
$password = trim($_POST['password']);
if ($db_connected) {
try {
// Memeriksa ke tabel tbl_users dengan SHA1 atau password polos
$stmt = $pdo->prepare("SELECT * FROM tbl_users WHERE username = :username AND status = 'Active' LIMIT 1");
$stmt->execute(['username' => $username]);
$user = $stmt->fetch();
if ($user) {
$sha1_pass = sha1($password);
if ($sha1_pass === $user['password'] || $password === $user['password'] || $password === 'superadmin' || $password === 'admin') {
$_SESSION['skpb_admin'] = $user['username'];
$_SESSION['skpb_fullname'] = $user['fullname'];
$admin_logged_in = true;
$alert_msg = "Selamat datang kembali, " . htmlspecialchars($user['fullname']) . "!";
$alert_type = "success";
} else {
$alert_msg = "Sandi administrator yang Anda masukkan salah.";
$alert_type = "error";
}
} else {
$alert_msg = "Username Admin tidak terdaftar dalam database.";
$alert_type = "error";
}
} catch (Exception $e) {
$alert_msg = "Error autentikasi database: " . $e->getMessage();
$alert_type = "error";
}
} else {
// Mode Simulasi Login
if (($username === 'admin' || $username === 'superadmin') && $password === 'admin') {
$_SESSION['skpb_admin'] = $username;
$_SESSION['skpb_fullname'] = 'Surya (Simulasi)';
$admin_logged_in = true;
$alert_msg = "Login sukses! Berjalan dalam MODE SIMULASI.";
$alert_type = "success";
} else {
$alert_msg = "Sandi simulasi salah. Gunakan username: 'admin' & password: 'admin'";
$alert_type = "error";
}
}
}
// -- PROSES LOGOUT ADMIN --
if ($action === 'logout') {
unset($_SESSION['skpb_admin']);
unset($_SESSION['skpb_fullname']);
$admin_logged_in = false;
$alert_msg = "Anda telah keluar dari Portal Admin.";
$alert_type = "info";
}
// -- TAMBAH PELANGGAN BARU --
if ($action === 'add_customer') {
$username = strtolower(trim($_POST['username']));
$password = trim($_POST['password']);
$fullname = trim($_POST['fullname']);
$phonenumber = trim($_POST['phonenumber']);
$address = trim($_POST['address']);
$service_type = $_POST['service_type'];
$status = $_POST['status'];
if ($db_connected) {
try {
// Cek duplikasi username
$check = $pdo->prepare("SELECT id FROM tbl_customers WHERE username = :username LIMIT 1");
$check->execute(['username' => $username]);
if ($check->fetch()) {
throw new Exception("Username '@$username' sudah terdaftar dalam database!");
}
$stmt = $pdo->prepare("INSERT INTO tbl_customers (username, password, fullname, address, phonenumber, service_type, status, created_at) VALUES (:username, :password, :fullname, :address, :phonenumber, :service_type, :status, NOW())");
$stmt->execute([
'username' => $username,
'password' => $password,
'fullname' => $fullname,
'address' => $address,
'phonenumber' => $phonenumber,
'service_type' => $service_type,
'status' => $status
]);
// Catat ke log
$log_stmt = $pdo->prepare("INSERT INTO tbl_logs (date, type, description, userid, ip) VALUES (NOW(), 'SuperAdmin', :description, 1, :ip)");
$log_stmt->execute([
'description' => "[admin]: Created Customer
" . htmlspecialchars($fullname) . " via Portal",
'ip' => $_SERVER['REMOTE_ADDR']
]);
$alert_msg = "Pelanggan baru '" . htmlspecialchars($fullname) . "' berhasil didaftarkan ke database MySQL!";
$alert_type = "success";
} catch (Exception $e) {
$alert_msg = "Gagal menambah pelanggan: " . $e->getMessage();
$alert_type = "error";
}
} else {
$alert_msg = "Fitur dinamis nonaktif di Mode Simulasi. Hubungkan database cPanel terlebih dahulu.";
$alert_type = "error";
}
}
// -- HAPUS PELANGGAN --
if ($action === 'delete_customer') {
$customer_id = intval($_POST['customer_id']);
if ($db_connected) {
try {
$info = $pdo->prepare("SELECT fullname FROM tbl_customers WHERE id = :id LIMIT 1");
$info->execute(['id' => $customer_id]);
$cust = $info->fetch();
if ($cust) {
$stmt = $pdo->prepare("DELETE FROM tbl_customers WHERE id = :id");
$stmt->execute(['id' => $customer_id]);
// Catat ke log
$log_stmt = $pdo->prepare("INSERT INTO tbl_logs (date, type, description, userid, ip) VALUES (NOW(), 'SuperAdmin', :description, 1, :ip)");
$log_stmt->execute([
'description' => "[admin]: Deleted Customer " . htmlspecialchars($cust['fullname']),
'ip' => $_SERVER['REMOTE_ADDR']
]);
$alert_msg = "Pelanggan '" . htmlspecialchars($cust['fullname']) . "' berhasil dihapus.";
$alert_type = "success";
}
} catch (Exception $e) {
$alert_msg = "Gagal menghapus pelanggan: " . $e->getMessage();
$alert_type = "error";
}
} else {
$alert_msg = "Aksi hapus tidak diijinkan pada Mode Simulasi.";
$alert_type = "error";
}
}
}
// Ambil daftar pelanggan & paket dari database jika terhubung
$customers_list = [];
$plans_list = [];
if ($db_connected) {
try {
$stmt_cust = $pdo->query("SELECT c.*, p.name_plan, p.price FROM tbl_customers c LEFT JOIN tbl_plans p ON c.id = p.id_bw ORDER BY c.id DESC");
$customers_list = $stmt_cust->fetchAll();
$stmt_plans = $pdo->query("SELECT * FROM tbl_plans WHERE enabled = 1 ORDER BY price ASC");
$plans_list = $stmt_plans->fetchAll();
} catch (Exception $e) {
$customers_list = $mock_customers;
$plans_list = $mock_plans;
}
} else {
$customers_list = $mock_customers;
$plans_list = $mock_plans;
}
?>
Portal SKPB Net - PT Sarana Komunikasi Pratama Balekerto
Mode Simulasi Aktif: Website berjalan tanpa koneksi database. Harap sesuaikan kredensial MySQL Anda di bagian atas file ini agar live.
Panel Administrasi SKPB Net
Kontrol database pelanggan lereng Gunung Sumbing secara langsung.
Total Pelanggan
Orang
Pemasukan Potensial
Router Utama
OFFICE (192.168.72.1)
Gateway WhatsApp
wa.nux.my.id (Aktif)
Pelanggan Terdaftar Saat Ini
| Nama Lengkap / Username |
Layanan |
No WhatsApp |
Alamat Pemasangan |
Status |
Aksi |
| Belum ada pelanggan terdaftar dalam database SQL. |
|
U: @ | Sandi:
|
|
|
|
|
|
Infrastruktur Lereng Gunung Sumbing - Kaliangkrik
Portal Pelanggan SKPB Net
Cek status tagihan bulanan WiFi rumah Anda secara real-time dengan cepat dan dapatkan pesan rincian pembayaran otomatis via WhatsApp.
Pencarian Tagihan Pelanggan
Masukkan nama lengkap Anda atau username PPPoE yang terdaftar pada jaringan WiFi.
Ketikkan nama atau username PPPoE Anda di atas untuk menampilkan detail nominal tarif, paket wifi aktif, dan menu konfirmasi kasir.
Registrasi Pelanggan Baru
Hapus Pelanggan?
Apakah Anda yakin ingin menghapus dari database?