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ührt werden<br>";
?>
<input type = "submit" value = "Bestellen">
<a href="index.php">Zurü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ührt werden<br>";
}
else echo "Datenbank konnte nicht " .
"geöffnet werden<br>";
mysql_close();
}
else echo "Verbindung konnte nicht " .
"hergestellt werden<br>";
?>
</body>
</html>
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ührt werden<br>";
?>
<input type = "submit" value = "Bestellen">
<a href="index.php">Zurü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ührt werden<br>";
}
else echo "Datenbank konnte nicht " .
"geöffnet werden<br>";
mysql_close();
}
else echo "Verbindung konnte nicht " .
"hergestellt werden<br>";
?>
</body>
</html>