DB eintrag verhindern bei reload

flandersX

Mitglied
Hallo

ich habe ein Formular in dem eine Bestellung eingetragen wird.

Auf der Bestätigungs Seite hole ich mir die Variablen und trage sie so in die DB ein:

PHP:
$sql = "Insert into bestellungen(OrderID, ProductID, CustomerID, Name, Active) VALUES ('','$itemid','$custid','$name','$active');";
mysql_query($sql) or die(mysql_error());

Dazu noch vielen Dank für ihre Bestellung bla bla bla......

Mein Problem ist nun, wenn man die Seite aktualisiert, wird auch eine neue Bestellung in der DB eingetragen....

was kann ich da machen...bräuchte mal einen Tip ! :)

danke
 
Ich würde auf eine andere Seite weiterleiten oder eben auf die gleiche ohne die GET bzw. POST-Variablen.

PHP:
<?php
if ($success)
{
  header("Location: thanks.html");
}
?>
 
oder man setzt ein cookie nach Abschicken der Bestellung mit setcookie.
Nachher kann man es dann ja abfragen, ob dieses cookie schon gesetzt ist, wenn ja, dann gebe eine Nachricht wie "Bestellung schon abgeschlossen" , oder so aus.

Aber die idee mitn Weiterleiten ist auch gut.
 
Danke für die antworten,

aber was passiert denn wenn jemand einfach im Browser zurück geht (Browserback).
Landet er dann nicht wieder auf der Seite, auf der der SQL Befehl ausgeführt wird ?
 
genau, dann landet er wieder auf der Seite.
Ich würde einfach den Post befehl als md5 z.B. in den cookie Speichern und eine Haltbarkeit von ein paar Stunden geben. Die Daten die er übergeben hat kann man ja vllt aus der Datenbank abfragen und checken, ob es das gleiche ist. Wenn ja sollte er den SQL befehl verhindern.

Sprich:
Code:
if($_COOKIE['check'] == $letzteÜbergabe){
  echo "Fehler"
}else{
$sql = "Insert into bestellungen(OrderID, ProductID, CustomerID, Name, Active) VALUES ('','$itemid','$custid','$name','$active');";
mysql_query($sql) or die(mysql_error());
}

Musst nur vorher eine Datenbankabfrage einleiten. Danach kannste ja noch weiterleiten ;)
(Aber ich kann dir net sagen ob da grad ein Fehler drinne ist, oder nicht, musste einfach mal ausprobieren ;) )
 
Wenn du die Daten in der Session vorhältst, genügt es, die Daten nach der Bestellung aus der Session zu löschen. Dann kann die Bestellung nicht noch einmal durchgeführt werden, ohne das man die Waren erneut in den Warenkorb legt und damit die Session wieder befüllt.

Benötigt kein Cookie ;-)
 
Oder du setzt ein sogenanntes Token, das nach Abschicken des Formulars abläuft.
Im Prinzip versteckst du im Formular der Bestellung ein Feld mit dem Token, das auch noch zusätzlich in der Session gespeichert wird.
Beim Abschicken wird nun überprüft, ob das Token gültig ist, sprich das Token in der Session=Token im Formular, aber auch ob es noch nicht zeitlich abgelaufen ist.

Nach geeigneten Ansätzen kannst du ja mal im Internet suchen.
 
Zurück