Moin.
Heute habe ich mal ein Problem und hoffe, dass Ihr mir auf die Sprünge helfen könnt.
Die Frage wird sein, wie ich nach dem Eintrag eines Datensatzes in die Datenbank eine Weiterleitung machen kann, um zu verhindern, dass jemand über die History wieder auf die Seite kommt oder die Seite neu lädt, und dass dadruch der Datenbank-Eintrag nochmal (und ggfs. zu einem ungünstigen Zeitpunkt) gemacht wird.
Normalerweise ist das alles ganz einfach.
Man hat ein Affenformular, wenn das Formular abgeschickt wird, wird die Seite selbst wieder aufgerufen, vor der ersten Ausgabe (i.e. vor dem Doctype) werden die Formularinhalte geprüft, dann wird auch der DB-Eintrag gemacht und dann ruft man header(„Location: xxx“); auf.
-> Problem gelöst.
Aber hier ist es anders gestrickt: Ich habe eine einzige index.php, in der die verschiedenen Seiteninhalte irgendwo im body includet werden. D.h. die Prüfung auf Formularinhalte passiert auch erst in dem includeten File, also nachdem bereits Ausgaben gemacht wurden.
Weiterleitungen per JavaScript will ich nicht.
Weiterleitungen mit header() kann ja an sich ich nur in meiner index-Datei machen. Die weiß aber nichts von dem, was die verschiedenen Seiten so machen werden (Benutzerregistrierung, Benutzer ändern, usw.).
Sind die Lösungen wirklich nur:
a) entweder alles umstellen, dass jede Seite ihre eigene PHP-Datei aufruft und nicht alles über ein zentrales index-Script geregelt und includet wird.
b) Alle möglichen Aktionen, die weitergeleitet werden sollen, direkt im index-Script abfangen und bearbeiten (das würde aber auch bedeuten, dass bei einer Änderung eines Datensatzes nicht nur das eigentliche Eintragen in die DB im index.php gemacht werden muss, sondern auch die Prüfung der Formularinhalte. D.h. ich müsste die ganze Logik, die jetzt in einem includeten Script passiert, ins index.php mit reinschreiben
Aber was ist da aufwändiger? a oder b?
Ich arbeite dabei mit Sessions und habe schon überlegt, ob es einfachere Lösungen gibt, wenn ich bestimmte Daten in der Session ($_SESSION) ablege?
Ich hoffe, das Problem kommt einigermaßen rüber? Alle Lösungen, die mir einfallen, bedeuten, dass ich quasi alles komplett umstricken müsste und das will ich irgendwie vermeiden.
Bin über alle Anregungen dankbar. Wenn noch Informationen fehlen, bitte fragen, dann werde ich versuchen, diese nachzuliefern.
Vielen Dank fürs Lesen,
-Efchen