false, 'error' => 'Verbindungsaufbau fehlgeschlagen: ' . pg_last_error()]); exit; } // Eingabedaten aus JSON-Body $data = file_get_contents('php://input'); // Zeige die rohen JSON-Daten zum Debuggen file_put_contents('raw_data.txt', $data . PHP_EOL, FILE_APPEND); // Überprüfen und konvertieren der Eingabedaten $data = mb_convert_encoding($data, 'UTF-8', 'auto'); pg_set_client_encoding($dbconn, "UTF8"); // JSON dekodieren $data = json_decode($data, true); if ($data === null) { echo json_encode(['success' => false, 'error' => 'Ungültiges JSON-Format']); exit; } // Überprüfen, ob die erforderlichen Felder vorhanden sind $requiredFields = ['first_name', 'last_name', 'year_of_birth', 'street', 'house_no', 'localdistrict', 'city', 'geom', 'Lat', 'Lon']; foreach ($requiredFields as $field) { if (!isset($data[$field])) { echo json_encode(['success' => false, 'error' => "Fehlende Daten: $field"]); exit; } } // Werte aus dem JSON in Variablen setzen $first_name = $data['first_name']; $last_name = $data['last_name']; $year_of_birth = $data['year_of_birth']; $street = $data['street']; $house_no = $data['house_no']; $localdistrict = $data['localdistrict']; $city = $data['city']; $geom = $data['geom']; $Lat = $data['Lat']; $Lon = $data['Lon']; $stone_position = isset($data['stone_position']) ? $data['stone_position'] : null; $status = isset($data['status']) ? $data['status'] : null; $comment = isset($data['comment']) ? $data['comment'] : null; $last_photo = isset($data['last_photo']) ? pg_escape_bytea($data['last_photo']) : null; $caretaker = isset($data['caretaker']) ? $data['caretaker'] : null; $url_wikipedia = isset($data['URL_Wikipedia']) ? $data['URL_Wikipedia'] : null; $confirmed_by = isset($data['Confirmed_by']) ? $data['Confirmed_by'] : null; $manual_address = isset($data['manual_address']) ? (bool)$data['manual_address'] : false; $url_kodb = isset($data['URL_KoDb']) ? $data['URL_KoDb'] : null; $last_cleaned = isset($data['last_cleaned']) ? $data['last_cleaned'] : null; $cleaned_by = isset($data['cleaned_by']) ? $data['cleaned_by'] : null; $instance_nr = isset($data['instance_nr']) ? $data['instance_nr'] : null; // Überprüfen, ob der Stolperstein bereits existiert $check_query = " SELECT gid FROM public.{$tablePrefix} WHERE first_name = $1 AND last_name = $2 AND year_of_birth = $3 AND street = $4 AND house_no = $5 AND localdistrict = $6 LIMIT 1; "; // Parameter für die Überprüfung $check_params = array($first_name, $last_name, $year_of_birth, $street, $house_no, $localdistrict); // Überprüfung ausführen $check_result = pg_query_params($dbconn, $check_query, $check_params); if (!$check_result) { $error_message = pg_last_error($dbconn); // Fehlernachricht abrufen echo json_encode(['success' => false, 'error' => 'Fehler bei der Überprüfung: ' . $error_message]); exit; } if (pg_num_rows($check_result) > 0) { echo json_encode([ 'success' => false, 'error' => 'Dieser Stolperstein existiert bereits an dieser Adresse.' ]); exit; } // SQL-Insert-Query vorbereiten $query = " INSERT INTO public.{$tablePrefix} ( first_name, last_name, year_of_birth, street, house_no, localdistrict, city, geom, Lat, Lon, stone_position, status, comment, last_photo, caretaker, URL_Wikipedia, Confirmed_by, manual_address, URL_KoDb, last_cleaned, cleaned_by, instance_nr ) VALUES ( $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18, $19, $20, $21, $22 ) RETURNING gid; "; // Parameter für das Query $params = array( $first_name, $last_name, $year_of_birth, $street, $house_no, $localdistrict, $city, $geom, $Lat, $Lon, $stone_position, $status, $comment, $last_photo, $caretaker, $url_wikipedia, $confirmed_by, $manual_address, $url_kodb, $last_cleaned, $cleaned_by, $instance_nr ); // Sicherstellen, dass alle 22 Werte im Array vorhanden sind if (count($params) != 22) { $errorDetails = []; foreach ($params as $index => $param) { $errorDetails[] = "Parameter " . ($index + 1) . ": " . var_export($param, true); } echo json_encode(['success' => false, 'error' => 'Es fehlen Parameter für den INSERT!', 'details' => $errorDetails]); exit; } // Query ausführen und Debug-Informationen in die Datei schreiben file_put_contents('raw_data.txt', '---------------' . PHP_EOL, FILE_APPEND); file_put_contents('raw_data.txt', $query . PHP_EOL, FILE_APPEND); file_put_contents('raw_data.txt', print_r($params, true) . PHP_EOL, FILE_APPEND); // Query ausführen $result = pg_query_params($dbconn, $query, $params); if (!$result) { $error_message = pg_last_error($dbconn); // Fehlernachricht abrufen // Fehler in der Datei speichern file_put_contents('raw_data.txt', "Fehler bei SQL-Abfrage: " . $error_message . PHP_EOL, FILE_APPEND); // Fehler auch im Browser ausgeben echo json_encode(['success' => false, 'error' => $error_message]); exit; } // Das Ergebnis des Inserts holen $row = pg_fetch_assoc($result); // Erfolgreiche Antwort mit der GID zurückgeben $response = [ 'success' => true, 'gid' => $row['gid'] // Der zurückgegebene Wert von GID ]; // Content-Type Header setzen header('Content-Type: application/json'); echo json_encode($response); // Verbindung schließen pg_free_result($result); pg_close($dbconn); ?>