Eigenes Projekt · Station 8 von 10

Regionale Event-Datenbank

Eine Webseite zum Stöbern in Veranstaltungen, Orten und Arten, mit Suche und Filtern, in PHP auf einer MySQL-Datenbank.

Regionale Event-Datenbank

Ziel

Eine datenbankgestützte Webseite bauen, auf der man Veranstaltungen nach Kategorie, Art, Stadtteil und Zielgruppe findet.

Umsetzung

  • Die Startseite hat zwei Reiter („TOP-Events“ und „Wohin am Wochenende“) und eine Suche mit Filtern nach Kategorie, Art, Stadtteil und Zielgruppe.
  • Listen für Veranstaltungen, Veranstaltungsorte, Arten, Kategorien und Zielgruppen und eine Detailseite mit Ort und Preis.
  • Die Daten liegen in einer MySQL-Datenbank mit rund 20 Tabellen. Die Abfragen mit Verknüpfungen über mehrere Tabellen sind in PHP mit mysqli geschrieben.
  • Ursprünglich als Next.js-Projekt begonnen, später in PHP neu gebaut.
  • Die Bilder zeigen die App mit Beispieldaten: erfundene Veranstaltungen und selbst gezeichnete Bilder statt der Fotos.

Code

Suche mit mehreren Filtern

search.php
if ($hasFilter) {
    $sql = "SELECT
            v.veranstaltung_id,
            v.titel,
            v.bild,
            o.name AS location_name,
            MIN(t.startzeit) as startzeit,
            MIN(t.ausverkauft) as ausverkauft,
            MIN(t.abgesagt) as abgesagt,
            p.beschreibung AS preis_info
            FROM veranstaltung v
            LEFT JOIN veranstaltungsort o ON v.veranstaltungsort_id = o.veranstaltungsort_id
            LEFT JOIN stadtteil s ON o.stadtteil_id = s.stadtteil_id
            LEFT JOIN veranstaltungskategorie1 k ON v.veranstaltungskategorie1_id = k.veranstaltungskategorie1_id
            LEFT JOIN veranstaltungsart1 a ON v.veranstaltungsart1_id = a.veranstaltungsart1_id
            LEFT JOIN veranstaltung_zielgruppe vz ON v.veranstaltung_id = vz.veranstaltung_id
            LEFT JOIN zielgruppe zg ON vz.zielgruppe_id = zg.zielgruppe_id
            LEFT JOIN preiskategorie p ON v.preiskategorie_id = p.preiskategorie_id
            JOIN termin t ON v.veranstaltung_id = t.veranstaltung_id
            WHERE t.startzeit >= NOW()";

    if ($searchTerm) $sql .= " AND v.titel LIKE '%$searchTerm%'";
    if ($category)   $sql .= " AND k.bezeichnung LIKE '%$category%'";
    if ($type)       $sql .= " AND a.bezeichnung LIKE '%$type%'";
    if ($location)   $sql .= " AND o.name LIKE '%$location%'";
    if ($district)   $sql .= " AND s.bezeichnung LIKE '%$district%'";
    if ($audience)   $sql .= " AND zg.bezeichnung LIKE '%$audience%'";

    $sql .= " GROUP BY v.veranstaltung_id ORDER BY startzeit ASC";

    $searchResults = mysqli_query($link, $sql);

    if (!$searchResults) $errorMsg = "DB Error: " . mysqli_error($link);
}

Aus den ausgefüllten Filtern wird die Abfrage Stück für Stück zusammengesetzt; die Treffer sind nach dem nächsten Termin sortiert.

Was ich gelernt habe

Eine Datenbank mit vielen Beziehungen abzufragen: Verknüpfungen über mehrere Tabellen, gruppierte Termine und Suchfilter.

Es ist ein unerwarteter Fehler aufgetreten. Neu laden 🗙

Verbindung wird wiederhergestellt …

Verbindung fehlgeschlagen. Nächster Versuch in Sekunden.

Verbindung fehlgeschlagen. Bitte erneut versuchen oder die Seite neu laden.

Die Sitzung wurde vom Server pausiert.

Die Sitzung konnte nicht fortgesetzt werden. Bitte erneut versuchen oder die Seite neu laden.