'Ungültige Daten']); exit; } if (empty($data['vorname']) || empty($data['nachname']) || empty($data['email']) || empty($data['betrieb_id']) || empty($data['kurs_ids']) || !is_array($data['kurs_ids'])) { http_response_code(400); echo json_encode(['message' => 'Pflichtfelder fehlen']); exit; } $db->beginTransaction(); $stmt = $db->prepare("INSERT INTO schueler (vorname, nachname, email, geburtsdatum, betrieb_id) VALUES (:vorname, :nachname, :email, :geburtsdatum, :betrieb_id)"); $stmt->execute([ ':vorname' => $data['vorname'], ':nachname' => $data['nachname'], ':email' => $data['email'], ':geburtsdatum' => $data['geburtsdatum'] ?? null, ':betrieb_id' => $data['betrieb_id'] ]); $schueler_id = (int)$db->lastInsertId(); $angemeldete_kurse = []; foreach ($data['kurs_ids'] as $kurs_id) { $check = $db->prepare("SELECT k.name, k.max_teilnehmer, COUNT(a.id) as belegt FROM kurse k LEFT JOIN anmeldungen a ON k.id = a.kurs_id WHERE k.id = :kurs_id GROUP BY k.id"); $check->execute([':kurs_id' => $kurs_id]); $kurs = $check->fetch(); if (!$kurs) { $db->rollBack(); http_response_code(400); echo json_encode(['message'=>'Kurs nicht gefunden']); exit; } if ((int)$kurs['belegt'] >= (int)$kurs['max_teilnehmer']) { $db->rollBack(); http_response_code(400); echo json_encode(['message' => "Kurs '{$kurs['name']}' ist bereits voll"]); exit; } $insert = $db->prepare("INSERT INTO anmeldungen (schueler_id, kurs_id, anmeldedatum) VALUES (:schueler_id, :kurs_id, NOW())"); $insert->execute([':schueler_id' => $schueler_id, ':kurs_id' => $kurs_id]); $angemeldete_kurse[] = $kurs['name']; } $db->commit(); http_response_code(201); echo json_encode([ 'message' => 'Anmeldung erfolgreich', 'schueler_id' => $schueler_id, 'angemeldete_kurse' => $angemeldete_kurse ]); } catch (Exception $e) { if ($db->inTransaction()) { $db->rollBack(); } error_log("Error in anmeldung/create.php: " . $e->getMessage()); http_response_code(500); echo json_encode(['message' => 'Fehler bei der Anmeldung']); }