ralf: POST-Variablen leeren

Hallo,

gibt es eine Möglichtkeit übergebene POST-Variablen zu löschen?

Sinn ist das, falls der User auf aktualisieren klickt, die Daten nicht nochmals verfügbar sind (werden in DB geschrieben)

Ich habs schob mit $_POST["aby"]=""; und unset($_POST); probiert, leider ohne erfolg

Gruß

Ralf

  1. Moin Moin !

    Sinn ist das, falls der User auf aktualisieren klickt, die Daten nicht nochmals verfügbar sind (werden in DB geschrieben)

    Nein, ist auch nicht nötig. Nimm eine ID mit in die Daten auf (<input type="hidden" ...>) und prüfe, ob Du diese ID schon verarbeitet hast (sprich: ob sie in der DB steht).

    Beispiel: Dieses Forum. Versuch mal, ein Posting mit [Back] und [Reload] zweimal abzuschicken.

    Alexander

    --
    Nein, ich beantworte keine Fragen per eMail. Dafür ist das Forum da.
    Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so!"
    1. Hi,

      Moin Moin !

      Sinn ist das, falls der User auf aktualisieren klickt, die Daten nicht nochmals verfügbar sind (werden in DB geschrieben)

      Nein, ist auch nicht nötig. Nimm eine ID mit in die Daten auf (<input type="hidden" ...>) und prüfe, ob Du diese ID schon verarbeitet hast (sprich: ob sie in der DB steht).

      Versteh ich nicht ganz, sorry

      Ich hab auf meiner Page eine Eingabe Zeile in der Kommentare eingefügt werden. Unterhalb des Formular stehen dann die eingefügten Kommentare. Mit Enter wird das Formular abgeschickt, und die gleiche Seite nochmals aufgerufen. Der Kommentar wird in die DB geschrieben. Danach wird die Tabelle mit den Kommentaren ausgelesen und wieder in die Seite geschrieben, womit Dein Kommentar dann sofort Online ist.

      Was soll ich nun mit nem ID-Feld machen?

      Gruß

      Ralf

      1. Moin Moin !

        Du willst ein Formular, dessen Abschicken Deine DB verändert, reload-fest machen. Richtig?

        Du mußt also Reloads erkennen.

        Das kannst Du nur, wenn Du in das Formular (und damit in die übermittelten Daten) eine eindeutige ID einbaust, anhand derer Du mehrfaches Abschicken erkennen kannst (denn dann wird die eindeutige ID erneut übermittelt).

        Sprich:

        Im Formular <input type="hidden" value="$systemzeit$remoteaddr$zufallszahl" name="FINDME">

        Im Request-Handler:

        if (SchonBenutzt(parameter("FINDME"))) {  // z.B. "select count(*) as n from idlist where findme=?" liefert n>0
           Fehler("Bitte nur einmal abschicken")
        } else {
           DatenEintragen(...)
        }

        Probier bitte mal aus, wie das Forum auf doppelte Submit-Versuche (BACK -> RELOAD) reagiert. Dann siehst Du es. (Im Quelltext: <input type="hidden" name="unid" value="Zy0Y06Yy74YZ">)

        Alexander

        --
        Nein, ich beantworte keine Fragen per eMail. Dafür ist das Forum da.
        Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so!"
  2. Moin!

    gibt es eine Möglichtkeit übergebene POST-Variablen zu löschen?

    Sinn ist das, falls der User auf aktualisieren klickt, die Daten nicht nochmals verfügbar sind (werden in DB geschrieben)

    Ich habs schob mit $_POST["aby"]=""; und unset($_POST); probiert, leider ohne erfolg

    Das geht so nicht!

    Bedenke den Weg, den die Daten nehmen. Der Benutzer gibt etwas ins Formular ein, und beim Abschicken wird ein POST-Request an den Server geschickt, der daraufhin die POST-Daten verarbeitet.

    Beim Reload sendet der Browser die eingegebenen Formulardaten in einem erneuten, identischen POST-Request einfach nochmal - der Server fängt damit wieder an zu arbeiten.

    Das bedeutet: Entweder mußt du verhindern, dass du zweimal mit identischen Daten arbeitest. Das funktioniert z.B., indem du als hidden-Feld eine eindeutige ID mitsendest und vor der Verarbeitung prüfst, ob du diese ID schon vorher mal empfangen hast - in diesem Fall brichst du die Verarbeitung dann ab, informierst den User darüber, und bietest Abhilfe an (oder auch nicht).

    Oder (einfacher) du nimmst dem User einfach die Seite mit dem POST-Request weg, indem du den POST-Request nicht mit der Ausgabe einer kompletten Seite beantwortest (diese Seite kann man mit Reload neu laden), sondern mit einem Redirect auf eine Ergebnisseite, welche vom Browser dann mit einem (formulardatenlosen!) GET-Request geholt werden.

    Also POST -> Verarbeitung und Redirect auf Danke-Seite (oder so ähnlich) -> Danke-Seite ausgeben.

    Die Danke-Seite kann dabei durchaus vom selben Skript ausgegeben werden. Reloads beziehen sich dann immer auf die GET-URL der Danke-Seite - und damit entsteht kein Schaden, weil keine Formulardaten mehrfach verarbeitet werden.

    - Sven Rautenberg

    --
    ss:) zu:) ls:[ fo:} de:] va:) ch:] sh:) n4:# rl:| br:< js:| ie:( fl:( mo:|
    1. Hi,

      Das bedeutet: Entweder mußt du verhindern, dass du zweimal mit identischen Daten arbeitest. Das funktioniert z.B., indem du als hidden-Feld eine eindeutige ID mitsendest und vor der Verarbeitung prüfst, ob du diese ID schon vorher mal empfangen hast - in diesem Fall brichst du die Verarbeitung dann ab, informierst den User darüber, und bietest Abhilfe an (oder auch nicht).

      Ich hab ein Hiddenfeld mit der Timefunktion bestückt, also das im Feld der Timestamp steht. Beim Abschicken des Formulars wird geprüft ob die gleich Zeit bereits vom gleichen User (IP) abgeschickt wurde. Bei Ja passiert nichts bei Nein wird sein Eintrag in die Liste eingeschrieben

      Danke für Eure Hilfe

      Gruß

      Ralf