PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Formular und Browseraktualisierung


Michinator
29.07.2003, 10:02:32
Ich arbeite gerade an einem Webshop mit Datenbank und Session.
Es funktioniert ja auch alles ganz gut, nur ein Problem steht mir doch im Weg.
Gehe ich auf den Button Aktualisieren beim Browser so verfälscht er die Mengenanzahl, weil er den letzten Datensatz noch einmal sendet (das ist mir ja auch klar).
Das heißt wenn Aktualisieren gedrückt wird, trägt er einfach den selben Datensatz noch mal ein.
Und das ist halt schon etwas schlecht, weil dann hat jeder der etwas bestellt und mal auf aktualisieren drückt eine falsche Menge im Warenkorb.
Vielleicht kann mir ja jemand weiterhelfen. Eventuell die Variablen leeren, aber dann trägt er nichts mehr ein.
Zumindest an den Stellen wo ich die Variablen versucht habe zu leeren.



WARENKORB_ANZEIGEN.PHP

<?
session_start();
?>
<html>
<head>
<title>Warenkorb</title>
</head>
<body>
Hinweis: Um einen Artikel aus dem Warenkorb zu entfernen, setzen Sie bitte die Anzahl auf 0.<br>
<form method="post" action="anzahl_aendern.php">
<?
$sql = "SELECT Artikel.Artikel_nr, Artikelname, " .
"Einzelpreis, Anzahl FROM Warenkorb, " .
"Artikel WHERE Warenkorb.Artikel_nr = " .
"Artikel.Artikel_nr AND Session_id = '" .
session_id() . "'";
$ergebnis = mysql_query($sql, $verbindung);
if($ergebnis)
{
echo "<table>";
while($zeile = mysql_fetch_row($ergebnis))
{
echo "<tr>";
echo "<td>" . $zeile[1] . "</td>";
printf("<td>%.2f €</td>", $zeile[2]);
echo "<td>" . "<input type = "text" " .
"name = "artikelanzahl[" . $zeile[0] . "]"" .
" value = "" . $zeile[3] . ""></td>";
echo "</tr>";
}
echo "</table>";
mysql_free_result($ergebnis);
}
else echo "Abfrage $sql konnte nicht " .
"ausgef&uuml;hrt werden<br>";
?>
<input type = "submit" value = "Bestellen">
<a href="index.php">Zur&uuml;ck zum Katalog</a>
</form>
</body>
</html>



ARTIKEL_IN_WARENKORB.PHP

<?
session_start();
$verbindung = mysql_connect("localhost", "root", "");
if($verbindung)
{
$ergebnis = mysql_select_db("shop", $verbindung);
if($ergebnis)
{
//Falls Artikel bereits im Warenkorb
$sql = "UPDATE Warenkorb " .
"SET Anzahl = Anzahl + 1 " .
"WHERE Session_id = '" . session_id() .
"' AND Artikel_nr = $artikel_nr";
mysql_query($sql, $verbindung);
$anz_zeilen = mysql_affected_rows();
if($anz_zeilen == 0) //Artikel noch nicht im Warenkorb
{
$sql = "INSERT INTO Warenkorb " .
"(Session_id, Artikel_nr, Timestamp, " .
"Anzahl) VALUES ('" . session_id() .
"', $artikel_nr," . time() . ", 1)";
mysql_query($sql, $verbindung);
}
include("warenkorb_anzeigen.php");
}
else echo "Datenbank konnte nicht ausgewählt werden";
mysql_close();
}
else echo "Verbindung konnte nicht hergestellt werden";
?>



INDEX.PHP

<html>
<head>
<title>Katalog</title></head>
<body>
<?
$verbindung = mysql_connect("localhost", "root", "");
if($verbindung)
{
$ergebnis = mysql_select_db("shop", $verbindung);
if($ergebnis)
{
$sql = "SELECT Artikel_nr, Artikelname, " .
"Einzelpreis FROM Artikel";
$ergebnis = mysql_query($sql, $verbindung);
if($ergebnis)
{
echo "<table>";
while($zeile = mysql_fetch_row($ergebnis))
{
echo "<tr>";
echo "<td>" . $zeile[1] . "</td>";
printf("<td>%.2f €</td>", $zeile[2]);
echo "<td>" .
"<a href="artikel_in_warenkorb.php?" .
"artikel_nr=" . $zeile[0] .
"">In den Warenkorb legen</a></td>";
echo "</tr>";
}
echo "</table>";
mysql_free_result($ergebnis);
}
else echo "Abfrage $sql konnte nicht " .
"ausgef&uuml;hrt werden<br>";
}
else echo "Datenbank konnte nicht " .
"ge&ouml;ffnet werden<br>";
mysql_close();
}
else echo "Verbindung konnte nicht " .
"hergestellt werden<br>";
?>
</body>
</html>

Ben20
29.07.2003, 10:21:20
Ehrlich gesagt habe ich mir jetzt nicht den Quellcode komplett angesehen, aber das Problem, soweit ich das sehe, ist sowieso nicht programmiertechnisch zu lösen, Du kannst ja schlecht den "Aktualisieren" Knopf abschalten. Um dennoch ein doppeltes Eintragen zu verhindern könntest Du eine Zwischenseite (wie hier im Forum) verwenden, die sowas wie "Vielen Dank, der Artikel wurde in den Warenkorb übernommen..." sagt und das eintragen übernimmt. Auf der nachfolgenden (Übersichts)seite kann der User dann aktualisieren soviel er will ohne das was passiert.

Ra-ven
31.07.2003, 09:12:11
du kannst doch vor jedem eintragen in die db prüfen ob die SID mit den WARENMENGEN und WARENTYP schon besteht wenn ja
die
Else
$sql="insert...