Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Weiterleitung beim Absenden eines Formulars (https://www.delphipraxis.net/99708-weiterleitung-beim-absenden-eines-formulars.html)

Matze 16. Sep 2007 13:44


Weiterleitung beim Absenden eines Formulars
 
Hallo,

auf meiner Website ist es so, dass man Dinge kommentieren kann. Nach dem Absenden des Kommentars sieht man ohne lange Wartezeit die Meldung über den erfolgreichen Eintrag. Das funktioniert einwandfrei, hat jedoch den Nachteil, dass beim Aktualisieren der Seite (F5) die Formulardaten neu gesendet werden. Das merkt man daran, dass die Browser einen darüber mit einem entsprechenden Dialog informieren und nachfragen, ob die Daten erneut gesendet werden sollen.
Momentan ist die Weiterleitung mittels der PHP-Funktion header() gelöst.

Auf eine Wartezeit und somit eine HTML-Weiterleitung möchte ich verzichten. Eine AJAX-Lösung, die ich spaßeshalber getestet habe, funktionierte problemlos, doch AJAX bzw. JS allgemein möchte ich dafür nicht verwenden.

Wie löst man das Problem sauber?

Grüße

DeddyH 16. Sep 2007 13:47

Re: Weiterleitung beim Absenden eines Formulars
 
Hallo Matthias,

vielleicht hilft Dir dies hier weiter.

Matze 16. Sep 2007 13:56

Re: Weiterleitung beim Absenden eines Formulars
 
Hallo Deddy,

danke für den Link. Wenn ich das richtig sehe, wird auf die vorige URL weitergeleitet, jedoch ein Parameter angehängt, durch dessen Abfrage man unterscheidet, ob die Daten neu gespeichert werden sollen oder nicht.
Das wäre natürlich eine Möglichkeit, doppelte Einträge in der Datenbank zu verhindern (wobei ich auch einen eigenen Hinweis bei doppelten Einträgen ausgebe und die damit vorbeuge), doch ein Browser würde mir dennoch den Dialog zeigen, was ich nicht sonderlich benutzerfreundlich finde, da es auf den ersten Blick nach einem Fehler aussieht, den man wegklicken muss.

Geht das denn auf diesem Wege gar nicht anders?

DeddyH 16. Sep 2007 15:23

Re: Weiterleitung beim Absenden eines Formulars
 
Hallo Matthias,

wenn ich das richtig sehe, ist das ein rein clientseitiges Problem. Der Browser behält die Request-Daten in seinem Cache und fragt deshalb bei Aktualisierung nach. Ich denke nicht, dass sich das auf der Serverseite verhindern lässt, aber ich kann mich auch irren.

Hador 16. Sep 2007 15:45

Re: Weiterleitung beim Absenden eines Formulars
 
Was ist eigentlich, wenn du eine Seite dazwischen schaltest, die die Daten verarbeitet?
Also:
- Seite mit Formular (a.php)
- Formular wird abgeschickt mit Ziel Zwischenseite (b.php)
- Zwischenseite (b.php) wertet die Daten aus, trägt sie in die DB ein oder macht sonstwas damit
- Zwischenseite leitet auf die Anfangsseite (a.php) weiter (header)

Der Benutzer sollte die Zwischenseite eigentlich garnicht bemerken. und auf der eigentlichen Seite werden keine Daten mehr übergeben. Also sollte beim aktualisieren auch nicht mehr die vermeidliche Fehlermeldung erscheinen.

sexmagic 16. Sep 2007 17:05

Re: Weiterleitung beim Absenden eines Formulars
 
Ich würde einfach bei der Überprüfung des Querys oder was auch immer direkt in den if block ein "meta refresh" oder ein "header location" einsetzten, das direkt nach dem ausführen des Befehls auf eine andere Seite weiterleitet.

Somit ist der User sofort nach dem ausführen des Commands auf einer anderen Seite dort zeigst du dan zb an Daten erfolgreich eingetragen.

Matze 16. Sep 2007 18:10

Re: Weiterleitung beim Absenden eines Formulars
 
Zitat:

Zitat von sexmagic
[...] oder ein "header location" [...]

Genau das dachte ich, habe ich so gelöst. Doch dies war nicht der Fall, sondern ich hatte es über action="" realisiert. Ich habe dann erfahren, dass man action generell setzen sollte und mit ein paar Änderungen funktioniert es über header() nun. Mein Ausgangsproblem war folglich von mir falsch beschrieben. :oops: Aber ihr hab's gar nicht gemerkt. :stupid:

Danke euch allen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:07 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz