diff --git a/README_FIX.md b/README_FIX.md new file mode 100644 index 0000000..1bd1282 --- /dev/null +++ b/README_FIX.md @@ -0,0 +1,11 @@ +# Fix Tugas_SIG Tiara untuk Coolify + +Upload/replace file-file ini ke repo root `Tugas_SIG`. + +File penting: +- `koneksi.php` root: koneksi database pakai Environment Variables + fallback database. +- `install_database.php`: installer sementara database. +- `Dockerfile`: PHP Apache port 80. +- `Tugas2/koneksi.php`, `Tugas3/koneksi.php`, `Tugas4/koneksi.php`, `Tugas1/koneksi.php`: proxy supaya include('koneksi.php') tetap jalan dari subfolder. + +Setelah import database berhasil, hapus `install_database.php`, commit, push, lalu redeploy. diff --git a/install_database.php b/install_database.php index c495641..2193ca1 100644 --- a/install_database.php +++ b/install_database.php @@ -1,5 +1,5 @@ Install Database Tugas SIG Tiara"; -echo "
Target koneksi: " . htmlspecialchars($host) . ":" . htmlspecialchars((string)$port) . ", database: " . htmlspecialchars($db) . ", user: " . htmlspecialchars($user) . "
"; +$dbCandidates = array_values(array_unique(array_filter([ + $requestedDb, + getenv('MYSQL_DATABASE') ?: null, + 'default', + 'db_poverty_mapping' +]))); -$conn = new mysqli($host, $user, $pass, $db, $port); +mysqli_report(MYSQLI_REPORT_OFF); + +$conn = new mysqli($host, $user, $pass, '', $port); if ($conn->connect_error) { - die("Koneksi gagal: " . htmlspecialchars($conn->connect_error) . "
"); + die("Koneksi server database gagal: " . htmlspecialchars($conn->connect_error) . "
"); } -$sqlFile = __DIR__ . "/database.sql"; +$selectedDb = null; +$selectErrors = []; + +foreach ($dbCandidates as $candidate) { + if (!$candidate) continue; + if (@$conn->select_db($candidate)) { + $selectedDb = $candidate; + break; + } + $selectErrors[] = $candidate . ' => ' . $conn->error; +} + +echo "Target server: " . htmlspecialchars($host) . ":" . htmlspecialchars((string)$port) . "
"; +echo "User: " . htmlspecialchars($user) . "
"; +echo "DB_NAME dari env: " . htmlspecialchars($requestedDb) . "
"; + +if (!$selectedDb) { + echo "Gagal memilih database.
"; + echo "Database yang dicoba:
" . htmlspecialchars(implode("\n", $selectErrors)) . "";
+ echo "Solusi: di Coolify bagian Production Environment Variables, ubah DB_NAME menjadi nama database yang ada di ujung MySQL URL internal. Kalau URL internal berakhir dengan /default, isi DB_NAME=default.
Database yang dipakai: " . htmlspecialchars($selectedDb) . "
"; + +$sqlFile = __DIR__ . '/database.sql'; + if (!file_exists($sqlFile)) { die("File SQL tidak ditemukan: " . htmlspecialchars($sqlFile) . "
"); } $sql = file_get_contents($sqlFile); -// Coolify normal user biasanya tidak butuh/ tidak punya izin CREATE DATABASE. -// Database sudah dibuat dari field Initial Database, jadi baris CREATE DATABASE dan USE diabaikan. -$sql = preg_replace('/CREATE\\s+DATABASE\\s+IF\\s+NOT\\s+EXISTS\\s+`?[^`\\s;]+`?.*?;/is', '', $sql); -$sql = preg_replace('/USE\\s+`?[^`\\s;]+`?\\s*;/is', '', $sql); +// Di Coolify, database sudah dibuat oleh resource database. +// Jadi dump tidak boleh memaksa CREATE DATABASE / USE database lain. +$sql = preg_replace('/CREATE\s+DATABASE\s+IF\s+NOT\s+EXISTS\s+`?[^`\s;]+`?.*?;/is', '', $sql); +$sql = preg_replace('/CREATE\s+DATABASE\s+`?[^`\s;]+`?.*?;/is', '', $sql); +$sql = preg_replace('/USE\s+`?[^`\s;]+`?\s*;/is', '', $sql); -// Jika dump hasil copy menjadi komentar seperti "-- 1.\nTABEL ... CREATE TABLE", -// buang label teks agar SQL tidak error. -$sql = preg_replace('/--\\s*\\d+\\.\\s*TABEL[^\\n]*\\n/is', '', $sql); -$sql = preg_replace('/\\bTABEL\\s+(PENGGUNA|RUMAH|BENCANA|DATA)[^;]*?(CREATE\\s+TABLE)/is', '$2', $sql); +// Supaya import ulang tidak langsung gagal karena tabel sudah ada. +$sql = preg_replace('/CREATE\s+TABLE\s+`/i', 'CREATE TABLE IF NOT EXISTS `', $sql); +$sql = preg_replace('/CREATE\s+TABLE\s+IF\s+NOT\s+EXISTS\s+IF\s+NOT\s+EXISTS\s+`/i', 'CREATE TABLE IF NOT EXISTS `', $sql); if ($conn->multi_query($sql)) { do { @@ -46,7 +79,7 @@ if ($conn->multi_query($sql)) { if ($conn->errno) { echo "Ada error saat import: " . htmlspecialchars($conn->error) . "
"; } else { - echo "Database berhasil diimport.
"; + echo "Database berhasil diimport ke database " . htmlspecialchars($selectedDb) . ".
Setelah ini, hapus file install_database.php dari repo lalu redeploy.