Datensatz einfügen bei 'Aktualisieren' im Browser verhindern
Deto
- php
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
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
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.
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
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
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.
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
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