Files
2026-06-03 05:14:58 +00:00

178 lines
6.4 KiB
PHP

<?php
// =====================================================
// proses.php — Handler CRUD via AJAX + direct request
// =====================================================
header('Content-Type: application/json; charset=utf-8');
include 'koneksi.php';
// ── Sanitasi helper ──────────────────────────────────
function bersih($str) {
return htmlspecialchars(strip_tags(trim($str)));
}
// ── Routing ─────────────────────────────────────────
$aksi = $_POST['aksi'] ?? $_GET['aksi'] ?? '';
// ============================================================
// CREATE — Simpan objek baru
// ============================================================
if ($aksi === 'simpan') {
$nama = bersih($_POST['nama'] ?? '');
$wa = bersih($_POST['wa'] ?? '');
$jam = ($_POST['jam'] ?? 'Tidak') === 'Ya' ? 'Ya' : 'Tidak';
$jenis = bersih($_POST['jenis'] ?? '');
$koord = $_POST['koordinat'] ?? '';
// Validasi
if (!$nama) {
echo json_encode(['status' => 'error', 'message' => 'Nama wajib diisi!']);
exit;
}
$jenis_valid = ['marker', 'polyline', 'polygon'];
if (!in_array($jenis, $jenis_valid)) {
echo json_encode(['status' => 'error', 'message' => 'Jenis geometri tidak valid!']);
exit;
}
// Validasi JSON koordinat
$koord_test = json_decode($koord, true);
if ($koord_test === null) {
echo json_encode(['status' => 'error', 'message' => 'Koordinat tidak valid!']);
exit;
}
$stmt = $conn->prepare(
"INSERT INTO geometri_sigma (nama_objek, no_wa, buka_24jam, jenis_geometri, koordinat) VALUES (?, ?, ?, ?, ?)"
);
$stmt->bind_param('sssss', $nama, $wa, $jam, $jenis, $koord);
if ($stmt->execute()) {
echo json_encode(['status' => 'ok', 'id' => $stmt->insert_id, 'message' => 'Data berhasil disimpan!']);
} else {
echo json_encode(['status' => 'error', 'message' => 'Gagal menyimpan: ' . $stmt->error]);
}
$stmt->close();
exit;
}
// ============================================================
// READ — Ambil semua data (untuk reload tanpa refresh halaman)
// ============================================================
if ($aksi === 'baca') {
$result = $conn->query("SELECT * FROM geometri_sigma ORDER BY created_at DESC");
$data = [];
while ($row = $result->fetch_assoc()) {
$data[] = $row;
}
echo json_encode(['status' => 'ok', 'data' => $data]);
exit;
}
// ============================================================
// READ SINGLE — Ambil satu data berdasarkan ID
// ============================================================
if ($aksi === 'detail') {
$id = intval($_GET['id'] ?? 0);
$stmt = $conn->prepare("SELECT * FROM geometri_sigma WHERE id = ?");
$stmt->bind_param('i', $id);
$stmt->execute();
$row = $stmt->get_result()->fetch_assoc();
if ($row) {
echo json_encode(['status' => 'ok', 'data' => $row]);
} else {
echo json_encode(['status' => 'error', 'message' => 'Data tidak ditemukan']);
}
$stmt->close();
exit;
}
// ============================================================
// UPDATE — Perbarui data & koordinat
// ============================================================
if ($aksi === 'update') {
$id = intval($_POST['id'] ?? 0);
$nama = bersih($_POST['nama'] ?? '');
$wa = bersih($_POST['wa'] ?? '');
$jam = ($_POST['jam'] ?? 'Tidak') === 'Ya' ? 'Ya' : 'Tidak';
$koord = $_POST['koordinat'] ?? '';
if (!$id || !$nama) {
echo json_encode(['status' => 'error', 'message' => 'ID dan Nama wajib ada!']);
exit;
}
$fields = "nama_objek=?, no_wa=?, buka_24jam=?";
$params = [$nama, $wa, $jam];
$types = 'sss';
// Update koordinat jika dikirim (drag marker / edit polyline/polygon)
if ($koord) {
$koord_test = json_decode($koord, true);
if ($koord_test !== null) {
$fields .= ", koordinat=?";
$params[] = $koord;
$types .= 's';
}
}
$params[] = $id;
$types .= 'i';
$stmt = $conn->prepare("UPDATE geometri_sigma SET $fields WHERE id = ?");
$stmt->bind_param($types, ...$params);
if ($stmt->execute()) {
echo json_encode(['status' => 'ok', 'message' => 'Data berhasil diperbarui!']);
} else {
echo json_encode(['status' => 'error', 'message' => 'Gagal update: ' . $stmt->error]);
}
$stmt->close();
exit;
}
// ============================================================
// UPDATE KOORDINAT SAJA — khusus drag marker
// ============================================================
if ($aksi === 'update_koord') {
$id = intval($_POST['id'] ?? 0);
$koord = $_POST['koordinat'] ?? '';
if (!$id || !$koord) {
echo json_encode(['status' => 'error', 'message' => 'ID dan koordinat wajib ada!']);
exit;
}
$stmt = $conn->prepare("UPDATE geometri_sigma SET koordinat=? WHERE id=?");
$stmt->bind_param('si', $koord, $id);
if ($stmt->execute()) {
echo json_encode(['status' => 'ok', 'message' => 'Koordinat diperbarui!']);
} else {
echo json_encode(['status' => 'error', 'message' => 'Gagal: ' . $stmt->error]);
}
$stmt->close();
exit;
}
// ============================================================
// DELETE — Hapus berdasarkan ID
// ============================================================
if ($aksi === 'hapus') {
$id = intval($_POST['id'] ?? $_GET['id'] ?? 0);
if (!$id) {
echo json_encode(['status' => 'error', 'message' => 'ID tidak valid!']);
exit;
}
$stmt = $conn->prepare("DELETE FROM geometri_sigma WHERE id=?");
$stmt->bind_param('i', $id);
if ($stmt->execute()) {
echo json_encode(['status' => 'ok', 'message' => 'Data berhasil dihapus!']);
} else {
echo json_encode(['status' => 'error', 'message' => 'Gagal hapus: ' . $stmt->error]);
}
$stmt->close();
exit;
}
// ── Default: aksi tidak dikenali ─────────────────────
echo json_encode(['status' => 'error', 'message' => "Aksi '$aksi' tidak dikenali."]);