Mark: Reload-feste Formulardaten/$_POST Variablen

Moin !

Ja, ich weiss, dieses Thema ist schon x-mal im Forum behandelt worden, aber ich kann euch versichern, mich bereits mit allen Postings dazu intensiv beschäftigt zu haben und dennoch hab ich ein paar kleine Probleme damit:

Im Formular versende ich eine eindeutige ID an den request-handler. Dort schreibe ich als erstes die ID in die DB und bei einem Reload kann ich so problemlos feststellen, ob ein Reload durchgeführt wurde.

1. Irgendwann wird die Tabelle wo die eindeutige ID drin abgelegt wurde länger und länger und länger..Oder sollten die einzelnen IDs wieder irgendwann entfernt werden ? Wenn ja, wann ? Wie lösst Ihr das ?

2. Ich kann doch nicht bei jedem Kontaktformular davon ausgehen, dass eine DB vorhanden ist...Hab ich als Alternative lediglich die Möglichkeit, statt einer DB ne Textdatei zu benutzen (siehe auch Punkt 1) ? Oder kann man das auch anders lösen ?

Sie andere Lösungsmöglichkeit mit dem Redirect die teilweise aufgeführt wurde, hab ich nicht richtig kapiert:
1. Formulardaten werden an den Request-Handler gesendet
2. Der führt nach abarbeitung einen Redirect auf eine Art "Vielen Dank" Seite durch.
3. "Vielen Dank" Seite kann problemlos reloaded werden.
Jo, und was ist, wenn der Benutzer einmal auf Zurück klickt, also wieder auf der Seite ist, wo der Request-Handler sitzt und erst dann einen Reload durchführt ? Dann hab das Reload-Problem ja wieder..

Kann mir jemand helfen/folgen ?

Gruß
Mark

  1. Hello,

    1. Irgendwann wird die Tabelle wo die eindeutige ID drin abgelegt wurde länger und länger und länger..Oder sollten die einzelnen IDs wieder irgendwann entfernt werden ? Wenn ja, wann ? Wie lösst Ihr das ?

    Eine Datenbank hat den Vorteil des schnellen satzweisen (selektiven) Zugriffes. Du kannst auch einfach eine Aufräumroutine einbauen, die entweder jeden Tag einmal durch einen Cronjob oder bei jedem Formularaufruf mit eine Wahrscheinlichkeit startet. PHP macht das ja so mit den Sessiondateen und das funktioniert so leidelich. Besser wäre es, wenn man in jedem Datensatz die gewünschte Lebensdauer angeben könnte und nicht für alle zusammen.

    1. Ich kann doch nicht bei jedem Kontaktformular davon ausgehen, dass eine DB vorhanden ist...Hab ich als Alternative lediglich die Möglichkeit, statt einer DB ne Textdatei zu benutzen (siehe auch Punkt 1) ? Oder kann man das auch anders lösen ?

    Du kannst dafür selbstverständlich auch ein Flatfile benutzen. Ob das dann eine "Textdatei" ist, liegt ganz in Deinem Ermessen. Das könnte auch eine direktgestreute Datei sein, oder eine mit einem serialisiertem Array.

    PHP stellt dafür die Funktionen pack(), unpack(), serialize(), unserialze() und ggf. base64encode() und base64decode() zur Verfügung.

    Die andere Lösungsmöglichkeit mit dem Redirect die teilweise aufgeführt wurde, hab ich nicht richtig kapiert:

    1. Formulardaten werden an den Request-Handler gesendet
    2. Der führt nach abarbeitung einen Redirect auf eine Art "Vielen Dank" Seite durch.
    3. "Vielen Dank" Seite kann problemlos reloaded werden.
      Jo, und was ist, wenn der Benutzer einmal auf Zurück klickt, also wieder auf der Seite ist, wo der Request-Handler sitzt und erst dann einen Reload durchführt ? Dann hab das Reload-Problem ja wieder..

    Dann könnte es sein, dass die Seite nicht mehr gültig ist. Ich würde genau dann die benutzerfreundlichkeit einbauen und den User darauf hinweisen, dass er dieses Formular doch schon abgeschickt hat. Du kannst es dank Deiner IDs ja schließlich festetellen.

    Kann mir jemand helfen/folgen ?

    Beides.

    Die Flatfile-Variante erfordert genaues Nachdenken über Locking und benötigte Methoden, da man das dann selber programmieren muss. Die Datenbankvariante erfordert eben immer eine DB-Tabelle...

    Liebe Grüße aus http://www.braunschweig.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    1. Vielen Dank schonmal - also entweder DB oder File - sonst no chance

      Dann könnte es sein, dass die Seite nicht mehr gültig ist. Ich würde genau dann die benutzerfreundlichkeit einbauen und den User darauf hinweisen, dass er dieses Formular doch schon abgeschickt hat. Du kannst es dank Deiner IDs ja schließlich festetellen.

      »»

      Dieser Löungsvorschlag war, wenn ich das richtig verstanden hatte, als alternative zur "ID-Lösung" gedacht..Es existiert also keine ID zum Vergleich..

      Gruß
      Mark

    2. Moin!

      Jo, und was ist, wenn der Benutzer einmal auf Zurück klickt, also wieder auf der Seite ist, wo der Request-Handler sitzt und erst dann einen Reload durchführt ? Dann hab das Reload-Problem ja wieder..

      Dann könnte es sein, dass die Seite nicht mehr gültig ist.

      Eine Seite wird genau dann als "nicht mehr gültig" bemeckert, wenn sie als POST-Request vom Server angefordert wurde. Und ein Reload solch einer Seite, wie vom Browser oftmals vorgeschlagen, würde die der Seite zugrundeliegenden Formulardaten erneut an den Server senden. Genauso, wie bei einem GET-Request, auch mit URL-Parametern, ein Reload genau diese Parameter erneut zum Server schickt. Was das Skript - absolut korrekt - zur erneuten, identischen Arbeit veranlaßt. Und eben ein Kontaktformular zweimal senden würde.

      Ein Redirect ist nach meinem Empfinden die sicherste Methode, ein versehentliches Doppelabsenden zu vermeiden.

      - Sven Rautenberg

      --
      "Habe den Mut, dich deines eigenen Verstandes zu bedienen!" (Immanuel Kant)
      1. Hello,

        Ein Redirect ist nach meinem Empfinden die sicherste Methode, ein versehentliches Doppelabsenden zu vermeiden.

        Ich wage es kaum, dir da zu widersprechen.
        Wie wahrscheinlich ist es aber noch, dass Browser kein 301 oder 302 (welcher ist hier der richtige?) mögen und es nicht unterstützen?

        Liebe Grüße aus http://www.braunschweig.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
  2. Moin!

    Sie andere Lösungsmöglichkeit mit dem Redirect die teilweise aufgeführt wurde, hab ich nicht richtig kapiert:

    1. Formulardaten werden an den Request-Handler gesendet
    2. Der führt nach abarbeitung einen Redirect auf eine Art "Vielen Dank" Seite durch.
    3. "Vielen Dank" Seite kann problemlos reloaded werden.
      Jo, und was ist, wenn der Benutzer einmal auf Zurück klickt, also wieder auf der Seite ist, wo der Request-Handler sitzt und erst dann einen Reload durchführt ? Dann hab das Reload-Problem ja wieder..

    [ ] Du hast diese Lösung ausprobiert und weißt, wie sich der Browser bei Redirects verhält.

    Glaub mir: Es funktioniert prima. Weil: Der Browser kennt bei dieser Methode nur 2 Seiten. Die erste Seite ist das Formular, und die zweite Seite ist die Danke-Seite. Die Abschicke-Phase dazwischen wird durch den Redirect eliminiert, zumindest, was den Eintrag in der Browser-History angeht. Denn ein HTTP-Redirect besagt ja: Nimm nicht mich, sondern stattdessen XYZ als zu ladende Seite.

    - Sven Rautenberg

    --
    "Habe den Mut, dich deines eigenen Verstandes zu bedienen!" (Immanuel Kant)