Fix: remove MySQL dependency, use API fetch for all pages
This commit is contained in:
+3
-100
@@ -1,102 +1,5 @@
|
||||
<?php
|
||||
/**
|
||||
* index.php
|
||||
* WebGIS Manajemen Data Jalan (Polyline) - PHP Native + MySQL + LeafletJS
|
||||
*
|
||||
* Contoh SQL untuk membuat database / tabel dan data sampel:
|
||||
*
|
||||
* CREATE DATABASE IF NOT EXISTS db_webgis CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
* USE db_webgis;
|
||||
*
|
||||
* CREATE TABLE IF NOT EXISTS t_jalan (
|
||||
* id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
* nama_jalan VARCHAR(255) NOT NULL,
|
||||
* status_jalan ENUM('nasional','provinsi','kabupaten') NOT NULL,
|
||||
* panjang_meter DECIMAL(10,2) NOT NULL,
|
||||
* koordinat_json LONGTEXT NOT NULL,
|
||||
* created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
* );
|
||||
*
|
||||
* INSERT INTO t_jalan (nama_jalan, status_jalan, panjang_meter, koordinat_json) VALUES
|
||||
* ('Jalan Ahmad Yani', 'nasional', 3200, '[[-0.0251,109.3292],[-0.0266,109.3338],[-0.0263,109.3425]]'),
|
||||
* ('Jalan Supadio', 'provinsi', 2400, '[[-0.0300,109.3270],[-0.0285,109.3335],[-0.0262,109.3420]]'),
|
||||
* ('Jalan Gajah Mada', 'kabupaten', 1800, '[[-0.0288,109.3389],[-0.0274,109.3452],[-0.0252,109.3501]]');
|
||||
*/
|
||||
|
||||
// Konfigurasi koneksi MySQL: sesuaikan dengan kredensial lokal Anda.
|
||||
$dbHost = 'localhost';
|
||||
$dbName = 'webgis_spbu';
|
||||
$dbUser = 'root';
|
||||
$dbPass = '';
|
||||
|
||||
$dsn = "mysql:host=$dbHost;dbname=$dbName;charset=utf8mb4";
|
||||
$options = [
|
||||
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
|
||||
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
|
||||
PDO::ATTR_EMULATE_PREPARES => false,
|
||||
];
|
||||
|
||||
$errors = [];
|
||||
$success = '';
|
||||
$input = [
|
||||
'nama_jalan' => '',
|
||||
'status_jalan' => '',
|
||||
'panjang_meter' => '',
|
||||
'koordinat_json' => '',
|
||||
];
|
||||
|
||||
try {
|
||||
$pdo = new PDO($dsn, $dbUser, $dbPass, $options);
|
||||
|
||||
// Pastikan tabel t_jalan ada.
|
||||
$pdo->exec("CREATE TABLE IF NOT EXISTS t_jalan (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
nama_jalan VARCHAR(255) NOT NULL,
|
||||
status_jalan ENUM('nasional','provinsi','kabupaten') NOT NULL,
|
||||
panjang_meter DECIMAL(10,2) NOT NULL,
|
||||
koordinat_json LONGTEXT NOT NULL,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;");
|
||||
|
||||
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||||
$input['nama_jalan'] = trim($_POST['nama_jalan'] ?? '');
|
||||
$input['status_jalan'] = $_POST['status_jalan'] ?? '';
|
||||
$input['panjang_meter'] = $_POST['panjang_meter'] ?? '';
|
||||
$input['koordinat_json'] = $_POST['koordinat_json'] ?? '';
|
||||
|
||||
if ($input['nama_jalan'] === '') {
|
||||
$errors[] = 'Nama Jalan harus diisi.';
|
||||
}
|
||||
if (!in_array($input['status_jalan'], ['nasional', 'provinsi', 'kabupaten'], true)) {
|
||||
$errors[] = 'Status Jalan tidak valid.';
|
||||
}
|
||||
if ($input['panjang_meter'] === '' || !is_numeric($input['panjang_meter']) || (float)$input['panjang_meter'] <= 0) {
|
||||
$errors[] = 'Panjang Jalan harus dihitung otomatis dari peta dan tidak boleh kosong.';
|
||||
}
|
||||
$coords = json_decode($input['koordinat_json'], true);
|
||||
if (!is_array($coords) || count($coords) < 2) {
|
||||
$errors[] = 'Koordinat JSON tidak valid: minimal 2 titik diperlukan.';
|
||||
}
|
||||
|
||||
if (empty($errors)) {
|
||||
$stmt = $pdo->prepare('INSERT INTO t_jalan (nama_jalan, status_jalan, panjang_meter, koordinat_json) VALUES (:nama, :status, :panjang, :koordinat)');
|
||||
$stmt->execute([
|
||||
':nama' => $input['nama_jalan'],
|
||||
':status' => $input['status_jalan'],
|
||||
':panjang' => (float)$input['panjang_meter'],
|
||||
':koordinat' => json_encode($coords, JSON_UNESCAPED_UNICODE),
|
||||
]);
|
||||
$success = 'Data jalan berhasil disimpan ke database.';
|
||||
$input = ['nama_jalan' => '', 'status_jalan' => '', 'panjang_meter' => '', 'koordinat_json' => ''];
|
||||
}
|
||||
}
|
||||
|
||||
$stmt = $pdo->query('SELECT id, nama_jalan, status_jalan, panjang_meter, koordinat_json FROM t_jalan ORDER BY id DESC');
|
||||
$jalanList = $stmt->fetchAll();
|
||||
} catch (PDOException $e) {
|
||||
$errors[] = 'Koneksi database gagal: ' . htmlspecialchars($e->getMessage());
|
||||
$jalanList = [];
|
||||
}
|
||||
// Data diambil dari API - tidak ada koneksi MySQL di frontend ini
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<html lang="id">
|
||||
@@ -244,8 +147,8 @@ try {
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
<h1>WebGIS Manajemen Data Jalan</h1>
|
||||
<p>Tambah, simpan, dan tampilkan polyline jalan dengan LeafletJS dan MySQL.</p>
|
||||
<h1>🛣️ WebGIS Manajemen Data Jalan</h1>
|
||||
<p>Tambah, simpan, dan tampilkan polyline jalan dengan LeafletJS (API Mode)</p>
|
||||
</header>
|
||||
<main>
|
||||
<section class="card">
|
||||
|
||||
@@ -1,71 +1,5 @@
|
||||
<?php
|
||||
// Koneksi database PDO
|
||||
$host = '127.0.0.1';
|
||||
$db = 'webgis_spbu';
|
||||
$user = 'root';
|
||||
$pass = '';
|
||||
$charset = 'utf8mb4';
|
||||
|
||||
$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
|
||||
$options = [
|
||||
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
|
||||
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
|
||||
PDO::ATTR_EMULATE_PREPARES => false,
|
||||
];
|
||||
|
||||
try {
|
||||
$pdo = new PDO($dsn, $user, $pass, $options);
|
||||
} catch (PDOException $e) {
|
||||
die('Koneksi gagal: ' . htmlspecialchars($e->getMessage()));
|
||||
}
|
||||
|
||||
// Buat tabel jika belum ada
|
||||
$createTableSql = "CREATE TABLE IF NOT EXISTS t_tanah (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
nama_pemilik VARCHAR(255) NOT NULL,
|
||||
status_kepemilikan ENUM('SHM', 'HGB', 'HGU', 'HP') NOT NULL,
|
||||
luas_sqm DECIMAL(10,2) NOT NULL,
|
||||
koordinat_json LONGTEXT NOT NULL,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci";
|
||||
$pdo->exec($createTableSql);
|
||||
|
||||
// Simpan data jika form disubmit
|
||||
$successMessage = '';
|
||||
$errorMessage = '';
|
||||
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||||
$namaPemilik = trim($_POST['nama_pemilik'] ?? '');
|
||||
$statusKepemilikan = $_POST['status_kepemilikan'] ?? '';
|
||||
$luasSqm = $_POST['luas_sqm'] ?? '';
|
||||
$koordinatJson = $_POST['koordinat_json'] ?? '';
|
||||
|
||||
if ($namaPemilik === '' || $statusKepemilikan === '' || $luasSqm === '' || $koordinatJson === '') {
|
||||
$errorMessage = 'Semua field harus diisi dan polygon harus dibuat sebelum submit.';
|
||||
} else {
|
||||
try {
|
||||
$stmt = $pdo->prepare('INSERT INTO t_tanah (nama_pemilik, status_kepemilikan, luas_sqm, koordinat_json) VALUES (:nama, :status, :luas, :koordinat)');
|
||||
$stmt->execute([
|
||||
':nama' => $namaPemilik,
|
||||
':status' => $statusKepemilikan,
|
||||
':luas' => $luasSqm,
|
||||
':koordinat' => $koordinatJson,
|
||||
]);
|
||||
$successMessage = 'Data tanah berhasil disimpan.';
|
||||
header('Location: ' . $_SERVER['PHP_SELF'] . '?saved=1');
|
||||
exit;
|
||||
} catch (PDOException $e) {
|
||||
$errorMessage = 'Gagal menyimpan data: ' . htmlspecialchars($e->getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Ambil semua data polygon
|
||||
$tanahData = [];
|
||||
$stmt = $pdo->query('SELECT id, nama_pemilik, status_kepemilikan, luas_sqm, koordinat_json, created_at FROM t_tanah ORDER BY created_at DESC');
|
||||
while ($row = $stmt->fetch()) {
|
||||
$row['coords'] = json_decode($row['koordinat_json'], true);
|
||||
$tanahData[] = $row;
|
||||
}
|
||||
// Data diambil dari API - tidak ada koneksi MySQL di frontend ini
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<html lang="id">
|
||||
@@ -119,10 +53,7 @@ while ($row = $stmt->fetch()) {
|
||||
|
||||
<div class="card">
|
||||
<?php if (!empty($_GET['saved']) && $_GET['saved'] == 1): ?>
|
||||
<div class="message success">Data tanah berhasil disimpan.</div>
|
||||
<?php endif; ?>
|
||||
<?php if ($errorMessage): ?>
|
||||
<div class="message error"><?= htmlspecialchars($errorMessage) ?></div>
|
||||
<div class="message success">Data tanah berhasil disimpan dari API.</div>
|
||||
<?php endif; ?>
|
||||
<div id="map"></div>
|
||||
<p class="note">Klik beberapa titik pada peta untuk membuat polygon. Tutup polygon dengan klik titik awal lagi untuk menghitung luas otomatis.</p>
|
||||
@@ -164,19 +95,8 @@ while ($row = $stmt->fetch()) {
|
||||
|
||||
<div class="card">
|
||||
<h2>Daftar Parsil Tertinggi & Detail</h2>
|
||||
<div class="info-list">
|
||||
<?php if (empty($tanahData)): ?>
|
||||
<div class="info-card">Belum ada data parsil. Tambahkan bidang tanah melalui peta dan form di atas.</div>
|
||||
<?php else: ?>
|
||||
<?php foreach ($tanahData as $tanah): ?>
|
||||
<div class="info-card">
|
||||
<strong><?= htmlspecialchars($tanah['nama_pemilik']) ?> · <?= htmlspecialchars($tanah['status_kepemilikan']) ?></strong>
|
||||
<div>Luas: <?= number_format($tanah['luas_sqm'], 2, ',', '.') ?> m²</div>
|
||||
<div>Disimpan: <?= htmlspecialchars($tanah['created_at']) ?></div>
|
||||
<div style="margin-top: 10px;"><span class="status-pill status-<?= strtolower($tanah['status_kepemilikan']) ?>"><?= htmlspecialchars($tanah['status_kepemilikan']) ?></span></div>
|
||||
</div>
|
||||
<?php endforeach; ?>
|
||||
<?php endif; ?>
|
||||
<div class="info-list" id="tanah-list">
|
||||
<div class="info-card">Memuat data dari API...</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -201,7 +121,7 @@ while ($row = $stmt->fetch()) {
|
||||
HP: '#1d4ed8'
|
||||
};
|
||||
|
||||
const existingData = <?= json_encode($tanahData, JSON_UNESCAPED_UNICODE) ?>;
|
||||
const existingData = []; // Data diambil dari API
|
||||
existingData.forEach(item => {
|
||||
if (!Array.isArray(item.coords)) return;
|
||||
const coords = item.coords.map(c => [c.lat, c.lng]);
|
||||
|
||||
Reference in New Issue
Block a user