'error', 'message' => 'Data verifikasi tidak lengkap']); $conn->close(); exit; } $fotoSql = ''; $foto = null; if (isset($_FILES['foto']) && $_FILES['foto']['error'] === UPLOAD_ERR_OK) { $allowed = ['jpg', 'jpeg', 'png', 'gif', 'webp']; $filename = $_FILES['foto']['name']; $ext = strtolower(pathinfo($filename, PATHINFO_EXTENSION)); if (!in_array($ext, $allowed, true)) { http_response_code(400); echo json_encode(['status' => 'error', 'message' => 'Format foto hanya JPG, PNG, GIF, WEBP']); $conn->close(); exit; } if (!is_dir('uploads')) { mkdir('uploads', 0755, true); } $foto = 'uploads/' . time() . '_' . basename($filename); if (!move_uploaded_file($_FILES['foto']['tmp_name'], $foto)) { http_response_code(500); echo json_encode(['status' => 'error', 'message' => 'Gagal upload foto']); $conn->close(); exit; } $fotoSql = ', foto = ?'; } $sql = 'UPDATE verifikasi_lapangan SET jenis_target = ?, target_nama = ?, petugas_nama = ?, status_verifikasi = ?, hasil_temuan = ?, tindak_lanjut = ?, latitude = ?, longitude = ?' . $fotoSql . ' WHERE id = ?'; $stmt = $conn->prepare($sql); if (!$stmt) { http_response_code(500); echo json_encode(['status' => 'error', 'message' => $conn->error]); $conn->close(); exit; } $latitude = (float)$latitude; $longitude = (float)$longitude; if ($foto !== null) { $stmt->bind_param('sssssssddi', $jenisTarget, $targetNama, $petugasNama, $statusVerifikasi, $hasilTemuan, $tindakLanjut, $foto, $latitude, $longitude, $id); } else { $stmt->bind_param('ssssssddi', $jenisTarget, $targetNama, $petugasNama, $statusVerifikasi, $hasilTemuan, $tindakLanjut, $latitude, $longitude, $id); } if ($stmt->execute()) { echo json_encode(['status' => 'success', 'message' => 'Verifikasi lapangan berhasil diperbarui']); } else { http_response_code(500); echo json_encode(['status' => 'error', 'message' => $stmt->error]); } $stmt->close(); $conn->close(); exit; } http_response_code(405); echo json_encode(['status' => 'error', 'message' => 'Method tidak diizinkan']); $conn->close(); ?>