Mehrfachinserts durch "zurück" im verlauf verhindern

Oklino

Mitglied
Hallo erstmal!

ich versuche mal mich etwas kurz zu halten:

Wir haben ein Formular (name, rezeptname, zubereitung, zutaten). Nach dem Ausfüllen wird dieses per POST versendet und in der gleichen Datei in einer if Anweisung verarbeitet (in die Datenbank geschrieben). Natürlich kommt es auch zu einer entsprechenden Bildschirmausgabe.

Problem: Es werden zwar keine doppelten "Namen" eingetragen, jedoch soll die Möglichket gegeben werden Rezeptnamen mehrfach einzutragen (jeder bereitet ja zum Beispiel Bolognese anders zu).
Daraus resultiert folgendes: Der Nutzer kann in seinem Verlauf zurück gehen und das Formular erneut versenden - was nun?

Unsere Ansätze bisher:
Nach Name+Rezeptname in DB suchen und Neueintrag mit gleicher Kombo verhindern.
Problem: Motivierte Störenfriede könnten mal eben einen Buchstaben hinter ihren Namen tippen.

Weg2: Captcha
Problem: wird bei "Zurück" im Verlauf nicht neu erstelt sondern nur in einem neuen "richtigen" Durchlauf des Skriptes, wenn ich mich nicht irre.(oder?)

Weg3: "Zurück" im Verlauf umgehen = Nutzer landet immer auf gleicher Ausgabe
Problem: ziemlich schmierige lösung die oft von werbefinanzierten Seiten missbraucht wird.

Weg4: Keine doppelten Rezeptnamen in der Datenbank.
Problem: siehe Weg1. Außerdem kocht ja jeder bestimmte Gerichte anders.

tja... und da verließen sie ihn...
Mein Team und ich wären dankbar für jede konstruktive Hilfe. :) Danke im Voraus
 
Also wenn ich das Richtig verstanden hab wollt ihr verhindern das der selbe eintrag 2 mal gemacht wird?

Eine möglichkeit ist es dafür einfach einen Kontroll key zu verwenden. Ihr generiert per Zufall eine Zahlenbuchstaben kombination und legt diese in einen Hidden Feld im Formular.

Wenn nun jemand den Zurück Button verwendet hat er wieder den selbe Kontroll key dadurch wisst ihr nun da das Formular schon einmal eingetragen wurde. Ihr braucht den Key nur zusätzlich in der Db speichern und abfragen ob der bereits existiert.

Mfg Splasch
 
Eine andere Möglichkeit ist, das speichern in der Datenbank von einem anderen Script erledigen zu lassen. Sprich das Formular wird an eine andere Datei gesendet und nicht an dieselbe. Dann kannst du per header("Location: seite.php"); wieder auf die eigentliche Seite zurück wechseln und das Formular ist wieder leer.
 
Soooo leider musste ich heute noch einen neu aufgesetzten PC übergeben und hatte noch keine Zeit zu antworten.

Also wir werde jetzt mal ein paar Skripte umstricken. Zum beispiel ist es momentan so dass nach der eingabe des datensatzes ein upload formular von der gleichen php datei aufgebaut wird. Gedanke des Autoren war hierbei dass er zuerst den Datensatz eintragen und dann dem Bild den namen der datensatz ID geben wollte... das geht natürlich auch direkt in einem Rutsch... wenn wir das haben, bauen wir eine eurer beiden Lösungen ein für die wir natürlich

sehr dankbar sind!

Bei Lösung 1 gibts jedoch noch ein paar Überlegungen... der Hash müsste schon eine bestimmte länge haben um wirklich 100%ig sicher zu gehen dass nicht doch ~irgendwann~ der Zufall es so will dass ein Autor einen schon vergeben hash in seinem formular bekommt. Aber das bekämen wir schon hin ;)

:) Wir haben uns echt stunden lang den Kopf zerbrochen... oh mann... Ich danke euch beiden nochmal im Namen der kleinen Truppe ;)


EDIT:
ich lasse den Thread noch kurz offen falls es komplikationen gibt! Ich bitte also um Verständnis seitens der Moderatoren ;)
 
Zuletzt bearbeitet:
Zurück