query($check_sql); if ($check_result->num_rows === 0) { sendError('Record not found', 404); } $old_data = $check_result->fetch_assoc(); // Build UPDATE query $updates = []; $allowed_fields = [ 'nama', 'jenis', 'alamat', 'kontak', 'no_wa', 'kegiatan', 'kapasitas', 'radius_meter', 'nama_kepala_keluarga', 'jumlah_anggota', 'kondisi_rumah', 'sumber_penghasilan', 'kebutuhan_prioritas', 'status_bantuan', 'latitude', 'longitude', 'status', 'panjang', 'luas', 'geom' ]; foreach ($allowed_fields as $field) { if (isset($data[$field])) { if ($field === 'geom') { if (is_array($data[$field])) { $geom_json = json_encode($data[$field]); } else { $geom_json = $data[$field]; } $updates[] = "$field = '" . $conn->real_escape_string($geom_json) . "'"; } else if (is_numeric($data[$field])) { $updates[] = "$field = " . floatval($data[$field]); } else { $updates[] = "$field = '" . $conn->real_escape_string($data[$field]) . "'"; } } } if (empty($updates)) { sendError('No fields to update', 400); } $updates[] = "updated_at = NOW()"; $sql = "UPDATE data_unified SET " . implode(', ', $updates) . " WHERE id = $id"; if ($conn->query($sql) === TRUE) { // Log activity $new_data = []; foreach ($allowed_fields as $field) { if (isset($data[$field])) { $new_data[$field] = $data[$field]; } } logActivity($conn, 'UPDATE', [ 'id' => $id, 'old_data' => $old_data, 'new_data' => $new_data ]); sendResponse(true, 'Data updated successfully', ['id' => $id]); } else { sendError('Failed to update data: ' . $conn->error, 500); } } catch (Exception $e) { sendError('Server error: ' . $e->getMessage(), 500); } finally { $conn->close(); } ?>