Harden Project 01 public endpoints

This commit is contained in:
Andrie
2026-06-11 23:15:42 +07:00
parent a90748d9c1
commit 6f4488c1b8
39 changed files with 1183 additions and 612 deletions
+3 -3
View File
@@ -6,8 +6,8 @@ require_once '../../koneksi.php';
$result = $conn->query("SELECT id, nama_tempat, no_wa, buka_24jam, latitude, longitude FROM lokasi_usaha ORDER BY id DESC");
if (!$result) {
echo json_encode(['status' => 'error', 'message' => $conn->error]);
exit;
error_log('Project 01 point read failed: ' . $conn->error);
json_error('Gagal memuat data lokasi.', 500);
}
$data = [];
@@ -21,4 +21,4 @@ echo json_encode([
'data' => $data
]);
$conn->close();
$conn->close();
+20 -19
View File
@@ -1,27 +1,28 @@
<?php
// api/point/hapus.php — Hapus POI
header('Content-Type: application/json');
require_once '../../auth/helper.php';
require_admin_post();
require_once '../../koneksi.php';
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
echo json_encode(['status' => 'error', 'message' => 'Method not allowed']);
exit;
}
$id = (int) ($_POST['id'] ?? 0);
if (!$id) {
echo json_encode(['status' => 'error', 'message' => 'ID tidak valid']);
exit;
$id = (int)($_POST['id'] ?? 0);
if ($id <= 0) {
json_error('ID tidak valid.', 400);
}
$stmt = $conn->prepare("DELETE FROM lokasi_usaha WHERE id = ?");
$stmt->bind_param('i', $id);
if ($stmt->execute() && $stmt->affected_rows > 0) {
echo json_encode(['status' => 'success', 'message' => 'Data berhasil dihapus']);
} else {
echo json_encode(['status' => 'error', 'message' => 'Data tidak ditemukan atau gagal dihapus']);
if (!$stmt) {
error_log('Project 01 point delete prepare failed: ' . $conn->error);
json_error('Gagal menghapus data.', 500);
}
$stmt->close();
$conn->close();
$stmt->bind_param('i', $id);
if (!$stmt->execute()) {
error_log('Project 01 point delete failed: ' . $stmt->error);
json_error('Gagal menghapus data.', 500);
}
if ($stmt->affected_rows <= 0) {
json_error('Data tidak ditemukan.', 404);
}
json_success(['message' => 'Data berhasil dihapus']);
+32 -36
View File
@@ -1,44 +1,40 @@
<?php
// api/point/simpan.php — Simpan POI baru
header('Content-Type: application/json');
require_once '../../auth/helper.php';
require_once '../../includes/validation.php';
require_admin_post();
require_once '../../koneksi.php';
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
echo json_encode(['status' => 'error', 'message' => 'Method not allowed']);
exit;
}
$nama = trim($_POST['nama_tempat'] ?? '');
$wa = trim($_POST['no_wa'] ?? '');
$buka24 = isset($_POST['buka_24jam']) ? (int) $_POST['buka_24jam'] : 0;
$lat = (float) ($_POST['latitude'] ?? 0);
$lng = (float) ($_POST['longitude'] ?? 0);
if (!$nama) {
echo json_encode(['status' => 'error', 'message' => 'Nama tempat tidak boleh kosong']);
exit;
$nama = clean_string($_POST['nama_tempat'] ?? '', 150);
$wa = clean_string($_POST['no_wa'] ?? '', 30);
$buka24 = (int)($_POST['buka_24jam'] ?? 0) === 1 ? 1 : 0;
$coords = validate_lat_lng($_POST['latitude'] ?? null, $_POST['longitude'] ?? null);
if ($nama === '' || $coords === null) {
json_error('Nama tempat dan koordinat valid wajib diisi.', 400);
}
[$lat, $lng] = $coords;
$stmt = $conn->prepare("INSERT INTO lokasi_usaha (nama_tempat, no_wa, buka_24jam, latitude, longitude) VALUES (?, ?, ?, ?, ?)");
$stmt->bind_param('ssidd', $nama, $wa, $buka24, $lat, $lng);
if ($stmt->execute()) {
$id = $conn->insert_id;
echo json_encode([
'status' => 'success',
'message' => 'Data berhasil disimpan',
'data' => [
'id' => $id,
'nama_tempat' => $nama,
'no_wa' => $wa,
'buka_24jam' => $buka24,
'latitude' => $lat,
'longitude' => $lng
]
]);
} else {
echo json_encode(['status' => 'error', 'message' => 'Gagal menyimpan: ' . $stmt->error]);
if (!$stmt) {
error_log('Project 01 point insert prepare failed: ' . $conn->error);
json_error('Gagal menyimpan data.', 500);
}
$stmt->close();
$conn->close();
$stmt->bind_param('ssidd', $nama, $wa, $buka24, $lat, $lng);
if (!$stmt->execute()) {
error_log('Project 01 point insert failed: ' . $stmt->error);
json_error('Gagal menyimpan data.', 500);
}
json_success([
'message' => 'Data berhasil disimpan',
'data' => [
'id' => $conn->insert_id,
'nama_tempat' => $nama,
'no_wa' => $wa,
'buka_24jam' => $buka24,
'latitude' => $lat,
'longitude' => $lng,
],
]);
+24 -22
View File
@@ -1,30 +1,32 @@
<?php
// api/point/update_posisi.php — Update koordinat POI (drag marker)
header('Content-Type: application/json');
require_once '../../auth/helper.php';
require_once '../../includes/validation.php';
require_admin_post();
require_once '../../koneksi.php';
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
echo json_encode(['status' => 'error', 'message' => 'Method not allowed']);
exit;
}
$id = (int) ($_POST['id'] ?? 0);
$lat = (float) ($_POST['latitude'] ?? 0);
$lng = (float) ($_POST['longitude'] ?? 0);
if (!$id) {
echo json_encode(['status' => 'error', 'message' => 'ID tidak valid']);
exit;
$id = (int)($_POST['id'] ?? 0);
$coords = validate_lat_lng($_POST['latitude'] ?? null, $_POST['longitude'] ?? null);
if ($id <= 0 || $coords === null) {
json_error('ID atau koordinat tidak valid.', 400);
}
[$lat, $lng] = $coords;
$stmt = $conn->prepare("UPDATE lokasi_usaha SET latitude = ?, longitude = ? WHERE id = ?");
$stmt->bind_param('ddi', $lat, $lng, $id);
if ($stmt->execute() && $stmt->affected_rows > 0) {
echo json_encode(['status' => 'success', 'message' => 'Posisi diperbarui']);
} else {
echo json_encode(['status' => 'error', 'message' => 'Gagal memperbarui posisi']);
if (!$stmt) {
error_log('Project 01 point position prepare failed: ' . $conn->error);
json_error('Gagal memperbarui posisi.', 500);
}
$stmt->close();
$conn->close();
$stmt->bind_param('ddi', $lat, $lng, $id);
if (!$stmt->execute()) {
error_log('Project 01 point position update failed: ' . $stmt->error);
json_error('Gagal memperbarui posisi.', 500);
}
if ($stmt->affected_rows <= 0) {
json_error('Data tidak ditemukan atau posisi tidak berubah.', 404);
}
json_success(['message' => 'Posisi diperbarui']);