From 4928f53982f41b6bbf4e5eaabbd6a8a48e960eec Mon Sep 17 00:00:00 2001 From: z0rayy Date: Wed, 10 Jun 2026 22:24:32 +0700 Subject: [PATCH] fix koneksi database admin --- debug_db.php | 18 ++++-- init_db_web.php | 33 +++++++++++ scripts/init_db.php | 112 +++-------------------------------- scripts/init_db_core.php | 123 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 175 insertions(+), 111 deletions(-) create mode 100644 init_db_web.php create mode 100644 scripts/init_db_core.php diff --git a/debug_db.php b/debug_db.php index 67c4091..8a99588 100644 --- a/debug_db.php +++ b/debug_db.php @@ -39,20 +39,26 @@ try { echo "=== CEK TABEL ===\n"; $tables = ['users', 'spbu', 'rumah_ibadah', 'penduduk_miskin']; + $tableExists = []; foreach ($tables as $table) { $result = $conn->query("SHOW TABLES LIKE '$table'"); $exists = $result->num_rows > 0; + $tableExists[$table] = $exists; echo "Tabel '$table': " . ($exists ? "ADA" : "TIDAK ADA") . "\n"; } echo "\n=== CEK USER ADMIN ===\n"; - $result = $conn->query("SELECT username, created_at FROM users LIMIT 5"); - if ($result && $result->num_rows > 0) { - while ($row = $result->fetch_assoc()) { - echo "User: " . $row['username'] . " | Dibuat: " . $row['created_at'] . "\n"; - } + if (!$tableExists['users']) { + echo "Tabel users belum ada. Jalankan: php scripts/init_db.php\n"; } else { - echo "Tabel users kosong - belum ada user!\n"; + $result = $conn->query("SELECT username, created_at FROM users LIMIT 5"); + if ($result && $result->num_rows > 0) { + while ($row = $result->fetch_assoc()) { + echo "User: " . $row['username'] . " | Dibuat: " . $row['created_at'] . "\n"; + } + } else { + echo "Tabel users kosong - belum ada user!\n"; + } } } catch (mysqli_sql_exception $e) { diff --git a/init_db_web.php b/init_db_web.php new file mode 100644 index 0000000..5531b6f --- /dev/null +++ b/init_db_web.php @@ -0,0 +1,33 @@ + 'error', + 'message' => 'Invalid or missing INIT_TOKEN.', + ], JSON_PRETTY_PRINT); + exit; +} + +try { + require __DIR__ . '/scripts/init_db_core.php'; + $result = initializeDatabase(); + + echo json_encode([ + 'status' => 'success', + 'message' => 'Database initialized successfully.', + 'result' => $result, + ], JSON_PRETTY_PRINT); +} catch (Throwable $e) { + http_response_code(500); + echo json_encode([ + 'status' => 'error', + 'message' => $e->getMessage(), + ], JSON_PRETTY_PRINT); +} diff --git a/scripts/init_db.php b/scripts/init_db.php index 336f543..ebe47f7 100644 --- a/scripts/init_db.php +++ b/scripts/init_db.php @@ -7,111 +7,13 @@ if (PHP_SAPI !== 'cli') { exit(1); } -require __DIR__ . '/../backend/koneksi.php'; +require __DIR__ . '/init_db_core.php'; -$db = getConnection(); - -$statements = [ - "CREATE TABLE IF NOT EXISTS spbu ( - id INT NOT NULL AUTO_INCREMENT, - nama VARCHAR(150) NOT NULL, - no_spbu VARCHAR(50) NOT NULL, - status ENUM('24jam', 'tidak') NOT NULL DEFAULT 'tidak', - latitude DECIMAL(10, 8) NOT NULL, - longitude DECIMAL(11, 8) NOT NULL, - created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, - PRIMARY KEY (id) - ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci", - - "CREATE TABLE IF NOT EXISTS jalan ( - id INT NOT NULL AUTO_INCREMENT, - nama_jalan VARCHAR(150) NOT NULL, - status ENUM('Nasional', 'Provinsi', 'Kabupaten') NOT NULL, - panjang DECIMAL(10, 2) NOT NULL, - geom LONGTEXT NOT NULL, - created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, - PRIMARY KEY (id) - ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci", - - "CREATE TABLE IF NOT EXISTS parsil ( - id INT NOT NULL AUTO_INCREMENT, - nama_pemilik VARCHAR(150) NOT NULL, - status ENUM('SHM', 'HGB', 'HGU', 'HP') NOT NULL, - luas DECIMAL(12, 2) NOT NULL, - geom LONGTEXT NOT NULL, - created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, - PRIMARY KEY (id) - ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci", - - "CREATE TABLE IF NOT EXISTS rumah_ibadah ( - id INT NOT NULL AUTO_INCREMENT, - nama VARCHAR(150) NOT NULL, - alamat TEXT NOT NULL, - latitude DECIMAL(10, 8) NOT NULL, - longitude DECIMAL(11, 8) NOT NULL, - created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, - PRIMARY KEY (id) - ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci", - - "CREATE TABLE IF NOT EXISTS penduduk_miskin ( - id INT NOT NULL AUTO_INCREMENT, - nama_kk VARCHAR(150) NOT NULL, - keterangan TEXT, - latitude DECIMAL(10, 8) NOT NULL, - longitude DECIMAL(11, 8) NOT NULL, - created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, - PRIMARY KEY (id) - ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci", - - "CREATE TABLE IF NOT EXISTS users ( - id INT NOT NULL AUTO_INCREMENT, - username VARCHAR(50) NOT NULL UNIQUE, - password VARCHAR(255) NOT NULL, - created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, - PRIMARY KEY (id) - ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci", -]; - -foreach ($statements as $statement) { - $db->query($statement); -} - -$adminPassword = getenv('ADMIN_PASSWORD') ?: 'admin123'; -$adminHash = password_hash($adminPassword, PASSWORD_DEFAULT); - -$adminResult = $db->query("SELECT password FROM users WHERE username = 'admin' LIMIT 1"); -if ($adminResult->num_rows === 0) { - $stmt = $db->prepare("INSERT INTO users (username, password) VALUES ('admin', ?)"); - $stmt->bind_param('s', $adminHash); - $stmt->execute(); -} else { - $currentHash = (string) $adminResult->fetch_assoc()['password']; - if (!password_verify($adminPassword, $currentHash)) { - $stmt = $db->prepare("UPDATE users SET password = ? WHERE username = 'admin'"); - $stmt->bind_param('s', $adminHash); - $stmt->execute(); - } -} - -$count = (int) $db->query('SELECT COUNT(*) AS total FROM spbu')->fetch_assoc()['total']; -if ($count === 0) { - $seed = $db->prepare( - "INSERT INTO spbu (nama, no_spbu, status, latitude, longitude) - VALUES (?, ?, ?, ?, ?)" - ); - - $rows = [ - ['SPBU Sudirman', '64.751.01', '24jam', -0.0260000, 109.3425000], - ['SPBU Ahmad Yani', '64.751.02', 'tidak', -0.0310000, 109.3218000], - ['SPBU Sutan Syahrir', '64.751.03', '24jam', -0.0195000, 109.3612000], - ]; - - foreach ($rows as [$name, $number, $status, $latitude, $longitude]) { - $seed->bind_param('sssdd', $name, $number, $status, $latitude, $longitude); - $seed->execute(); - } -} +$result = initializeDatabase(); echo "Database initialized successfully.\n"; -echo "Admin username: admin\n"; -echo "Admin password: {$adminPassword}\n"; +echo "Database: {$result['database']}\n"; +echo "Admin username: {$result['admin_username']}\n"; +echo "Admin password source: {$result['admin_password_source']}\n"; +echo "Admin action: {$result['admin_action']}\n"; +echo "Seeded SPBU rows: {$result['seeded_spbu']}\n"; diff --git a/scripts/init_db_core.php b/scripts/init_db_core.php new file mode 100644 index 0000000..f612b23 --- /dev/null +++ b/scripts/init_db_core.php @@ -0,0 +1,123 @@ +query($statement); + } + + $adminPassword = getenv('ADMIN_PASSWORD') ?: 'admin123'; + $adminHash = password_hash($adminPassword, PASSWORD_DEFAULT); + + $adminResult = $db->query("SELECT password FROM users WHERE username = 'admin' LIMIT 1"); + $adminAction = 'unchanged'; + if ($adminResult->num_rows === 0) { + $stmt = $db->prepare("INSERT INTO users (username, password) VALUES ('admin', ?)"); + $stmt->bind_param('s', $adminHash); + $stmt->execute(); + $adminAction = 'created'; + } else { + $currentHash = (string) $adminResult->fetch_assoc()['password']; + if (!password_verify($adminPassword, $currentHash)) { + $stmt = $db->prepare("UPDATE users SET password = ? WHERE username = 'admin'"); + $stmt->bind_param('s', $adminHash); + $stmt->execute(); + $adminAction = 'updated'; + } + } + + $seededSpbu = 0; + $count = (int) $db->query('SELECT COUNT(*) AS total FROM spbu')->fetch_assoc()['total']; + if ($count === 0) { + $seed = $db->prepare( + "INSERT INTO spbu (nama, no_spbu, status, latitude, longitude) + VALUES (?, ?, ?, ?, ?)" + ); + + $rows = [ + ['SPBU Sudirman', '64.751.01', '24jam', -0.0260000, 109.3425000], + ['SPBU Ahmad Yani', '64.751.02', 'tidak', -0.0310000, 109.3218000], + ['SPBU Sutan Syahrir', '64.751.03', '24jam', -0.0195000, 109.3612000], + ]; + + foreach ($rows as [$name, $number, $status, $latitude, $longitude]) { + $seed->bind_param('sssdd', $name, $number, $status, $latitude, $longitude); + $seed->execute(); + $seededSpbu++; + } + } + + return [ + 'database' => DB_NAME, + 'admin_username' => 'admin', + 'admin_password_source' => getenv('ADMIN_PASSWORD') ? 'ADMIN_PASSWORD env' : 'default', + 'admin_action' => $adminAction, + 'seeded_spbu' => $seededSpbu, + ]; +}