Portal > Foren > PHP > PHP-Programmierung > doppeltes Senden (zurück Button) verhindern
Antwort
 
Themen-Optionen
Alt 28.07.2007, 12:35 Nach oben    #1
Benutzer
 
Registriert seit: 25.02.2006
Beiträge: 54
Standard doppeltes Senden (zurück Button) verhindern

Hi,

ich bin momentan dabei eine Bestellabwicklung mit php zu erstellen.

Dabei kommt ja immer wieder das Problem auf, dass jemand auf den zurück Button (des Browsers) klickt und dann das Error des Browsers angezeigt wird, dass Formulardaten versendet wurden etc. und man ggf. aus aktualisieren klicken soll.

Wie geht Ihr mit dem Problem um? Das die Daten wiederholt gesendet werden etc.

Java(-Script) will ich eigentlich nicht einsetzen. Zum einen, da ich mich hier nicht auskenne und zum anderen, wenn jemand Java ausgeschaltet hat bringt mich das auch nicht weiter.

Würde mich über Tipps & Anregungen freuen!

Viele Grüße
julien
julien ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 28.07.2007, 15:43 Nach oben    #2
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.642
Standard

Zitat:
Java(-Script)
JavaScript ist schon richtig

Da du für deine Bestellung sicherlich ein paar Daten in der Session speicherst, solltest du vielleicht auch speichern, bis wohin er gekommen ist.
Sprich User A ist bei Schritt 3 der Bestellung, macht einen Schritt im Browser zurück und sendet Daten für Schritt 2 nochmal. Ergo müsstest du das erkennen und die neugesendeten Daten verwerfen.
Solltest du in deiner Bestellung die Möglichkeit geben, gewisse Daten in bestimmten Schritten nochmals zu verändern (User hat sich bei Adresse verschrieben und will das korrigieren) so müsstest du dann vielleicht mit Flags (also Markierungen) arbeiten.

Z.B. hat der User den letzten Schritt erreicht und will nun daten ändern von Schritt 2, so wird das Formular aus schritt 2 angezeigt und ein hidden-Inputfeld namens "korrigierteDaten" (beispielname nur ) bekommt den wert "true", dann erkennt dein oben erklärter Schutz die Info: Ne is ok, nimm mal die Daten, ist wichtig.

Kompliziert erklärt aber ich hoffe du verstehst es
__________________
I did it my way - Senseless-Blog
WarrenFaith ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 28.07.2007, 19:47 Nach oben    #3
Neuer Benutzer
 
Registriert seit: 23.05.2006
Ort: Meerbusch
Beiträge: 15
Standard

Hi!

Nachdem die Bestellung ausgelöst wurde, könntest Du die Daten der Bestellung / den Inhalt des Warenkorbs aus der Session entfernen. Das Skript, in dem die Bestellung ausgelöst wird, kann dann bei nicht vorhandenen Bestelldaten entsprechend reagieren und den User über die bereits ausgeführte Bestellung informieren.

Wenn Du diese Daten auch nach ausgelöster Bestellung benötigst (beispielsweise für "Das haben andere auch gekauft" Informationen), kannst Du nach ausgelöster Bestellung ein Flag in der Session setzen. Dieses Flag kannst Du dann beim Aufruf der Seite, über die der eigentliche Bestellvorgang initiiert wird (beispielsweise die Ansicht des Warenkorbs), zurücksetzen.

Somit hättest Du einen sauberen Schnitt zwischen den Bestellungen und stellst sicher, dass der Nutzer erst wieder den Warenkorb ansehen muss um den Bestellvorgang erneut durchzuführen. Nebenbei kannst Du Daten des Benutzer in der Session halten um bei einer Folgebestellung innerhalb der gleichen Sitzung die Lieferanschrift etc. bereits parat zu haben.
carrib ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 29.07.2007, 14:10 Nach oben    #4
Erfahrener Benutzer
 
Registriert seit: 30.10.2005
Beiträge: 279
Standard

Gesetz den Fall der Bestellvorgang ist fertig und man leitet zu einer Erfolgsmeldung Seite weiter mit header() weiter. Wie würdet ihr das anlegen?
Derzeit mache ich es so das ich mit header so weiterleite

header(Location: orderfinished.php?msg=1)

Anhand von $_GET['msg'] wird dann die dazugehörige nachricht ausgegeben. Allerdings hat die Methode den Nachteil das man orderfinished.php?msg=1 auch direkt aufrufen kann obwohl man gar keine Bestellung erstellt hat. Außerdem lassen sich damit alle von mir hinterlegten Statusmeldungen auslesen. Jedoch kann nichts zerstört die Datei ja nur anhand einer ID die passende nachricht lädt und keine Daten verändert.

Was haltet ihr davon?
Ich glaub der PEAR Bugtracker arbeitet nach der selben Methode.
ex³ ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 29.07.2007, 14:26 Nach oben    #5
Erfahrener Benutzer
 
Benutzerbild von Bleistift
 
Registriert seit: 31.12.2006
Ort: Zürich
Beiträge: 298
Standard

Du kannst die MsgId ja in die Session schreiben (also $_SESSION['msg']). Das kann nicht manipuliert werden.
__________________
. <-- This is Punkt. Copy Punkt into your signature to help him on his way to world domination.
Bleistift ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 30.07.2007, 15:37 Nach oben    #6
Bastian Fenske
 
Registriert seit: 04.01.2006
Ort: Kassel
Beiträge: 826
Standard

Zitat:
Zitat von ex³ Beitrag anzeigen
header(Location: orderfinished.php?msg=1)
Die Adresse sollte eine absolute URI sein (siehe RFC 2616 Abs. 14.30). Die Session-ID muss hier ggf. manuell angehängt werden.

Ich arbeite mit der hier geschilderten Methode, derartige Meldungen in die Session zu legen und die ID als Get-Parameter anzuhängen. Nach dem Abfragen der Meldung wird diese aus der Session gelöscht. Ist ein ausreichender Schutz vor missverständlichen Meldungen und Täuschungen.

Basti
Basti ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 31.07.2007, 22:10 Nach oben    #7
Erfahrener Benutzer
 
Registriert seit: 30.10.2005
Beiträge: 279
Standard

Zitat:
Zitat von Basti Beitrag anzeigen
Die Adresse sollte eine absolute URI sein (siehe RFC 2616 Abs. 14.30). Die Session-ID muss hier ggf. manuell angehängt werden.
Basti
Ich hätte wetten können das ich das gesacht bekomme. Ich dachte mir im Schnipsel kann ich mir das sparen. Bei den Informatikern muss man eben sehr akribisch sein.
ex³ ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 01.08.2007, 01:41 Nach oben    #8
Bastian Fenske
 
Registriert seit: 04.01.2006
Ort: Kassel
Beiträge: 826
Standard

Zitat:
Zitat von ex³ Beitrag anzeigen
Zitat:
Zitat von Basti Beitrag anzeigen
Die Adresse sollte eine absolute URI sein (siehe RFC 2616 Abs. 14.30). Die Session-ID muss hier ggf. manuell angehängt werden.
Basti
Ich hätte wetten können das ich das gesacht bekomme. Ich dachte mir im Schnipsel kann ich mir das sparen. Bei den Informatikern muss man eben sehr akribisch sein.
Ach ja, du hast die Anführungszeichen vergessen!

Mit diesem hilfreichen Kommentar melde ich mich mal für die nächsten 4 Wochen hier ab (Jugenarbeit in der Wildnis). Wünsche eine schöne Zeit vor den Monitoren und an den Feierabenden *g

Basti
Basti ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
JTabbedPane und Button Events TheSentinel Desktop-Applikationen und Grafik 3 24.10.2006 20:35
Vokabeltrainer asenodin Allgemeine Java-Programmierung 9 28.05.2006 21:04
Button hat Standard-L&F wenn er außerhalb von Methoden deklariert wird Corvin Allgemeine Java-Programmierung 11 17.02.2006 14:55
Button mit Enter bestätigen Eru Desktop-Applikationen und Grafik 6 29.12.2005 22:22
Strings senden und empfangen mit einem ClientSocket über TCP MJA Allgemeine Java-Programmierung 3 10.11.2005 18:48


Alle Zeitangaben in WEZ +2. Es ist jetzt 21:32 Uhr.


Powered by vBulletin® Version 3.7.3 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44