Deto: Datensatz einfügen bei 'Aktualisieren' im Browser verhindern

Hallo!
Ich lerne grade PHP und habe ein Formular geschrieben, das mit der Post-Methode PHP code in der gleichen Datei aufruft. Es wird eine Verbindung zu MySQL gemacht und Adressdaten werden in die DB eingefügt. Danach versuche ich, die Variablen auf "" zu setzen und frage dies auch am Anfag des Query-Einfügen-Befehls ab. Drücke ich aber den 'Aktualisieren' Button im Browser wird jeweils ohne Neueintrag in das Formular immer wieder der selbe Datensatz eingegeben. Hätte also, wenn es jemand drauf anlegt, sehr leicht sehr viel Datenschrott in meiner DB. Welche Strategie kann man da fahren?
Danke
Deto

  1. Hi,

    Ich lerne grade PHP und habe ein Formular geschrieben, das mit der Post-Methode PHP code in der gleichen Datei aufruft. Es wird eine Verbindung zu MySQL gemacht und Adressdaten werden in die DB eingefügt. Danach versuche ich, die Variablen auf "" zu setzen und frage dies auch am Anfag des Query-Einfügen-Befehls ab. Drücke ich aber den 'Aktualisieren' Button im Browser wird jeweils ohne Neueintrag in das Formular immer wieder der selbe Datensatz eingegeben. Hätte also, wenn es jemand drauf anlegt, sehr leicht sehr viel Datenschrott in meiner DB. Welche Strategie kann man da fahren?

    warum leitest du nach der Verarbeitung nicht einfach auf eine Seite weiter, die kein Formular enthält?

    LG Roland

    1. Hi Roland!
      Danke, aber dann kann man ja noch mit dem 'Zurück' Button auf das alte Formular gehen. Die Felder sind dann zwar leer, das Ding schreibt aber doch die zuletzt eingegebenen Daten rein.

      1. Hi,

        Danke, aber dann kann man ja noch mit dem 'Zurück' Button auf das alte Formular gehen. Die Felder sind dann zwar leer, das Ding schreibt aber doch die zuletzt eingegebenen Daten rein.

        dann musst du verhindern, dass die Formularseite im Cache landet. Geht man zurück, wird die Seite immer neu geladen und damit werden die Einträge, die sich der Browser gemerkt hat gelöscht.

        LG Roland

        1. Hallo,

          etwas späte, aber dafür besonders scharfer Senf...

          Ich würde das serverseitig abfangen.
          Gib der Einfügeseite eine ID mit:

          Table BEWEGNGSDATEN
          ID (Autoincrement)
          READY (Int, default=0)
          ... (weitere Kotrollfelder, wie z.B. IP des Senders, Zeit, Methode...)

          Formular generieren:
          insert into BEWEGUNGSDATEN ID values (0),
          Last_insert_ID() abfragen

          Im Formular die Last_insert_id als hidden-Field mitgeben.

          Wenn die Formulardaten am Server ankommen, erst in BEWEGUNGDATEN testen, ob für die ID READY schon ungleich 0 ist

          Wenn nicht, update BEWEGUGSDATEN

          Danach erst die eigentliche Änderung durchführen.

          Die alten Bewegugnsdatensätze können dann nach Sichtung "wer hat wann was verändert" gelöscht werden.

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

          Tom

          --
          Intelligenz ist die Fähigkeit, aus Fehlern Anderer zu lernen und Mut die, eigene zu machen.
  2. Welche Strategie kann man da fahren?

    Hi!

    Ich hatte ein ähnliches Problem. Laß den Datenbankeintrag von einer anderen PHP-Datei machen und leite dann sofort auf eine reine Ausgabedatei weiter. Das funktioniert.

    Bis denne...
    MarkX.

  3. Hallo,

    [Datensatzeinfügen durch Formularreload verhindern]

    Es gibt dazu imho mehrere Strategien.

    a) Umleiten auf eine andere, harmlose Seite (z.B. das Formular). Diese kann der User aktualisieren so oft er möchte. Er darf nur den Backbutton nicht drücken :)

    b) Mit Sessions kannst Du verfolgen, was Dein User gerade tut, bzw. zuletzt getan hat. Speichere in den Sessionvariablen ein Flag für 'erledigt' und frage dieses vor dem Einfügen ab.

    c) Erzeuge aus den übermittelten Daten eine Checksumme, die Du speicherst und mit den Checksummen neu hinzukommender Datensätze vergleichen kannst. Damit kannst Du doppeltes Einfügen von Datensätzen auch noch zu einem späteren Zeitpunkt vermeiden.

    d) Überlege, welche Daten in welchen Felder nur einmal vorkommen dürfen. Setze diese Spalte(n) auf 'UNIQUE', damit die Datenbank den doppelten Eintrag verhindern kann.

    Ich halte eine Kombination aus b) und c), eventuell mit a) und d) für einigermaßen ausreichend. d) ist imho sowieso sinvoll wenn es geht. :)

    Gruß Alex

  4. Ich lerne grade PHP und habe ein Formular geschrieben, das mit der Post-Methode PHP code in der gleichen Datei aufruft.

    Guckst Du hier:
    http://dclp-faq.de/q/q-formular-mehrfach.html