diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..f3b6045 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,12 @@ +FROM php:8.2-apache + +RUN docker-php-ext-install mysqli pdo pdo_mysql +RUN a2enmod rewrite + +COPY . /var/www/html/ + +RUN mkdir -p /var/www/html/uploads \ + && chown -R www-data:www-data /var/www/html \ + && chmod -R 775 /var/www/html/uploads + +EXPOSE 80 diff --git a/cek_env.php b/cek_env.php new file mode 100644 index 0000000..f183bd8 --- /dev/null +++ b/cek_env.php @@ -0,0 +1,10 @@ +"; +echo "DB_HOST = " . (getenv('DB_HOST') ?: '(kosong)') . "\n"; +echo "DB_PORT = " . (getenv('DB_PORT') ?: '(kosong)') . "\n"; +echo "DB_NAME = " . (getenv('DB_NAME') ?: '(kosong)') . "\n"; +echo "DB_USER = " . (getenv('DB_USER') ?: '(kosong)') . "\n"; +echo "DB_PASS = " . (getenv('DB_PASS') ? 'TERISI' : '(kosong)') . "\n"; +echo ""; +?> diff --git a/database.sql b/database.sql new file mode 100644 index 0000000..5f3fed3 --- /dev/null +++ b/database.sql @@ -0,0 +1,77 @@ +-- Database UAS WebGIS Kemiskinan Tania +-- Cocok untuk Coolify. Database dibuat dari Initial Database, jadi tidak perlu CREATE DATABASE. + +SET FOREIGN_KEY_CHECKS = 0; +DROP TABLE IF EXISTS bantuan; +DROP TABLE IF EXISTS penduduk_miskin; +DROP TABLE IF EXISTS rumah_ibadah; +DROP TABLE IF EXISTS admin; +SET FOREIGN_KEY_CHECKS = 1; + +CREATE TABLE admin ( + id INT AUTO_INCREMENT PRIMARY KEY, + username VARCHAR(100) NOT NULL UNIQUE, + password VARCHAR(255) NOT NULL, + nama_lengkap VARCHAR(150) DEFAULT 'Administrator', + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +CREATE TABLE rumah_ibadah ( + id INT AUTO_INCREMENT PRIMARY KEY, + nama_rumah_ibadah VARCHAR(150) NOT NULL, + alamat TEXT, + lat DOUBLE NOT NULL, + lng DOUBLE NOT NULL, + jenis_rumah_ibadah ENUM('masjid','gereja') DEFAULT 'masjid', + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +CREATE TABLE penduduk_miskin ( + id INT AUTO_INCREMENT PRIMARY KEY, + nama VARCHAR(150) NOT NULL, + nik VARCHAR(30) DEFAULT NULL, + alamat TEXT, + pekerjaan VARCHAR(100) DEFAULT NULL, + penghasilan INT DEFAULT 0, + jumlah_anggota_keluarga INT DEFAULT 1, + jumlah_tanggungan INT DEFAULT 0, + kategori_kemiskinan ENUM('Miskin','Miskin Ekstrem','Hampir Miskin') DEFAULT 'Miskin', + status_bantuan ENUM('Belum','Pernah','Sedang') DEFAULT 'Belum', + keterangan TEXT, + foto VARCHAR(255) DEFAULT NULL, + lat DOUBLE NOT NULL, + lng DOUBLE NOT NULL, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +CREATE TABLE bantuan ( + id INT AUTO_INCREMENT PRIMARY KEY, + penduduk_id INT NULL, + jenis_bantuan VARCHAR(100) NOT NULL, + jumlah_bantuan VARCHAR(100) DEFAULT NULL, + tanggal_bantuan DATE NOT NULL, + keterangan TEXT, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + CONSTRAINT fk_bantuan_penduduk + FOREIGN KEY (penduduk_id) REFERENCES penduduk_miskin(id) + ON DELETE SET NULL ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +INSERT INTO admin (username, password, nama_lengkap) VALUES +('admin', 'password', 'Administrator'); + +INSERT INTO rumah_ibadah (nama_rumah_ibadah, alamat, lat, lng, jenis_rumah_ibadah) VALUES +('Masjid Raya Mujahidin', 'Jl. Jenderal Ahmad Yani, Pontianak', -0.042338, 109.343906, 'masjid'), +('Masjid Jami Sultan Syarif Abdurrahman', 'Kampung Beting, Pontianak Timur', -0.021844, 109.351909, 'masjid'), +('Gereja Katedral Santo Yosef', 'Jl. Pattimura, Pontianak', -0.027104, 109.342337, 'gereja'), +('Gereja HKBP Pontianak', 'Pontianak Kota', -0.033862, 109.333546, 'gereja'); + +INSERT INTO penduduk_miskin +(nama, nik, alamat, pekerjaan, penghasilan, jumlah_anggota_keluarga, jumlah_tanggungan, kategori_kemiskinan, status_bantuan, keterangan, foto, lat, lng) VALUES +('Ahmad Supriadi', '6171010101010001', 'Pontianak Kota', 'Buruh Harian', 900000, 5, 3, 'Miskin', 'Belum', 'Membutuhkan bantuan sembako', '', -0.030500, 109.336200), +('Siti Aminah', '6171010101010002', 'Pontianak Barat', 'Ibu Rumah Tangga', 650000, 4, 2, 'Miskin Ekstrem', 'Sedang', 'Prioritas bantuan pangan', '', -0.025800, 109.315900), +('Budi Santoso', '6171010101010003', 'Pontianak Timur', 'Nelayan', 1100000, 6, 4, 'Hampir Miskin', 'Pernah', 'Butuh bantuan modal usaha', '', -0.018900, 109.366800); + +INSERT INTO bantuan (penduduk_id, jenis_bantuan, jumlah_bantuan, tanggal_bantuan, keterangan) VALUES +(2, 'Sembako', '1 paket', CURDATE(), 'Bantuan awal'), +(3, 'Uang Tunai', 'Rp 300.000', CURDATE(), 'Bantuan sosial'); diff --git a/install_database.php b/install_database.php new file mode 100644 index 0000000..9a289e1 --- /dev/null +++ b/install_database.php @@ -0,0 +1,54 @@ +Install Database UAS WebGIS Kemiskinan"; +echo "

Target koneksi: " . htmlspecialchars($host) . ":" . htmlspecialchars((string)$port) . ", database: " . htmlspecialchars($db) . ", user: " . htmlspecialchars($user) . "

"; + +$conn = new mysqli($host, $user, $pass, $db, $port); + +if ($conn->connect_error) { + die("

Koneksi gagal: " . htmlspecialchars($conn->connect_error) . "

"); +} + +$conn->set_charset('utf8mb4'); +$sqlFile = __DIR__ . '/database.sql'; + +if (!file_exists($sqlFile)) { + die("

File database.sql tidak ditemukan di root project.

"); +} + +$sql = file_get_contents($sqlFile); + +// Buang CREATE DATABASE / USE agar cocok untuk Coolify normal user. +$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); + +if ($conn->multi_query($sql)) { + do { + if ($result = $conn->store_result()) { + $result->free(); + } + } while ($conn->more_results() && $conn->next_result()); + + if ($conn->errno) { + echo "

Ada error saat import: " . htmlspecialchars($conn->error) . "

"; + } else { + echo "

Database berhasil diimport/reset.

"; + echo "

Akun login: admin / password

"; + echo "

Setelah ini, hapus file install_database.php dari repo lalu redeploy.

"; + } +} else { + echo "

Import gagal: " . htmlspecialchars($conn->error) . "

"; +} + +$conn->close(); +?> diff --git a/koneksi.php b/koneksi.php index dd8a3b6..a088c28 100644 --- a/koneksi.php +++ b/koneksi.php @@ -1,16 +1,18 @@ -connect_error) { - die(json_encode([ - 'status' => 'error', - 'msg' => 'Koneksi database gagal: ' . $conn->connect_error - ])); -} - -$conn->set_charset("utf8"); \ No newline at end of file +connect_error) { + die(json_encode([ + 'status' => 'error', + 'msg' => 'Koneksi database gagal: ' . $conn->connect_error + ])); +} + +$conn->set_charset('utf8mb4'); +?>