PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
];
try {
$pdo = new PDO($dsn, $user, $pass, $options);
} catch (Exception $e) {
die(„Datenbankverbindung fehlgeschlagen.“);
}
// —————————
// 3. BUCHUNG VERARBEITEN (POST)
// —————————
$message = „“;
$error = „“;
if ($_SERVER[‚REQUEST_METHOD‘] === ‚POST‘) {
$date = $_POST[‚date‘] ?? null;
$customer_name = trim($_POST[‚customer_name‘] ?? “);
$customer_email = trim($_POST[‚customer_email‘] ?? “);
$customer_phone = trim($_POST[‚customer_phone‘] ?? “);
$pigsNew = (int)($_POST[‚pigs‘] ?? 0);
$cowsNew = (int)($_POST[‚cows‘] ?? 0);
// Grundprüfungen
if (!$date || $customer_name === “ || $customer_email === “ || $customer_phone === “) {
$error = „Bitte alle Pflichtfelder (Datum, Name, E-Mail, Telefon) ausfüllen.“;
} elseif ($pigsNew <= 0 && $cowsNew <= 0) { $error = "Bitte geben Sie mindestens ein Schwein oder ein Rind an."; } elseif (!filter_var($customer_email, FILTER_VALIDATE_EMAIL)) { $error = "Bitte eine gültige E-Mail-Adresse eingeben."; } else { // Sicherstellen, dass es ein hinterlegter Schlachttag ist $stmt = $pdo->prepare(„
SELECT max_pigs, max_cows
FROM capacity
WHERE date = :date
„);
$stmt->execute([‚date‘ => $date]);
$capacity = $stmt->fetch();
if (!$capacity) {
$error = „Für dieses Datum ist kein Schlachttag hinterlegt.“;
} else {
// Bisherige Buchungen summieren
$stmt = $pdo->prepare(„
SELECT
COALESCE(SUM(pigs), 0) AS booked_pigs,
COALESCE(SUM(cows), 0) AS booked_cows
FROM bookings
WHERE date = :date
„);
$stmt->execute([‚date‘ => $date]);
$booked = $stmt->fetch();
$availablePigs = $capacity[‚max_pigs‘] – $booked[‚booked_pigs‘];
$availableCows = $capacity[‚max_cows‘] – $booked[‚booked_cows‘];
// Kapazität prüfen
if ($pigsNew > $availablePigs) {
$error = „Zu viele Schweine angefragt. Nur noch $availablePigs möglich.“;
} elseif ($cowsNew > $availableCows) {
$error = „Zu viele Rinder angefragt. Nur noch $availableCows möglich.“;
} else {
// Buchung speichern
$stmt = $pdo->prepare(„
INSERT INTO bookings (date, customer_name, customer_email, customer_phone, pigs, cows)
VALUES (:date, :customer_name, :customer_email, :customer_phone, :pigs, :cows)
„);
$stmt->execute([
‚date‘ => $date,
‚customer_name‘ => $customer_name,
‚customer_email‘ => $customer_email,
‚customer_phone‘ => $customer_phone,
‚pigs‘ => $pigsNew,
‚cows‘ => $cowsNew
]);
$newPigsFree = $availablePigs – $pigsNew;
$newCowsFree = $availableCows – $cowsNew;
$datumText = date(‚d.m.Y‘, strtotime($date));
// —————————
// 3a. BESTÄTIGUNGS-E-MAIL AN KUNDEN
// —————————
$subjectCustomer = „Bestätigung Ihrer Schlachtbuchung am $datumText“;
$bodyCustomer =
„Sehr geehrte/r $customer_name,
vielen Dank für Ihre Buchung.
Ihre Buchungsdaten:
Datum: $datumText
Schweine: $pigsNew
Rinder: $cowsNew
Ihre Kontaktdaten:
E-Mail: $customer_email
Telefon: $customer_phone
Verbleibende Kapazitäten an diesem Tag:
Schweine frei: $newPigsFree
Rinder frei: $newCowsFree
Sollte sich etwas an Ihrer Planung ändern, kontaktieren Sie uns bitte rechtzeitig.
Mit freundlichen Grüßen
Ihre Metzgerei“;
$headersCustomer = „From: „.$adminEmail.“\r\n“;
$headersCustomer .= „Reply-To: „.$adminEmail.“\r\n“;
@mail($customer_email, $subjectCustomer, $bodyCustomer, $headersCustomer);
// —————————
// 3b. INFO-E-MAIL AN METZGEREI
// —————————
$subjectAdmin = „Neue Schlachtbuchung am $datumText“;
$bodyAdmin =
„Neue Buchung:
Datum: $datumText
Kunde: $customer_name
E-Mail: $customer_email
Telefon: $customer_phone
Schweine: $pigsNew
Rinder: $cowsNew
Verbleibende Kapazitäten:
Schweine frei: $newPigsFree
Rinder frei: $newCowsFree“;
$headersAdmin = „From: „.$customer_email.“\r\n“;
$headersAdmin .= „Reply-To: „.$customer_email.“\r\n“;
@mail($adminEmail, $subjectAdmin, $bodyAdmin, $headersAdmin);
$message = „Buchung erfolgreich! Eine Bestätigung wurde an Ihre E-Mail-Adresse gesendet.
Verbleibende Plätze am $datumText: Schweine: $newPigsFree, Rinder: $newCowsFree.“;
}
}
}
}
// —————————
// 4. KOMMENDE SCHLACHTTAGE LADEN
// —————————
$stmt = $pdo->query(„
SELECT
c.date,
c.max_pigs,
c.max_cows,
COALESCE(SUM(b.pigs), 0) AS booked_pigs,
COALESCE(SUM(b.cows), 0) AS booked_cows
FROM capacity c
LEFT JOIN bookings b ON c.date = b.date
WHERE c.date >= CURDATE()
GROUP BY c.date, c.max_pigs, c.max_cows
ORDER BY c.date ASC
„);
$days = $stmt->fetchAll();
?>
Schlachtkalender – Online-Buchung
Hier können Sie Ihren Schlachttermin für Schweine und Rinder online buchen. Pro Schlachttag stehen nur begrenzte Kapazitäten zur Verfügung.
Verfügbare Schlachttage
| Datum | Freie Schweine | Freie Rinder |
|---|---|---|
