Frage von nikkeltech, 65

Wie lösche ich ein Formular nach dem Auslesen in PHP?

Es geht darum ein Kommentar zu schreiben, dazu wird das entsprechende Formular ausgefüllt, welches die Daten wieder an die selbe Seite sendet, weswegen ich auf der selben Seite immer prüfe, ob das Formular existiert bzw. ob da was drin steht. if(isset($_POST['submitbuttonname']))

Wenn das der Fall ist füge ich dieses Kommentar zur Datenbank hinzu. Nur damit dannach alle Kommentare aus der Datenbank ausgelesen und angezeigt werden können. Das neue wird also bereits angezeigt.

Mein Problem ist nun, dass das Formular wider genau so abgesendet wird, wenn die Seite aktualisiert wird. Es kommt 'ne kurze Frage vom Browser "Daten erneut senden" und falls auf "Weiter" geklickt wird, erscheint das Kommentar ein weiteres mal, obwohl die Seite schlichtweg aktualisiert wurde und der Submit-Button nicht im Geringsten geklickt wurde. Wie schaffe ich es also, dass das Formular quasi nicht existiert bzw. die oben geschriebene if-Bedingung beim schlichten Aktualisieren false ergibt?

Die Seite ist: wishlist.bplaced.net und zu Testzwecken könnt ihr euch mit den Daten: Email: test@mail.de Passwort: passwort123 einloggen und mal was "posten" und durch schlichtes Aktualisieren das Gleiche nochmal posten....

Danke schonmal für jegliche Antworten :D

Antwort
von Minilexikon, 7

Du könntest deine Daten per Ajax-Request absenden und dann das Formular manuell (sofern der Server sein okay gibt) löschen. Statt des Submit-Buttons nimmst du einfach einen normalen Button. Dann wird auch kein Submit-Event ausgelöst ;)

Antwort
von Mikkey, 46

Du kannst mit jedem Bereitstellen der Formularseite ein Hidden-Feld mit einer GUID bestücken. Wird das Formular an den Server gesendet, prüfst Du, ob die GUID bereits verarbeitet wurde. Falls ja, übergehst Du das Speichern.

Kommentar von kingbongo ,

Löst nicht sein Problem.

Kommentar von Mikkey ,

Aber sicher, man hat auf der Serverseite nicht unter Kontrolle, was der User tut. Ein Aktualisieren der Seite führt nun einmal zu dem beschriebenen Verhalten.

Kommentar von kingbongo ,

Ja und das will er verhinden, das double submit problem löst er nur wenn er ein HTTP URL Redirect macht. Mit speichern auf dem Server hat das nix zu tun.

Kommentar von Mikkey ,

Dein Redirect behebt nur ein Symptom bei der Client-Server-Kommunikation. Drückt der User "Zurück", tritt es genauso wieder auf. Das kannst Du bei Ebay, Amazon & Co genauso erzeugen.

Wird der doppelte Post durch den Server ignoriert, ist alles in Ordnung.

Antwort
von happyfish2, 51

Dann schicke das Formular nicht auf diese Seite, sondern auf eine andere. Von dort leitest du - nachdem du alles in der Datenbank gespeichert hast - wieder auf die Formularseite um. Dann tritt dieser Effekt nicht mehr auf.

Antwort
von AnonYmus19941, 40

Erstmal: coole Webite ;-)

Zu deiner Frage: Du könntest ein weiteres, unsichtbares Feld benutzen, in dem eine Post-ID drinnen steht. Diese bleibt immer gleich, wenn die Seite aktualisiert wird, also könntest du sie einfach mit den bisherigen IDs abgleichen und überprüfen, ob es den Post schon gibt.

Dafür muss dann bei jedem Neuladen der Seite eine neue Post-ID erstellt werden. Da beim Neuladen aber nicht die aktuelle Post-ID, sondern immer noch die alte übertragen wird, sollte es theoretisch funktionieren ...

Kommentar von kingbongo ,

Nein, das Problem wird dadurch nicht behoben.... er mein das die Daten wieder versendet werden wenn man den Refresh Button im Browser drückt, zb nach einer invaliden Eingabe.

Kommentar von AnonYmus19941 ,

Ich weiß, was er meint, und das Problem wird dadurch behoben.

Die Daten werden jedesmal wieder verschickt und von einem PHP-Formular in die Datenbank eingetragen. Wenn das Formular allerdings bemerkt, dass die ID schon in der Datenbank vorhanden ist, beendet es sich und trägt nichts neues ein.

Kommentar von kingbongo ,

So wie ich das verstehe will er das double submit problem lösen und das geht nur mit einem url redirect.

Kommentar von kingbongo ,

Ja, das ist richtig, wenn man es Serverseitig macht, aber ich verstehe seine Frage als double submit Problem auf dem Client das er verhindert will, da er schreibt:

"Es kommt 'ne kurze Frage vom Browser "Daten erneut senden" und falls auf
"Weiter" geklickt wird, erscheint das Kommentar ein weiteres mal,
obwohl die Seite schlichtweg aktualisiert wurde und der Submit-Button
nicht im Geringsten geklickt wurde"

Kommentar von AnonYmus19941 ,

Das lässt sich in der Tat nur durch einen Redirect lösen. Allerdings stört das auch nicht unbedingt ...

Kommentar von kingbongo ,

Doch das Problem ist sehr störend, weil man nämlich a) dadurch nicht mit dem Browser zurück springen kann und b) es den User irritiert ob die Daten schon versendet wurden... Auf einer E-Commerce Plattform wie Amazon, Ebay etc unvorstellbar.

Kommentar von nikkeltech ,

Danke an euch beide (auch @kingbongo ) und danke, dass dir die Seite gefällt :D Tatsächlich hätte ich es lieber, dass die Abfrage nach dem erneuten senden der Daten erspart bleibt. Doch für das finale Problem, dass ein Kommentar unwissentlich erneut gepostet wird, helfen beide Lösungsansätze, also Danke für die Anregungen.

Der Rest ist jetzt eine Sache der Ästhetik :D

Antwort
von helpme512, 4

Ich habe mich auf deiner Seite selbst ausgesperrt ;-)
Um das "Problem" aufzuheben, lösche einfach den letzten Post, dann funktioniert alles wieder (probier es vorher aus: melde dich einfach an und klicke auf "Forum").

Sorry für die verschiedenen "Attacken", aber es ist besser, wenn ich es mache, als wenn es jemand macht, der es ernst meint, oder?

Egal. Was ich noch schreiben wollte:

Es funktioniert. Wenn man auf "Forum" klickt, wird man automatisch abgemeldet (theoretisch sollte es reichen, die Seite zu laden; ich weiß nicht, wieso man nicht sofort nach dem Anmelden wieder abgemeldet wird ...). Dazu habe ich wie in dem Video beschrieben ein Bild benutzt, das als Quelle den "Abmelden"-Link benutzt (

<img src='http://wishlist.bplaced.net/index.php?section=logout'>

). Jedesmal, wenn die Seite und damit auch das Bild geladen werden, wird man (theoretisch) abgemeldet. Das ist zwar nicht unbedingt schlimm, aber man kann sich auch andere Angriffsszenarien überlegen (siehe Video).

Kommentar von helpme512 ,

Für weitere Infos und Hilfestellungen empfehle ich dir auch einen Artikel der c't: http://heise.de/-3057963. Der kostet allerdings 1,49 €, aber dort steht eigentlich alles drinnen, was du brauchst, um deine Website abzusichern. Du kannst dir auch die Datei runterladen, die unten verlinkt ist, und auf deinen Webserver extrahieren. Dort kannst du verschieden Möglichkeiten der filter_var()-Funktion ausprobieren.

Keine passende Antwort gefunden?

Fragen Sie die Community