mencoba connect database
This commit is contained in:
@@ -1,7 +0,0 @@
|
|||||||
# Salin ke Environment Variables di Coolify / Docker
|
|
||||||
DB_HOST=db
|
|
||||||
DB_USER=webgis
|
|
||||||
DB_PASS=webgis123
|
|
||||||
POVERTY_DB_NAME=webgis_p3
|
|
||||||
SPBU_DB_NAME=webgis_spbu
|
|
||||||
JALAN_DB_NAME=WEB_GIS
|
|
||||||
-12
@@ -1,12 +0,0 @@
|
|||||||
FROM php:8.2-apache
|
|
||||||
|
|
||||||
RUN docker-php-ext-install mysqli pdo pdo_mysql \
|
|
||||||
&& a2enmod rewrite headers
|
|
||||||
|
|
||||||
COPY . /var/www/html/
|
|
||||||
|
|
||||||
RUN chown -R www-data:www-data /var/www/html
|
|
||||||
|
|
||||||
COPY docker/apache.conf /etc/apache2/sites-available/000-default.conf
|
|
||||||
|
|
||||||
EXPOSE 80
|
|
||||||
@@ -1,35 +1,62 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
|
||||||
* WebGIS - Konfigurasi & Koneksi Database
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Pastikan PHP tidak menampilkan error sebagai HTML (merusak output JSON)
|
|
||||||
ini_set('display_errors', 0);
|
ini_set('display_errors', 0);
|
||||||
ini_set('display_startup_errors', 0);
|
ini_set('display_startup_errors', 0);
|
||||||
error_reporting(0);
|
error_reporting(0);
|
||||||
|
|
||||||
define('DB_HOST', getenv('DB_HOST') ?: 'localhost');
|
$host_sekarang = $_SERVER['HTTP_HOST'];
|
||||||
define('DB_USER', getenv('DB_USER') ?: 'root');
|
|
||||||
define('DB_PASS', getenv('DB_PASS') !== false ? getenv('DB_PASS') : '');
|
|
||||||
define('DB_NAME', getenv('JALAN_DB_NAME') ?: 'WEB_GIS');
|
|
||||||
|
|
||||||
/**
|
if (strpos($host_sekarang, 'localhost') !== false || strpos($host_sekarang, '127.0.0.1') !== false) {
|
||||||
* Mengembalikan koneksi MySQLi.
|
$host = "localhost";
|
||||||
* Jika koneksi gagal, langsung output JSON error dan exit.
|
$user = "root";
|
||||||
*/
|
$pass = "";
|
||||||
function getConnection()
|
$db = "WEB_GIS";
|
||||||
{
|
} else {
|
||||||
$conn = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
|
$host = "to00g0c4cwsws8gsoc4c08og";
|
||||||
|
$user = "mysql";
|
||||||
|
$pass = "FzeWTKBJzGMHk47S6UI0w0wdFLKbANsrfoFDZDwVnxNDFS1qtBT9lFFcTfyJgdcf";
|
||||||
|
$db = "WEB_GIS";
|
||||||
|
}
|
||||||
|
|
||||||
if ($conn->connect_error) {
|
$conn = new mysqli($host, $user, $pass);
|
||||||
|
if ($conn->connect_error) {
|
||||||
http_response_code(500);
|
http_response_code(500);
|
||||||
echo json_encode([
|
echo json_encode(['status' => 'gagal', 'pesan' => 'Koneksi database gagal: ' . $conn->connect_error]);
|
||||||
'status' => 'gagal',
|
|
||||||
'pesan' => 'Koneksi database gagal: ' . $conn->connect_error
|
|
||||||
]);
|
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
$conn->set_charset('utf8mb4');
|
$conn->query("CREATE DATABASE IF NOT EXISTS `$db` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci");
|
||||||
|
$conn->select_db($db);
|
||||||
|
$conn->set_charset('utf8mb4');
|
||||||
|
|
||||||
|
// Auto-create tables
|
||||||
|
$conn->query("
|
||||||
|
CREATE TABLE IF NOT EXISTS `tb_jalan` (
|
||||||
|
`id` INT NOT NULL AUTO_INCREMENT,
|
||||||
|
`nama_jalan` VARCHAR(100) NOT NULL,
|
||||||
|
`status_jalan` ENUM('Nasional','Provinsi','Kabupaten') NOT NULL,
|
||||||
|
`panjang_jalan` DECIMAL(12,2) NOT NULL DEFAULT '0.00',
|
||||||
|
`geojson` JSON NOT NULL,
|
||||||
|
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
`updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
|
||||||
|
");
|
||||||
|
|
||||||
|
$conn->query("
|
||||||
|
CREATE TABLE IF NOT EXISTS `tb_parsil` (
|
||||||
|
`id` INT NOT NULL AUTO_INCREMENT,
|
||||||
|
`nama_parsil` VARCHAR(100) NOT NULL,
|
||||||
|
`status_kepemilikan` ENUM('SHM','HGB','HGU','HP') NOT NULL,
|
||||||
|
`luas_tanah` DECIMAL(16,4) NOT NULL DEFAULT '0.0000',
|
||||||
|
`geojson` JSON NOT NULL,
|
||||||
|
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
`updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
|
||||||
|
");
|
||||||
|
|
||||||
|
function getConnection() {
|
||||||
|
global $conn;
|
||||||
return $conn;
|
return $conn;
|
||||||
}
|
}
|
||||||
|
?>
|
||||||
@@ -1,31 +1,38 @@
|
|||||||
<?php
|
<?php
|
||||||
// ============================================================
|
$host_sekarang = $_SERVER['HTTP_HOST'];
|
||||||
// KONFIGURASI DATABASE
|
|
||||||
// File: config.php
|
|
||||||
// ============================================================
|
|
||||||
|
|
||||||
define('DB_HOST', getenv('DB_HOST') ?: 'localhost');
|
if (strpos($host_sekarang, 'localhost') !== false || strpos($host_sekarang, '127.0.0.1') !== false) {
|
||||||
define('DB_USER', getenv('DB_USER') ?: 'root');
|
$host = "localhost";
|
||||||
define('DB_PASS', getenv('DB_PASS') !== false ? getenv('DB_PASS') : '');
|
$user = "root";
|
||||||
define('DB_NAME', getenv('POVERTY_DB_NAME') ?: 'webgis_p3');
|
$pass = "";
|
||||||
|
$db = "webgis_p3";
|
||||||
|
} else {
|
||||||
|
$host = "to00g0c4cwsws8gsoc4c08og";
|
||||||
|
$user = "mysql";
|
||||||
|
$pass = "FzeWTKBJzGMHk47S6UI0w0wdFLKbANsrfoFDZDwVnxNDFS1qtBT9lFFcTfyJgdcf";
|
||||||
|
$db = "webgis_p3";
|
||||||
|
}
|
||||||
|
|
||||||
function getDB() {
|
$conn = new mysqli($host, $user, $pass);
|
||||||
$conn = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
|
if ($conn->connect_error) {
|
||||||
if ($conn->connect_error) {
|
|
||||||
http_response_code(500);
|
http_response_code(500);
|
||||||
die(json_encode(['error' => 'Koneksi database gagal: ' . $conn->connect_error]));
|
die(json_encode(['error' => 'Koneksi database gagal: ' . $conn->connect_error]));
|
||||||
}
|
}
|
||||||
$conn->set_charset('utf8mb4');
|
|
||||||
|
$conn->query("CREATE DATABASE IF NOT EXISTS `$db` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci");
|
||||||
|
$conn->select_db($db);
|
||||||
|
$conn->set_charset('utf8mb4');
|
||||||
|
|
||||||
|
function getDB() {
|
||||||
|
global $conn;
|
||||||
return $conn;
|
return $conn;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Header CORS & JSON untuk semua response
|
|
||||||
header('Content-Type: application/json; charset=utf-8');
|
header('Content-Type: application/json; charset=utf-8');
|
||||||
header('Access-Control-Allow-Origin: *');
|
header('Access-Control-Allow-Origin: *');
|
||||||
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS');
|
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS');
|
||||||
header('Access-Control-Allow-Headers: Content-Type');
|
header('Access-Control-Allow-Headers: Content-Type');
|
||||||
|
|
||||||
// Handle preflight OPTIONS request
|
|
||||||
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
|
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
|
||||||
http_response_code(200);
|
http_response_code(200);
|
||||||
exit();
|
exit();
|
||||||
|
|||||||
+31
-48
@@ -1,13 +1,32 @@
|
|||||||
<?php
|
<?php
|
||||||
// ============================================================
|
$host_sekarang = $_SERVER['HTTP_HOST'];
|
||||||
// KONFIGURASI DATABASE – WebGIS SPBU
|
|
||||||
// File: config.php
|
|
||||||
// ============================================================
|
|
||||||
|
|
||||||
define('DB_HOST', getenv('DB_HOST') ?: 'localhost');
|
if (strpos($host_sekarang, 'localhost') !== false || strpos($host_sekarang, '127.0.0.1') !== false) {
|
||||||
define('DB_USER', getenv('DB_USER') ?: 'root');
|
$host = "localhost";
|
||||||
define('DB_PASS', getenv('DB_PASS') !== false ? getenv('DB_PASS') : '');
|
$user = "root";
|
||||||
define('DB_NAME', getenv('SPBU_DB_NAME') ?: 'webgis_spbu');
|
$pass = "";
|
||||||
|
$db = "webgis_spbu";
|
||||||
|
} else {
|
||||||
|
$host = "to00g0c4cwsws8gsoc4c08og";
|
||||||
|
$user = "mysql";
|
||||||
|
$pass = "FzeWTKBJzGMHk47S6UI0w0wdFLKbANsrfoFDZDwVnxNDFS1qtBT9lFFcTfyJgdcf";
|
||||||
|
$db = "webgis_spbu";
|
||||||
|
}
|
||||||
|
|
||||||
|
$conn = new mysqli($host, $user, $pass);
|
||||||
|
if ($conn->connect_error) {
|
||||||
|
http_response_code(500);
|
||||||
|
die(json_encode(['error' => 'Koneksi MySQL gagal: ' . $conn->connect_error]));
|
||||||
|
}
|
||||||
|
|
||||||
|
$conn->query("CREATE DATABASE IF NOT EXISTS `$db` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci");
|
||||||
|
$conn->select_db($db);
|
||||||
|
$conn->set_charset('utf8mb4');
|
||||||
|
|
||||||
|
function getDB() {
|
||||||
|
global $conn;
|
||||||
|
return $conn;
|
||||||
|
}
|
||||||
|
|
||||||
function jsonError($message, $code = 500) {
|
function jsonError($message, $code = 500) {
|
||||||
http_response_code($code);
|
http_response_code($code);
|
||||||
@@ -15,32 +34,8 @@ function jsonError($message, $code = 500) {
|
|||||||
exit();
|
exit();
|
||||||
}
|
}
|
||||||
|
|
||||||
function getDB() {
|
|
||||||
mysqli_report(MYSQLI_REPORT_OFF);
|
|
||||||
|
|
||||||
$conn = new mysqli(DB_HOST, DB_USER, DB_PASS);
|
|
||||||
if ($conn->connect_error) {
|
|
||||||
http_response_code(500);
|
|
||||||
die(json_encode(['error' => 'Koneksi MySQL gagal: ' . $conn->connect_error]));
|
|
||||||
}
|
|
||||||
|
|
||||||
$dbName = DB_NAME;
|
|
||||||
if (!$conn->query("CREATE DATABASE IF NOT EXISTS `{$dbName}` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci")) {
|
|
||||||
http_response_code(500);
|
|
||||||
die(json_encode(['error' => 'Gagal membuat database: ' . $conn->error]));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!$conn->select_db($dbName)) {
|
|
||||||
http_response_code(500);
|
|
||||||
die(json_encode(['error' => 'Gagal memilih database: ' . $conn->error]));
|
|
||||||
}
|
|
||||||
|
|
||||||
$conn->set_charset('utf8mb4');
|
|
||||||
return $conn;
|
|
||||||
}
|
|
||||||
|
|
||||||
function ensureSpbuSchema($db) {
|
function ensureSpbuSchema($db) {
|
||||||
if (!$db->query("
|
$db->query("
|
||||||
CREATE TABLE IF NOT EXISTS data_spbu (
|
CREATE TABLE IF NOT EXISTS data_spbu (
|
||||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||||
nama_spbu VARCHAR(200) NOT NULL,
|
nama_spbu VARCHAR(200) NOT NULL,
|
||||||
@@ -52,15 +47,7 @@ function ensureSpbuSchema($db) {
|
|||||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
|
||||||
")) {
|
");
|
||||||
jsonError('Gagal membuat tabel data_spbu: ' . $db->error);
|
|
||||||
}
|
|
||||||
|
|
||||||
$check = $db->query("SHOW COLUMNS FROM data_spbu LIKE 'alamat'");
|
|
||||||
if ($check && $check->num_rows === 0) {
|
|
||||||
$db->query("ALTER TABLE data_spbu ADD COLUMN alamat VARCHAR(300) NOT NULL DEFAULT '' AFTER nama_spbu");
|
|
||||||
$db->query("UPDATE data_spbu SET alamat = CONCAT(nama_spbu, ', Pontianak') WHERE alamat = ''");
|
|
||||||
}
|
|
||||||
|
|
||||||
$countRes = $db->query("SELECT COUNT(*) AS total FROM data_spbu");
|
$countRes = $db->query("SELECT COUNT(*) AS total FROM data_spbu");
|
||||||
if ($countRes && (int)$countRes->fetch_assoc()['total'] === 0) {
|
if ($countRes && (int)$countRes->fetch_assoc()['total'] === 0) {
|
||||||
@@ -78,12 +65,7 @@ function seedSpbuSampleData($db) {
|
|||||||
['SPBU Jl. Tanjung Raya', 'Jl. Tanjung Raya No. 101, Pontianak', '0812-1111-0006', 'Tidak', -0.0580, 109.3300],
|
['SPBU Jl. Tanjung Raya', 'Jl. Tanjung Raya No. 101, Pontianak', '0812-1111-0006', 'Tidak', -0.0580, 109.3300],
|
||||||
['SPBU Jl. Veteran', 'Jl. Veteran No. 33, Pontianak', '0812-1111-0007', 'Ya', -0.0450, 109.3380],
|
['SPBU Jl. Veteran', 'Jl. Veteran No. 33, Pontianak', '0812-1111-0007', 'Ya', -0.0450, 109.3380],
|
||||||
];
|
];
|
||||||
|
$stmt = $db->prepare("INSERT INTO data_spbu (nama_spbu, alamat, no_wa, buka_24_jam, latitude, longitude) VALUES (?, ?, ?, ?, ?, ?)");
|
||||||
$stmt = $db->prepare(
|
|
||||||
"INSERT INTO data_spbu (nama_spbu, alamat, no_wa, buka_24_jam, latitude, longitude)
|
|
||||||
VALUES (?, ?, ?, ?, ?, ?)"
|
|
||||||
);
|
|
||||||
|
|
||||||
foreach ($samples as $row) {
|
foreach ($samples as $row) {
|
||||||
[$nama, $alamat, $wa, $jam, $lat, $lng] = $row;
|
[$nama, $alamat, $wa, $jam, $lat, $lng] = $row;
|
||||||
$stmt->bind_param('ssssdd', $nama, $alamat, $wa, $jam, $lat, $lng);
|
$stmt->bind_param('ssssdd', $nama, $alamat, $wa, $jam, $lat, $lng);
|
||||||
@@ -101,3 +83,4 @@ if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
|
|||||||
http_response_code(200);
|
http_response_code(200);
|
||||||
exit();
|
exit();
|
||||||
}
|
}
|
||||||
|
?>
|
||||||
@@ -1,36 +0,0 @@
|
|||||||
services:
|
|
||||||
web:
|
|
||||||
build: .
|
|
||||||
ports:
|
|
||||||
- "8087:80"
|
|
||||||
environment:
|
|
||||||
DB_HOST: db
|
|
||||||
DB_USER: webgis
|
|
||||||
DB_PASS: webgis123
|
|
||||||
POVERTY_DB_NAME: webgis_p3
|
|
||||||
SPBU_DB_NAME: webgis_spbu
|
|
||||||
JALAN_DB_NAME: WEB_GIS
|
|
||||||
depends_on:
|
|
||||||
db:
|
|
||||||
condition: service_healthy
|
|
||||||
|
|
||||||
db:
|
|
||||||
image: mysql:8.0
|
|
||||||
environment:
|
|
||||||
MYSQL_ROOT_PASSWORD: root123
|
|
||||||
MYSQL_USER: webgis
|
|
||||||
MYSQL_PASSWORD: webgis123
|
|
||||||
MYSQL_DATABASE: webgis_p3
|
|
||||||
ports:
|
|
||||||
- "3307:3306"
|
|
||||||
volumes:
|
|
||||||
- mysql_data:/var/lib/mysql3
|
|
||||||
- ./docker:/docker-entrypoint-initdb.d:ro
|
|
||||||
healthcheck:
|
|
||||||
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-uroot", "-proot123"]
|
|
||||||
interval: 5s
|
|
||||||
timeout: 5s
|
|
||||||
retries: 10
|
|
||||||
|
|
||||||
volumes:
|
|
||||||
mysql_data3:
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
<VirtualHost *:80>
|
|
||||||
DocumentRoot /var/www/html
|
|
||||||
DirectoryIndex index.html index.php
|
|
||||||
|
|
||||||
<Directory /var/www/html>
|
|
||||||
Options Indexes FollowSymLinks
|
|
||||||
AllowOverride All
|
|
||||||
Require all granted
|
|
||||||
</Directory>
|
|
||||||
|
|
||||||
ErrorLog ${APACHE_LOG_DIR}/error.log
|
|
||||||
CustomLog ${APACHE_LOG_DIR}/access.log combined
|
|
||||||
</VirtualHost>
|
|
||||||
@@ -1,241 +0,0 @@
|
|||||||
-- Buat database
|
|
||||||
CREATE DATABASE IF NOT EXISTS webgis_p3 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
CREATE DATABASE IF NOT EXISTS webgis_spbu CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
CREATE DATABASE IF NOT EXISTS WEB_GIS CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
|
|
||||||
-- Kasih akses user webgis
|
|
||||||
GRANT ALL PRIVILEGES ON webgis_p3.* TO 'webgis'@'%';
|
|
||||||
GRANT ALL PRIVILEGES ON webgis_spbu.* TO 'webgis'@'%';
|
|
||||||
GRANT ALL PRIVILEGES ON WEB_GIS.* TO 'webgis'@'%';
|
|
||||||
FLUSH PRIVILEGES;
|
|
||||||
|
|
||||||
-- Import data webgis_p3
|
|
||||||
USE webgis_p3;
|
|
||||||
-- ============================================================
|
|
||||||
-- DATABASE LENGKAP: webgis_p3
|
|
||||||
-- WebGIS Poverty Mapping + Sistem Login (3 Role)
|
|
||||||
-- Import file ini ke Laragon phpMyAdmin
|
|
||||||
-- ============================================================
|
|
||||||
|
|
||||||
CREATE DATABASE IF NOT EXISTS webgis_p3
|
|
||||||
CHARACTER SET utf8mb4
|
|
||||||
COLLATE utf8mb4_unicode_ci;
|
|
||||||
|
|
||||||
USE webgis_p3;
|
|
||||||
|
|
||||||
-- ── Tabel Data Jalan (Polyline) ────────────────────────────
|
|
||||||
CREATE TABLE IF NOT EXISTS data_jalan (
|
|
||||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
||||||
nama_jalan VARCHAR(200) NOT NULL,
|
|
||||||
status ENUM('Nasional','Provinsi','Kabupaten') NOT NULL DEFAULT 'Kabupaten',
|
|
||||||
panjang_m DOUBLE NOT NULL DEFAULT 0,
|
|
||||||
geojson LONGTEXT NOT NULL,
|
|
||||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
||||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
||||||
|
|
||||||
-- ── Tabel Data Parsil Tanah (Polygon) ─────────────────────
|
|
||||||
CREATE TABLE IF NOT EXISTS data_parsil (
|
|
||||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
||||||
no_parsil VARCHAR(100) NOT NULL,
|
|
||||||
pemilik VARCHAR(200) NOT NULL,
|
|
||||||
status ENUM('SHM','HGB','HGU','HP') NOT NULL DEFAULT 'SHM',
|
|
||||||
luas_m2 DOUBLE NOT NULL DEFAULT 0,
|
|
||||||
geojson LONGTEXT NOT NULL,
|
|
||||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
||||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
||||||
|
|
||||||
-- ── Tabel Data SPBU (Point/Marker) ────────────────────────
|
|
||||||
CREATE TABLE IF NOT EXISTS data_spbu (
|
|
||||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
||||||
nama_spbu VARCHAR(200) NOT NULL,
|
|
||||||
no_wa VARCHAR(20) NOT NULL,
|
|
||||||
buka_24_jam ENUM('Ya','Tidak') NOT NULL DEFAULT 'Tidak',
|
|
||||||
latitude DOUBLE NOT NULL,
|
|
||||||
longitude DOUBLE NOT NULL,
|
|
||||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
||||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
||||||
|
|
||||||
-- ── Data Contoh SPBU ──────────────────────────────────────
|
|
||||||
INSERT INTO data_spbu (nama_spbu, no_wa, buka_24_jam, latitude, longitude) VALUES
|
|
||||||
('SPBU Jl. Ahmad Yani', '0812-1111-0001', 'Ya', -0.0400, 109.3200),
|
|
||||||
('SPBU Jl. Gajah Mada', '0812-1111-0002', 'Ya', -0.0520, 109.3450),
|
|
||||||
('SPBU Jl. Diponegoro', '0812-1111-0003', 'Tidak', -0.0610, 109.3600),
|
|
||||||
('SPBU Jl. Sutan Syahrir', '0812-1111-0004', 'Tidak', -0.0480, 109.3700),
|
|
||||||
('SPBU Jl. Kom. Yos Sudarso', '0812-1111-0005', 'Ya', -0.0350, 109.3550);
|
|
||||||
|
|
||||||
-- ── Tabel Data Kemiskinan (Point/Marker) ──────────────────
|
|
||||||
CREATE TABLE IF NOT EXISTS data_kemiskinan (
|
|
||||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
||||||
nama_kk VARCHAR(200) NOT NULL,
|
|
||||||
jumlah_kk INT NOT NULL DEFAULT 1,
|
|
||||||
alamat TEXT NOT NULL,
|
|
||||||
latitude DOUBLE NOT NULL,
|
|
||||||
longitude DOUBLE NOT NULL,
|
|
||||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
||||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
||||||
|
|
||||||
-- ── Tabel Data Rumah Ibadah (Point/Marker + Radius Buffer)
|
|
||||||
CREATE TABLE IF NOT EXISTS data_masjid (
|
|
||||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
||||||
nama_masjid VARCHAR(200) NOT NULL,
|
|
||||||
jenis ENUM('Masjid','Mushola','Gereja','Pura','Vihara','Klenteng') NOT NULL DEFAULT 'Masjid',
|
|
||||||
pic_masjid VARCHAR(200) NOT NULL,
|
|
||||||
alamat TEXT NOT NULL,
|
|
||||||
radius_m INT NOT NULL DEFAULT 500,
|
|
||||||
latitude DOUBLE NOT NULL,
|
|
||||||
longitude DOUBLE NOT NULL,
|
|
||||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
||||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
||||||
|
|
||||||
-- ── Tabel Users (Sistem Login 3 Role) ─────────────────────
|
|
||||||
CREATE TABLE IF NOT EXISTS users (
|
|
||||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
||||||
username VARCHAR(100) NOT NULL UNIQUE,
|
|
||||||
nama_lengkap VARCHAR(200) NOT NULL,
|
|
||||||
role ENUM('admin','petugas','pengurus','walikota') NOT NULL,
|
|
||||||
password_hash VARCHAR(255) NOT NULL,
|
|
||||||
aktif TINYINT(1) NOT NULL DEFAULT 1,
|
|
||||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
||||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
||||||
INDEX idx_role (role),
|
|
||||||
INDEX idx_aktif (aktif)
|
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
||||||
|
|
||||||
-- ── Akun Demo ─────────────────────────────────────────────
|
|
||||||
-- Password semua akun: "password" (bcrypt via PHP PASSWORD_DEFAULT)
|
|
||||||
INSERT INTO users (username, nama_lengkap, role, password_hash) VALUES
|
|
||||||
(
|
|
||||||
'admin',
|
|
||||||
'Administrator Sistem',
|
|
||||||
'admin',
|
|
||||||
'$2y$10$mhMxyKlOSSTQxfmWXEncfe1AF56CJ8fb.v0h0CYZ.ELQQd8iP5LrG'
|
|
||||||
),
|
|
||||||
(
|
|
||||||
'pengurus',
|
|
||||||
'Pengurus Rumah Ibadah',
|
|
||||||
'pengurus',
|
|
||||||
'$2y$10$mhMxyKlOSSTQxfmWXEncfe1AF56CJ8fb.v0h0CYZ.ELQQd8iP5LrG'
|
|
||||||
),
|
|
||||||
(
|
|
||||||
'walikota',
|
|
||||||
'Walikota Pontianak',
|
|
||||||
'walikota',
|
|
||||||
'$2y$10$mhMxyKlOSSTQxfmWXEncfe1AF56CJ8fb.v0h0CYZ.ELQQd8iP5LrG'
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
-- Import data webgis_spbu
|
|
||||||
USE webgis_spbu;
|
|
||||||
-- ============================================================
|
|
||||||
-- DATABASE: webgis_spbu
|
|
||||||
-- Pertemuan 3 – Layer Groups and Layers Control
|
|
||||||
-- Data SPBU dengan 2 Layer Group: Buka 24 Jam & Tidak 24 Jam
|
|
||||||
-- ============================================================
|
|
||||||
|
|
||||||
CREATE DATABASE IF NOT EXISTS webgis_spbu
|
|
||||||
CHARACTER SET utf8mb4
|
|
||||||
COLLATE utf8mb4_unicode_ci;
|
|
||||||
|
|
||||||
USE webgis_spbu;
|
|
||||||
|
|
||||||
-- buka_24_jam: 'Ya' → Layer Group "SPBU Buka 24 Jam"
|
|
||||||
-- 'Tidak' → Layer Group "SPBU Tidak Buka 24 Jam"
|
|
||||||
CREATE TABLE IF NOT EXISTS data_spbu (
|
|
||||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
||||||
nama_spbu VARCHAR(200) NOT NULL,
|
|
||||||
alamat VARCHAR(300) NOT NULL,
|
|
||||||
no_wa VARCHAR(20) NOT NULL,
|
|
||||||
buka_24_jam ENUM('Ya','Tidak') NOT NULL DEFAULT 'Tidak',
|
|
||||||
latitude DOUBLE NOT NULL,
|
|
||||||
longitude DOUBLE NOT NULL,
|
|
||||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
||||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
||||||
|
|
||||||
-- Migrasi: tambah kolom alamat jika tabel lama dari PovertyMap belum punya
|
|
||||||
-- ALTER TABLE data_spbu ADD COLUMN alamat VARCHAR(300) NOT NULL DEFAULT '' AFTER nama_spbu;
|
|
||||||
-- UPDATE data_spbu SET alamat = CONCAT(nama_spbu, ', Pontianak') WHERE alamat = '';
|
|
||||||
|
|
||||||
INSERT IGNORE INTO data_spbu (nama_spbu, alamat, no_wa, buka_24_jam, latitude, longitude) VALUES
|
|
||||||
('SPBU Jl. Ahmad Yani', 'Jl. Ahmad Yani No. 12, Pontianak', '0812-1111-0001', 'Ya', -0.0400, 109.3200),
|
|
||||||
('SPBU Jl. Gajah Mada', 'Jl. Gajah Mada No. 45, Pontianak', '0812-1111-0002', 'Ya', -0.0520, 109.3450),
|
|
||||||
('SPBU Jl. Diponegoro', 'Jl. Diponegoro No. 88, Pontianak', '0812-1111-0003', 'Tidak', -0.0610, 109.3600),
|
|
||||||
('SPBU Jl. Sutan Syahrir', 'Jl. Sutan Syahrir No. 5, Pontianak', '0812-1111-0004', 'Tidak', -0.0480, 109.3700),
|
|
||||||
('SPBU Jl. Kom. Yos Sudarso', 'Jl. Kom. Yos Sudarso No. 22, Pontianak', '0812-1111-0005', 'Ya', -0.0350, 109.3550),
|
|
||||||
('SPBU Jl. Tanjung Raya', 'Jl. Tanjung Raya No. 101, Pontianak', '0812-1111-0006', 'Tidak', -0.0580, 109.3300),
|
|
||||||
('SPBU Jl. Veteran', 'Jl. Veteran No. 33, Pontianak', '0812-1111-0007', 'Ya', -0.0450, 109.3380);
|
|
||||||
|
|
||||||
-- Import data WEB_GIS
|
|
||||||
USE WEB_GIS;
|
|
||||||
-- =========================================================
|
|
||||||
-- WebGIS - Struktur Database
|
|
||||||
-- Tugas: Manajemen Data Jalan & Parsil Tanah (Kavling)
|
|
||||||
-- Database: WEB_GIS
|
|
||||||
-- Tipe Geometri: GeoJSON (LineString & Polygon)
|
|
||||||
-- =========================================================
|
|
||||||
|
|
||||||
CREATE DATABASE IF NOT EXISTS WEB_GIS
|
|
||||||
CHARACTER SET utf8mb4
|
|
||||||
COLLATE utf8mb4_unicode_ci;
|
|
||||||
|
|
||||||
USE WEB_GIS;
|
|
||||||
|
|
||||||
-- ---------------------------------------------------------
|
|
||||||
-- TABEL 1: Manajemen Data Jalan
|
|
||||||
-- Tipe Geometri : GeoJSON LineString
|
|
||||||
-- Panjang Jalan : Dihitung otomatis oleh LeafletJS (meter)
|
|
||||||
-- ---------------------------------------------------------
|
|
||||||
CREATE TABLE IF NOT EXISTS `tb_jalan` (
|
|
||||||
`id` INT NOT NULL AUTO_INCREMENT COMMENT 'Primary key jalan',
|
|
||||||
`nama_jalan` VARCHAR(100) NOT NULL COMMENT 'Nama ruas jalan',
|
|
||||||
`status_jalan` ENUM(
|
|
||||||
'Nasional',
|
|
||||||
'Provinsi',
|
|
||||||
'Kabupaten'
|
|
||||||
) NOT NULL COMMENT 'Status administrasi jalan',
|
|
||||||
`panjang_jalan` DECIMAL(12,2) NOT NULL DEFAULT '0.00' COMMENT 'Panjang jalan dalam meter (dihitung otomatis LeafletJS via L.LatLng.distanceTo)',
|
|
||||||
`geojson` JSON NOT NULL COMMENT 'Koordinat geometri dalam format GeoJSON LineString',
|
|
||||||
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
||||||
`updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
||||||
PRIMARY KEY (`id`)
|
|
||||||
) ENGINE=InnoDB
|
|
||||||
DEFAULT CHARSET=utf8mb4
|
|
||||||
COLLATE=utf8mb4_unicode_ci
|
|
||||||
COMMENT='Tabel manajemen data jalan berdasarkan status administrasi. Geometri disimpan sebagai GeoJSON LineString.';
|
|
||||||
|
|
||||||
|
|
||||||
-- ---------------------------------------------------------
|
|
||||||
-- TABEL 2: Manajemen Parsil Tanah / Kavling
|
|
||||||
-- Tipe Geometri : GeoJSON Polygon
|
|
||||||
-- Luas Tanah : Dihitung otomatis oleh LeafletJS (m²)
|
|
||||||
-- ---------------------------------------------------------
|
|
||||||
CREATE TABLE IF NOT EXISTS `tb_parsil` (
|
|
||||||
`id` INT NOT NULL AUTO_INCREMENT COMMENT 'Primary key parsil',
|
|
||||||
`nama_parsil` VARCHAR(100) NOT NULL COMMENT 'Nama atau nomor identifikasi parsil tanah',
|
|
||||||
`status_kepemilikan` ENUM(
|
|
||||||
'SHM',
|
|
||||||
'HGB',
|
|
||||||
'HGU',
|
|
||||||
'HP'
|
|
||||||
) NOT NULL COMMENT 'Status sertifikat kepemilikan: SHM=Sertifikat Hak Milik, HGB=Hak Guna Bangunan, HGU=Hak Guna Usaha, HP=Hak Pakai',
|
|
||||||
`luas_tanah` DECIMAL(16,4) NOT NULL DEFAULT '0.0000' COMMENT 'Luas tanah dalam meter persegi (dihitung otomatis LeafletJS via formula geodesic spherical)',
|
|
||||||
`geojson` JSON NOT NULL COMMENT 'Koordinat geometri dalam format GeoJSON Polygon',
|
|
||||||
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
||||||
`updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
||||||
PRIMARY KEY (`id`)
|
|
||||||
) ENGINE=InnoDB
|
|
||||||
DEFAULT CHARSET=utf8mb4
|
|
||||||
COLLATE=utf8mb4_unicode_ci
|
|
||||||
COMMENT='Tabel manajemen parsil/kavling tanah berdasarkan status kepemilikan. Geometri disimpan sebagai GeoJSON Polygon.';
|
|
||||||
|
|
||||||
|
|
||||||
-- ---------------------------------------------------------
|
|
||||||
-- Contoh Indeks untuk performa query filter
|
|
||||||
-- ---------------------------------------------------------
|
|
||||||
ALTER TABLE `tb_jalan` ADD INDEX `idx_status_jalan` (`status_jalan`);
|
|
||||||
ALTER TABLE `tb_parsil` ADD INDEX `idx_status_parsil` (`status_kepemilikan`);
|
|
||||||
-30
@@ -1,30 +0,0 @@
|
|||||||
<?php
|
|
||||||
header('Content-Type: application/json; charset=utf-8');
|
|
||||||
|
|
||||||
$checks = [
|
|
||||||
'php' => true,
|
|
||||||
'mysqli' => extension_loaded('mysqli'),
|
|
||||||
'version' => PHP_VERSION,
|
|
||||||
];
|
|
||||||
|
|
||||||
$dbHost = getenv('DB_HOST') ?: 'localhost';
|
|
||||||
$dbUser = getenv('DB_USER') ?: 'root';
|
|
||||||
$dbPass = getenv('DB_PASS') ?: '';
|
|
||||||
$dbName = getenv('POVERTY_DB_NAME') ?: 'webgis_p3';
|
|
||||||
|
|
||||||
$conn = @new mysqli($dbHost, $dbUser, $dbPass, $dbName);
|
|
||||||
$checks['database'] = [
|
|
||||||
'host' => $dbHost,
|
|
||||||
'name' => $dbName,
|
|
||||||
'ok' => !$conn->connect_error,
|
|
||||||
'message' => $conn->connect_error ?: 'Terhubung',
|
|
||||||
];
|
|
||||||
|
|
||||||
if (!$conn->connect_error) {
|
|
||||||
$conn->close();
|
|
||||||
}
|
|
||||||
|
|
||||||
$checks['ok'] = $checks['mysqli'] && $checks['database']['ok'];
|
|
||||||
|
|
||||||
http_response_code($checks['ok'] ? 200 : 503);
|
|
||||||
echo json_encode($checks, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
|
|
||||||
Reference in New Issue
Block a user