Versionshistorie (Changelog)
Verfolgen Sie die Entwicklungsschritte und neuen Features unserer Turnierplaner-Webapp.
- Benutzerprofil: Neue Seite "Mein Profil" (verlinkt über den eigenen Namen in der Navigation) - Benutzername und E-Mail-Adresse änderbar, Passwort mit Bestätigung des aktuellen Passworts wechselbar.
- Turniervorlagen: Neuer Bereich "Als Vorlage speichern" im Tab "Optionen" - speichert Turniermodus, Team-Anzahl, alle Teamnamen sowie Altersklasse, Sichtbarkeit, Tabelle-ausblenden und weitere Einstellungen. Über die neue Seite "Meine Vorlagen" (Navigation: "📑 Vorlagen") lässt sich daraus jederzeit mit einem Klick ein neues Turnier starten - das Erstellungsformular wird komplett vorausgefüllt, inklusive aller Teamnamen, bleibt aber vollständig anpassbar. Ideal für wiederkehrende Turniere mit denselben Vereinen.
Wichtige Verhaltensänderung: Ein eingetragenes Ergebnis beendet ein Spiel nicht mehr automatisch.
- Neuer Status "Live": Ein eingetragenes Ergebnis markiert das Spiel jetzt als "🔴 Live" statt direkt als beendet. Zwischenstände zählen dadurch bewusst noch nicht für die Tabelle oder die K.o.-Weiterleitung. Ein Unentschieden als Zwischenstand ist bei K.o.-Spielen ausdrücklich erlaubt (z.B. 1:1 vor der Verlängerung).
- "Spiel beenden"-Button: Erscheint an jedem laufenden ("Live") Spiel und schließt es offiziell ab - erst dann zählt es für Tabelle/Turnierbaum-Weiterleitung. Bei K.o.-Spielen wird beim Beenden geprüft, dass kein Unentschieden vorliegt.
- "Spiel direkt beenden"-Option: Im Ergebnis-Eingabe-Fenster weiterhin als Checkbox verfügbar, für alle, die wie bisher in einem Schritt eintragen und abschließen möchten.
- "Wieder öffnen"-Button: Bereits beendete Spiele lassen sich zurück auf "Live" setzen, falls nachträglich eine Korrektur nötig ist. Wird das Spiel danach erneut beendet, korrigiert sich die K.o.-Weiterleitung automatisch (inklusive Zurücksetzen bereits gespielter Folgerunden, falls sich der Sieger geändert hat).
- Live-Ergebnisse überall sichtbar: Spielplan, Turnierbaum, Anzeigetafel, Spielort-Ansicht und Druckansicht zeigen Zwischenstände jetzt an (mit "🔴 Live"-Kennzeichnung), statt sie bis zum offiziellen Abschluss zu verbergen.
- Halbzeitstand: Im Ergebnis-Eingabe-Fenster optional zusätzlich zum Endstand eintragbar, wird auf der Spielseite und der Anzeigetafel angezeigt.
-
Spielereignisse: Neuer "📋 Ereignisse"-Link an jedem Spiel (Spielplan und Turnierbaum) - Tore, gelbe/rote Karten, Auswechslungen und freie Notizen erfassbar, jeweils mit optionaler Minute, Team und Spielername. Erscheinen live auf der Einzelspiel-Anzeigetafel (
scoreboard.php), die alle 5 Sekunden automatisch aktualisiert. -
Druckansicht: Neuer "🖨️ Drucken"-Button auf der Turnierseite öffnet eine druckoptimierte Ansicht von Spielplan und Tabelle (
print_schedule.php) - mit einer Leerspalte "Tore / Ereignisse", um bei Bedarf vor Ort von Hand mitzuschreiben, falls kein Handy/Computer griffbereit ist.
- Verspätung eintragen: Neuer Bereich im Tab "Optionen" - läuft ein Spiel oder eine Pause länger als geplant, verschiebt eine Minutenangabe alle noch nicht gespielten Spiele mit gesetzter Uhrzeit automatisch nach hinten. Bereits gespielte Spiele bleiben unverändert. Mehrfache Eingaben addieren sich zu einer Gesamtverspätung, die als Hinweis-Badge im Turnier-Header für alle Besucher sichtbar ist.
- Eintägige Turniere: Neue Einstellung bei der Turniererstellung (Standard: aktiv) - bestimmt, ob Runden "Runde 1, Runde 2, ..." statt "Spieltag 1, Spieltag 2, ..." heißen, da bei einem an einem Tag stattfindenden Spielfest die Bezeichnung "Spieltag" wenig Sinn ergibt. Gilt für Liga, Liga-Phase bei Liga+Playoffs, Gruppenphase und Finalrunde. Auch nachträglich im Tab "Optionen" umstellbar - benennt dabei automatisch alle bereits generierten Spiele um.
-
Spielkarten im Spielplan repariert: Bei längeren Teamnamen bzw. gesetztem Spielort/Uhrzeit quetschten sich Teamname, Ergebnis und die Aktions-Buttons (Anzeigetafel, Ergebnis eintragen, Termin) auf schmalen Bildschirmen ineinander - der "Anzeigetafel"-Button konnte dabei sogar teilweise unsichtbar über den Bildschirmrand hinausragen. Ursache war derselbe Flexbox-Effekt wie beim ACP-Fix in v1.5.2 (fehlendes
min-width: 0), hier aber in den Spielkarten selbst. Unterhalb von 640px Breite werden Ort/Uhrzeit, Teams+Ergebnis und Aktions-Buttons jetzt sauber untereinander gestapelt statt nebeneinander gequetscht.
Systematischer Mobile-Check mit einem Headless-Browser bei mehreren Displaybreiten (320/375/414px) deckte auf: Auf ACP-Seiten (Benutzer- und Turnierverwaltung) waren die Aktions-Buttons (Sperren, Löschen, Rolle ändern) auf Smartphones bis zu 500px außerhalb des sichtbaren Bereichs positioniert - unsichtbar und unerreichbar, nicht nur "wischbar".
- ACP-Layout korrigiert: Ursache war ein CSS-Fehler in der Flexbox-Verschachtelung des ACP-Layouts (Sidebar + Hauptbereich), der auf Mobilgeräten dazu führte, dass sich der Hauptbereich nach Inhaltsbreite statt nach verfügbarer Bildschirmbreite richtete. Zusätzlich überschrieb eine spätere CSS-Regel im Stylesheet ungewollt die für Mobilgeräte vorgesehene Korrektur (klassisches CSS-Reihenfolge-Problem).
- Breite Tabellen responsive gemacht: Alle Datentabellen (Benutzerverwaltung, Turnierverwaltung, Tabellen/Ranglisten, Turnierlisten) werden unterhalb von 700px Breite automatisch zu gestapelten Karten mit Beschriftung statt in einer breiten, potenziell abgeschnittenen Tabelle dargestellt - kein Wischen mehr nötig.
-
Vollbildmodus (
display.php) korrigiert: Die Tabellen-Darstellung dort war ebenfalls von einem verwandten Flexbox-Problem betroffen und wurde behoben. - Tab-Leiste bricht jetzt um: Auf der Turnierseite brechen die Tabs (Spielplan, Tabelle, Spielorte, Teilnehmer, Optionen, ...) bei schmalen Bildschirmen in mehrere Zeilen um, statt eine horizontal scrollbare Leiste zu erfordern.
Bewusste Ausnahme: Der Turnierbaum (K.o.-System/Playoffs) behält horizontales Scrollen innerhalb seines eigenen, klar abgegrenzten Bereichs - eine Baumstruktur mit mehreren Runden lässt sich nicht sinnvoll in eine einzelne Spalte zwängen, ohne den Überblick über den Turnierverlauf zu verlieren.
-
Vollbildmodus ohne Rücksprung:
display.phphatte keinen Link zurück zum Turnier. Neuer "← Zurück zum Turnier"-Button, und der "Vollbild"-Button wechselt jetzt zwischen Betreten/Verlassen des echten Browser-Vollbilds (inkl. passender Beschriftung). -
Anzeigetafel für einzelne Spiele: Neuer "📺 Anzeigetafel"-Button an jedem Spiel (Spielplan, Turnierbaum, Spielort-Ansicht) öffnet eine große, stadiontaugliche Einzelspiel-Anzeige (
scoreboard.php) mit Teamnamen und Spielstand. Aktualisiert sich automatisch alle 5 Sekunden per Hintergrundabfrage (kein Neuladen, kein Flackern) - sobald ein Ergebnis eingetragen wird, erscheint es dort live. Eigener Vollbild-Button inklusive.
- Spielort & Uhrzeit pro Spiel: Über den neuen "📍 Termin"-Button an jedem Spiel lassen sich Spielort und Datum/Uhrzeit unabhängig vom Ergebnis festlegen - auch schon vor dem eigentlichen Spieltermin. Wird im Spielplan direkt am jeweiligen Spiel angezeigt.
-
QR-Code & Druckansicht pro Spielort: Neuer Tab "Spielorte" (erscheint automatisch, sobald mindestens ein Spielort hinterlegt ist) listet alle Orte mit Link zur jeweiligen Detailansicht (
field.php). Diese zeigt ausschließlich die Spiele an diesem Ort in großer Schrift, inklusive QR-Code (führt zur live aktualisierten Ansicht) und druckoptimiertem Layout zum Aushängen am Platz. -
Vollbildmodus: Neuer "🖥️ Vollbild"-Button öffnet eine schlanke Ansicht ohne Navigation (
display.php) mit großer Schrift für Beamer/Monitore, automatischer Aktualisierung alle 30 Sekunden und einem Button für die native Vollbild-Funktion des Browsers. Zeigt je nach Turniertyp Tabelle, Turnierbaum oder Playoff-Baum, unter Berücksichtigung von "Tabelle ausblenden". -
Technik: Die Anzeigelogik (Spielpläne, Tabellen, Turnierbaum, Zugriffsprüfung für private Turniere) wurde aus
tournament.phpnachtournament_logic.phpzentralisiert, damitfield.phpunddisplay.phpdieselbe, bereits getestete Logik wiederverwenden - inklusive des vollständigen Zugriffsschutzes für private Turniere auf allen drei Seiten.
- Startseite ergänzt: Die Feature-Übersicht für Gäste zeigte weiterhin nur die vier Turniermodi. Ein neuer Abschnitt "Weitere Funktionen" ergänzt jetzt Altersklassen-Vorlagen, Tabelle ausblenden, Turnier teilen und private Turniere aus v1.3.0/v1.4.0/v1.4.1.
- Private Turniere: Bei der Erstellung als "Privat" markierbar - dann ausschließlich über einen geheimen Einladungslink (mit Zugangs-Token) einsehbar. Gilt auch für eingeloggte, registrierte Nutzer: ohne gültigen Link kein Zugriff, selbst mit Account nicht. Owner/Admin haben immer Zugriff. Sichtbarkeit lässt sich jederzeit im Tab "Optionen" ändern, inklusive Link-Neugenerierung (macht alte Links ungültig). Private Turniere erscheinen nie in der öffentlichen Turnierübersicht. Der "Teilen"-Button nutzt automatisch den korrekten Link inkl. Token.
-
UI-Fix: Toggle-Schalter überlappte Text: Die CSS-Regel
.form-group labelwar spezifischer als.toggle-switchund erzwangdisplay: blockstattinline-flex, sobald ein Schalter (z.B. "Tabelle für Besucher ausblenden") innerhalb eines Formularfelds lag - der Schalter-Kreis landete dadurch über dem Text statt daneben. Betraf alle drei Toggle-Schalter der App (Turniererstellung, Turnier-Optionen, ACP-Wartungsmodus).
Regelkonforme Turniere für jede Altersklasse - vom Bambini-Spielfest bis zu Senioren:
- Altersklasse bei der Turniererstellung: Auswahl von G-Jugend/Bambini bis Senioren. Je Altersklasse werden Turnier-Modus und "Tabelle ausblenden" sinnvoll vorausgewählt (nach DFB-Rahmenkonzept, Stand Reform 2024/25) - alles bleibt frei überschreibbar und lässt sich später im Tab "Optionen" jederzeit ändern.
- "Tabelle ausblenden": Für Bambini- und F-Jugend-Turniere (laut DFB explizit ohne Meisterschaftsrunde/Tabelle) kann die Rangliste für alle Besucher außer dem Ersteller ausgeblendet werden. Betrifft Liga-Tabelle, Gruppentabellen und Finalrunden-Tabelle gleichermaßen.
- Landesverband (ACP-Einstellung): Alle 21 DFB-Landesverbände zur Auswahl, wird als Referenz auf Turnierseiten mit Altersklasse angezeigt. Deutlicher Hinweis, dass die genauen Durchführungsbestimmungen je Landesverband abweichen können.
-
Fataler Fehler behoben:
changelog.phpbanddb.phpnie ein. Für eingeloggte Besucher (Session vorhanden) führte das seit v1.1.0 zu einem 500-Fehler, da der Wartungsmodus-Banner inheader.phpdie dort nicht verfügbaren Funktionenis_admin()/get_setting()aufrief. Betraf nur eingeloggte Nutzer, nicht-eingeloggte Besucher waren nicht betroffen. -
Setup-Installation abgesichert:
asset_version()ausdb.php(Cache-Busting, siehe v1.3.1) führte bei einer frischen Installation zu einem Fatal Error insetup.php, da diese Seitedb.phpbewusst nicht einbindet (Datenbank existiert zu diesem Zeitpunkt noch nicht).header.phpdefiniert die Funktion jetzt bei Bedarf selbst als Fallback.
- Startseite ergänzt: Die Feature-Übersicht für Gäste zeigte seit v1.2.0 weiterhin nur die zwei ursprünglichen Modi (Liga, K.o.-System). Die beiden neuen Modi "Liga + Playoffs" und "Gruppenphase + Finalrunde" wurden jetzt als eigene Karten ergänzt.
-
Ursache:
css/style.cssundjs/app.jswurden ohne Versionskennung eingebunden. Nach einem Update lieferte der Browser bei vielen Besuchern weiterhin die alte, zwischengespeicherteapp.jsaus dem Cache aus - dadurch fehlte z.B. der Code für den neuen "Turnier teilen"-Button aus v1.3.0 und der Button reagierte nicht auf Klicks. -
Lösung: Neue Funktion
asset_version()indb.phphängt automatisch?v=<Änderungszeitpunkt der Datei>an CSS-/JS-Links an. Bei jedem zukünftigen Datei-Upload ändert sich dieser Zeitstempel automatisch, wodurch Browser zuverlässig die neue Version nachladen - ganz ohne manuelles Hochzählen einer Versionsnummer im Code.
- "Turnier teilen"-Button: Auf jeder Turnierseite (auch für nicht angemeldete Besucher sichtbar) öffnet ein neuer Button ein Teilen-Fenster mit direktem Link zum Kopieren, QR-Code zum Scannen, sowie vorausgefüllten WhatsApp- und E-Mail-Freigaben. Auf Mobilgeräten mit Unterstützung für die native Teilen-Funktion des Betriebssystems erscheint zusätzlich ein "Teilen über..."-Button.
Zwei neue, kombinierte Turniermodi ergänzen die bisherige Liga und das klassische K.o.-System:
- Liga + Playoffs: Zunächst spielt jeder gegen jeden (Berger-System), anschließend qualifizieren sich die Bestplatzierten für einen K.o.-Baum. Die Anzahl der Playoff-Teams ist beim Erstellen frei wählbar (Zweierpotenz, z.B. Top 2/4/8/16). Die Playoffs werden manuell über die Turnierseite gestartet, sobald alle Liga-Spiele abgeschlossen sind.
- Gruppenphase + Finalrunde: Teams werden gleichmäßig auf frei wählbare Gruppen verteilt und spielen zunächst gruppenintern jeder gegen jeden. Die besten Teams jeder Gruppe (Anzahl ebenfalls frei wählbar) ziehen anschließend in eine gemeinsame Finalrunde (wieder im Liga-Modus) ein, die manuell gestartet wird.
- Neue Turnierseiten-Ansicht: Je nach Modus zeigt die Turnierseite passende Tabs (Liga-Tabelle, Playoff-Baum, Gruppentabellen, Finalrunde) sowie im Bereich "Optionen" einen Button zum Starten der jeweils nächsten Phase, inklusive Sperre, solange die vorherige Phase nicht komplett abgeschlossen ist.
-
Technik: Die Spielplan-Generierung (Berger-System, K.o.-Baum inkl. Freilos-Handling, Tabellenberechnung) wurde in
tournament_logic.phpzentralisiert und wird sowohl bei der Ersterstellung als auch beim späteren Phasenwechsel wiederverwendet.
Größeres Feature-Release mit Admin-Bereich, Rechtstexten und komplett neuem Design:
-
Admin Control Panel (ACP): Neuer Bereich unter
/acp/mit Dashboard (Statistiken), Benutzerverwaltung (Rollen vergeben, Konten sperren/entsperren/löschen), Turnierverwaltung (Übersicht & Verwaltung aller Turniere, nicht nur der eigenen) und Seiteneinstellungen. -
Rollen- & Sperrsystem: Benutzer haben jetzt eine Rolle (
user/admin) und einen Status (active/banned). Der erste bei der Installation angelegte Account wird automatisch Administrator. Administratoren können ab sofort alle Turniere verwalten und Ergebnisse eintragen, nicht nur ihre eigenen. -
Impressum & Datenschutz: Neue Seiten
impressum.phpunddatenschutz.php, verlinkt im Footer. Inhalte werden bequem im ACP unter "Einstellungen" gepflegt (keine fest einprogrammierten Angaben). Die Datenschutzerklärung ist eine allgemeine DSGVO-Vorlage, die den Verantwortlichen automatisch aus dem Impressum übernimmt. - Wartungsmodus: Per Schalter im ACP aktivierbar. Während der Wartung sehen normale Besucher eine Wartungsseite, Administratoren behalten vollen Zugriff.
- Neues helles Design: Komplett überarbeitetes Theme in Rasen-Grün & Sport-Blau anstelle des bisherigen Dark-Themes, inklusive neuer Komponenten für das ACP (Sidebar, Toggle-Schalter, Rollen-Badges).
Kritischer Bugfix für einen 500-Internal-Server-Error beim Absenden von Formularen:
-
Fataler Fehler behoben: Die Funktion
verify_csrf_token()war inheader.phpdefiniert, wurde aber inlogin.php,register.php,create_tournament.phpundupdate_match.phpbereits in der POST-Verarbeitung aufgerufen – also bevorheader.phpüberhaupt eingebunden wurde. Ergebnis: "Call to undefined function verify_csrf_token()" und ein 500-Fehler bei jeder Formularübermittlung (Login, Registrierung, Turniererstellung, Ergebniseingabe). -
Lösung: CSRF-Token-Erzeugung und
verify_csrf_token()wurden nachdb.phpverschoben, da diese Datei viarequire_onceauf allen betroffenen Seiten garantiert vor der POST-Logik geladen wird. Die doppelte Definition inheader.phpwurde entfernt (hätte sonst zu "Cannot redeclare function" geführt).
Vollumfängliche, produktionsbereite Version des Turnierplaners für all-inkl Hosting:
- Turnier-Systeme: Implementierung des K.o.-Systems (Single Elimination) mit dynamischer Gewinner-Weiterleitung im Turnierbaum.
- Jeder gegen Jeden: Spielplangenerierung nach dem Berger-System (Circle Method) inklusive automatischer Punkte- und Tordifferenzberechnung für die Tabelle.
-
Setup & Installer: Interaktive Installation (
setup.php) zur einfachen Datenbankeinrichtung und Anlage des Administrator-Kontos. -
Sicherer Login: Registrierung und Login mit sicherer
bcrypt-Passwortverschlüsselung und Schutz gegen Session-Fixation und Cross-Site Request Forgery (CSRF). - Premium UI/UX: Hochmodernes Dark-Theme Layout mit responsivem Design, Glasmorphismus-Karten und interaktiver Benutzeroberfläche.
Fertigstellung der Kernfunktionalitäten und Integration der Benutzeroberfläche:
- Interaktives Dashboard: Übersicht über eigene Turniere und Schnelleinstieg zur Erstellung.
- Ergebnis-Eingabe: Implementierung von AJAX-basierten Modals für Admins zur bequemen Eingabe von Spielergebnissen.
- Fehlerbehebung: Korrektur bei der Berechnung ungerader Mannschaftszahlen im Berger-System (Freilose wurden fälschlicherweise gewertet).
Grundgerüst und Initialisierung der Systemarchitektur:
- Datenbank-Design: Entwicklung des relationalen Schemas für Benutzer, Turniere, Teams und Spiele.
-
Styling-Fundament: Erstellung der
style.cssmit CSS-Variablen für HSL-Farben und Responsive Webdesign. - Datenbank-Klasse: Aufbau des PDO-basierten Verbindungs-Handlers mit UTF-8 Kodierung.