christoph rey: daten nur einmal in db schreiben

hallo allerseits

was mich am meisten irritiert ist, dass ich keinen eintrag bezüglich meines problems finde - entweder mach ich was komplett falsch oder dann versteh ich die welt nicht mehr.

ich habe ein formular, das bei eingabe und submit in eine db schreibt. im gleichen formular lese ich den inhalt der db aus, d.h. was erfasst wurde wird gleich wieder ausgegeben.

das ganze funktioniert einwandfrei, das problem ist, wenn jemand den refresh button vom browser anklickt, schreibt es den letzten eintrag automatisch wieder in die db. wenn ich also die eingabe mache, auf submit klicke und dann noch 2 mal auf refresh klicke schreibt es den eintrag 3 mal in die db.

ich habs schon mal raufgeladen, damit jemand mir evtl. das problem ansehen, respektive mir eine lösung geben kann. die seite ist unter

http://www.superfreak.ch/wa_vam/veran_anmeldung.asp

den code dazu findet ihr unter

http://www.superfreak.ch/wa_vam/code.doc

vielen dank für einen tip.

gruss christoph

  1. Hallo,

    werte deine daten gleich zu beginn der seite aus und trage diese in die db ein...

    bei erfolg machst du einen redirect auf eine neue seite bei fehler auf die eintragseite mit eventuellen anmerkungen für den user...

    ein redirect funktioniert aber nur, wenn noch keine daten an den browser geschickt wurden...also gleich am anfang vor jeglichem standard html auswerten

    Odium

  2. Hi,

    das ganze funktioniert einwandfrei, das problem ist, wenn jemand den refresh button vom browser anklickt, schreibt es den letzten eintrag automatisch wieder in die db. wenn ich also die eingabe mache, auf submit klicke und dann noch 2 mal auf refresh klicke schreibt es den eintrag 3 mal in die db.

    ja, weil das entsprechende Script dann auch mehrfach ausgeführt wird und damit die Aktionen (SQL Insert) wiederholt.

    Wenn du Odiums Variante mit dem Redirect umgehen möchtest, bleibt dir nichts anderes übrig, als vor dem Eintrag in die DB zu prüfen ob die Daten schon mal eingetragen wurden.

    Das kannst du machen:

    • wenn du den Session-State aktiviert hast, indem du jeden Eintrag zusätzlich mit der SessionID versiehst (extra Spalte in DB-Tabelle)
    • wenn du kein Session-State aktiviert hast, in dem du einen eindeutigen Code per Hand generierst und immer über alle Seiten mitschleifst

    Ich kenne deine persönlichen Bedürfnisse nicht und weiß nicht, welche Variante (Odiums oder meine) in deinem Fall besser wäre

    Ein was wichtiges möchte ich aber noch betonen bei Datenbankoperationen mit User-Input:

    Sicherheitsrisiko SQL-Injection!!

    "All input is evil until proven otherwise"

    mehr Infos und Gegengifte findest du u.a. auf www.aspheute.com

    Viele Grüße, Frank