connect_error) { die('

Koneksi gagal: ' . $conn->connect_error . '

'); } $conn->set_charset('utf8mb4'); header('Content-Type: text/html; charset=utf-8'); $results = []; function run(mysqli $c, string $label, string $sql): array { // Hapus komentar SQL (-- ...) agar tidak error $sql = preg_replace('/--[^\n]*/', '', $sql); if ($c->query($sql) === true) { return ['label' => $label, 'status' => 'OK', 'msg' => '']; } return ['label' => $label, 'status' => 'ERROR', 'msg' => $c->error]; } // ── DROP (urutan sesuai FK) ─────────────────────────────────── $results[] = run($conn, 'DROP TABLE histori_bantuan', "DROP TABLE IF EXISTS histori_bantuan"); $results[] = run($conn, 'DROP TABLE laporan_masyarakat', "DROP TABLE IF EXISTS laporan_masyarakat"); $results[] = run($conn, 'DROP TABLE keluarga_miskin', "DROP TABLE IF EXISTS keluarga_miskin"); $results[] = run($conn, 'DROP TABLE users', "DROP TABLE IF EXISTS users"); $results[] = run($conn, 'DROP TABLE rumah_ibadah', "DROP TABLE IF EXISTS rumah_ibadah"); $results[] = run($conn, 'DROP TABLE rate_limit', "DROP TABLE IF EXISTS rate_limit"); // ── CREATE TABLE: rumah_ibadah ──────────────────────────────── $results[] = run($conn, 'CREATE TABLE rumah_ibadah', " CREATE TABLE rumah_ibadah ( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, nama VARCHAR(200) NOT NULL, jenis ENUM('Masjid','Gereja','Pura','Vihara','Klenteng','Lainnya') NOT NULL, alamat TEXT NOT NULL, lat DECIMAL(10,7) NOT NULL, lng DECIMAL(10,7) NOT NULL, radius_km FLOAT NOT NULL DEFAULT 2.0, kode_pengurus VARCHAR(20) NULL UNIQUE, password_pengurus VARCHAR(255) NULL, kecamatan ENUM('Pontianak Utara','Pontianak Selatan','Pontianak Timur','Pontianak Barat','Pontianak Tenggara','Pontianak Kota') NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci "); // ── CREATE TABLE: users ─────────────────────────────────────── $results[] = run($conn, 'CREATE TABLE users', " CREATE TABLE users ( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, nama VARCHAR(150) NOT NULL, username VARCHAR(100) NOT NULL UNIQUE, password VARCHAR(255) NOT NULL, role ENUM('admin','pengurus','walikota') NOT NULL DEFAULT 'pengurus', rumah_ibadah_id INT DEFAULT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (rumah_ibadah_id) REFERENCES rumah_ibadah(id) ON DELETE SET NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci "); // ── CREATE TABLE: keluarga_miskin ───────────────────────────── $results[] = run($conn, 'CREATE TABLE keluarga_miskin', " CREATE TABLE keluarga_miskin ( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, nik VARCHAR(20) NOT NULL UNIQUE, nama_kepala_keluarga VARCHAR(200) NOT NULL, tanggal_lahir DATE NULL, pendidikan ENUM('Tidak Sekolah','SD','SMP','SMA','D3','S1','S2/S3') NOT NULL DEFAULT 'Tidak Sekolah', jumlah_anggota INT NOT NULL DEFAULT 1, alamat TEXT NOT NULL, kecamatan ENUM('Pontianak Utara','Pontianak Selatan','Pontianak Timur','Pontianak Barat','Pontianak Tenggara','Pontianak Kota') NOT NULL, lat DECIMAL(10,7) NOT NULL, lng DECIMAL(10,7) NOT NULL, tingkat_kemiskinan ENUM('Sangat Miskin','Miskin','Hampir Miskin') NOT NULL DEFAULT 'Miskin', status_dtks ENUM('Terdaftar DTKS','Belum DTKS','Sedang Diusulkan') NOT NULL DEFAULT 'Belum DTKS', riwayat_penyakit JSON NULL, rumah_ibadah_id INT DEFAULT NULL, jarak_ke_ibadah FLOAT DEFAULT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, FOREIGN KEY (rumah_ibadah_id) REFERENCES rumah_ibadah(id) ON DELETE SET NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci "); // ── CREATE TABLE: laporan_masyarakat ────────────────────────── $results[] = run($conn, 'CREATE TABLE laporan_masyarakat', " CREATE TABLE laporan_masyarakat ( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, nama_terlapor VARCHAR(150) NULL, nik_terlapor VARCHAR(16) NULL, nama_pelapor VARCHAR(150) NULL, no_hp VARCHAR(20) NULL, alamat_terlapor TEXT NOT NULL, lat DECIMAL(10,7) NOT NULL, lng DECIMAL(10,7) NOT NULL, deskripsi TEXT NOT NULL, foto VARCHAR(255) NULL, status ENUM('Baru','Diverifikasi','Ditolak') NOT NULL DEFAULT 'Baru', alasan_tolak TEXT NULL, ditangani_oleh INT NULL, converted_to_kk_id INT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (ditangani_oleh) REFERENCES users(id) ON DELETE SET NULL, FOREIGN KEY (converted_to_kk_id) REFERENCES keluarga_miskin(id) ON DELETE SET NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci "); // ── CREATE TABLE: histori_bantuan ───────────────────────────── $results[] = run($conn, 'CREATE TABLE histori_bantuan', " CREATE TABLE histori_bantuan ( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, kk_id INT NOT NULL, jenis_bantuan ENUM('PKH','BPNT/Sembako','Beras Bansos','KIS-PBI','Bansos Tunai Pemkot','Rutilahu','PMT Stunting','CSR Swasta','Lainnya') NOT NULL, nominal BIGINT NOT NULL DEFAULT 0, keterangan TEXT NULL, tanggal_penyaluran DATE NOT NULL, sumber_dana ENUM('APBN','APBD','CSR','Lainnya') NOT NULL DEFAULT 'APBD', penanggung_jawab INT NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (kk_id) REFERENCES keluarga_miskin(id) ON DELETE CASCADE, FOREIGN KEY (penanggung_jawab) REFERENCES users(id) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci "); // ── CREATE TABLE: rate_limit ────────────────────────────────── $results[] = run($conn, 'CREATE TABLE rate_limit', " CREATE TABLE rate_limit ( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, ip_address VARCHAR(45) NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, INDEX idx_ip_time (ip_address, created_at) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci "); // ── SEED: rumah_ibadah ──────────────────────────────────────── $results[] = run($conn, 'SEED rumah_ibadah (2 data)', " INSERT INTO rumah_ibadah (nama,jenis,alamat,lat,lng,radius_km,kode_pengurus,password_pengurus,kecamatan) VALUES ('Masjid Raya Mujahidin','Masjid','Jl. Ahmad Yani No. 1, Pontianak Tenggara', -0.0263330,109.3425200,2.5,'RI-MSJ-4821', '\$2y\$10\$EQKGMwtGqPsn3kxOGkUf3eh3cnXOCEYqVNfCKDVk.Q7WYTCKvi5iG', 'Pontianak Tenggara'), ('Gereja Katedral Santo Yosef','Gereja','Jl. Diponegoro No. 120, Pontianak Kota', -0.0380000,109.3422000,2.0,'RI-GRJ-7153', '\$2y\$10\$EQKGMwtGqPsn3kxOGkUf3eh3cnXOCEYqVNfCKDVk.Q7WYTCKvi5iG', 'Pontianak Kota') "); // ── SEED: users (admin + walikota) ──────────────────────────── $results[] = run($conn, 'SEED users (admin, walikota)', " INSERT INTO users (nama,username,password,role,rumah_ibadah_id) VALUES ('Administrator Sistem','admin', '\$2y\$10\$AIO3pPEflVaouN/G.rvgWeZmSjr0Nnjsd2PTna4lSHEoDTWr9KQpi', 'admin',NULL), ('Walikota Pontianak','walikota', '\$2y\$10\$AIO3pPEflVaouN/G.rvgWeZmSjr0Nnjsd2PTna4lSHEoDTWr9KQpi', 'walikota',NULL) "); // ── SEED: keluarga_miskin (5 data) ──────────────────────────── $results[] = run($conn, 'SEED keluarga_miskin (5 data)', " INSERT INTO keluarga_miskin (nik,nama_kepala_keluarga,tanggal_lahir,pendidikan,jumlah_anggota,alamat,kecamatan,lat,lng,tingkat_kemiskinan,status_dtks,riwayat_penyakit,rumah_ibadah_id,jarak_ke_ibadah) VALUES ('6171010101010001','Budi Santoso','1978-03-15','SD',4,'Gg. Mawar No. 3, Benua Melayu Darat','Pontianak Tenggara',-0.0283000,109.3440000,'Sangat Miskin','Terdaftar DTKS','[\"Stunting\",\"Gizi Buruk\"]',1,0.2500), ('6171010101010002','Siti Rahayu','1985-07-22','SMP',6,'Jl. Merdeka Gg. 5 No. 7, Mariana','Pontianak Kota',-0.0370000,109.3430000,'Miskin','Terdaftar DTKS','[\"TBC\",\"Hipertensi\"]',2,0.1200), ('6171010101010003','Wayan Dharma','1972-11-08','Tidak Sekolah',3,'Gg. Bali No. 2, Bansir Laut','Pontianak Tenggara',-0.0290000,109.3410000,'Sangat Miskin','Belum DTKS','[\"Diabetes\",\"Hipertensi\",\"ODGJ\"]',1,0.3400), ('6171010101010004','Ahmad Fauzan','1990-01-30','SMA',5,'Jl. Tanjungpura Gg. 12, Parit Tokaya','Pontianak Selatan',-0.0310000,109.3350000,'Miskin','Sedang Diusulkan','[\"Stunting\"]',NULL,NULL), ('6171010101010005','Ruslan Effendi','1968-09-05','SD',7,'Jl. Sutan Syahrir Gg. Melati, Batu Layang','Pontianak Utara',-0.0200000,109.3460000,'Hampir Miskin','Terdaftar DTKS','[\"Jantung\",\"DBD\"]',1,0.7800) "); // ── SEED: laporan_masyarakat ────────────────────────────────── $results[] = run($conn, 'SEED laporan_masyarakat (1 data)', " INSERT INTO laporan_masyarakat (nama_pelapor,no_hp,alamat_terlapor,lat,lng,deskripsi,status) VALUES ('Pak RT 03','081234567890','Gg. Flamboyan No. 5, Pontianak Tenggara', -0.0275000,109.3435000, 'Terdapat keluarga dengan 5 anak yang sangat membutuhkan bantuan. Rumah tidak layak huni dan anak-anak putus sekolah.', 'Baru') "); // ── SEED: histori_bantuan ───────────────────────────────────── $results[] = run($conn, 'SEED histori_bantuan (2 data)', " INSERT INTO histori_bantuan (kk_id,jenis_bantuan,nominal,keterangan,tanggal_penyaluran,sumber_dana,penanggung_jawab) VALUES (1,'PKH',3000000,'Bantuan tahap I tahun 2026','2026-01-15','APBN',1), (2,'BPNT/Sembako',0,'10 kg beras + minyak goreng','2026-02-20','APBN',1) "); $conn->close(); $allOk = !in_array('ERROR', array_column($results, 'status')); ?> Migration — Web GIS Rumah Ibadah

🕌 Migration — Web GIS Rumah Ibadah

Membuat tabel dan seed data di database default

✅ Migrasi Berhasil!

Semua tabel dan data seed berhasil dibuat.

Buka Aplikasi →

❌ Ada Error

Periksa pesan error di atas dan coba lagi.

🔑 Akun Demo

RoleUsernamePassword
Adminadminadmin123
Walikotawalikotaadmin123
Pengurus MasjidRI-MSJ-4821pengurus123
Pengurus GerejaRI-GRJ-7153pengurus123
⚠️ PENTING: Segera hapus file migrate.php setelah migrasi berhasil untuk keamanan sistem!