Warenkorb

Frankster

Mitglied
Hi!

Wenn man auf den "in den Warenkorb legen" Button klickt, wird der Artikel in eine temp DB gelegt.
Wenn er nun bestellt werden die Daten in die Bestell DB getan und die Inhalte in der temp DB werden gelöscht.
Um zusehen wer was bestellt, werden Sessions verwendet.

Nur hab ich ein Problem.
Wenn einer plötzlich den IE schliesst, dann sind die Daten in der temp DB.
Gibt es vielleicht eine Möglichkeit, wenn das Fenster geschlossen wird, dass die Daten in der temp DB auch gelöscht werden ?

Mfg
Frankster
 
Du kannst ein Zeitlimit setzen. Über time ().

Nach einer gewissen Zeit löschst du dann die Einträge.

"DELETE FROM tabellenname WHERE timestamp < " . time () . " - 600"

Wobei 600 die Sekunden angibt, also 10 Minuten. Nach 10 Minuten inaktivität werden die Einträge entfernt. Natürlich immer den timestamp aktualisieren.

Aber besser geht es wenn du nur mit Sessions arbeitest. DIe leeren sich sowieso nach einem delay. Du kannst auch komplette Klassen mit serialize () unserialize () anlegen.
 
Hi!

Bin noch ein ziemlicher Neuling in diesem Bereich ;)

Aber wenn du mit timestamp arbeitest, heisst das ich muss in der DB ein Feld Timestamp anlegen ?
wegen dem WHERE..............

Bei den Sessions:
Das heisst ich lege mir 4 Sessionvariablen an ?
session_register("Artikelnummer"),
session_register("Bezeichnung");
session_register("Stueck");
session_reigster("Preis");

mir ist zwar klar dass ich da einen Wert speichern kann, habs schon probiert ;)
Aber wie mache ich es wenn ich z.B. 10 Artikel speicher, und anschliessend diese Artikel in die DB schreibe

Kann ich Sessionvariablen auch als Array anlegen ?

Und wie schaufle ich die Daten auf einmal in die DB ?

Fragen über Fragen *g* ;)

Weil jetzt klicke ich einfach auf den Submitbutton, das 2. Skript übernimmt die Überprüfung ob dieser Artikel mit dieser Session ID schon vorhanden ist, wenn ja, dann wird nur die Menge aktulisiert, wenn NEIN, dann wird er neu geschrieben.
Und für das bin ich schon den ganzen Tag gesessn *g*
 
Warum legst du den Warenkorb nicht in der Session ab?
Diese wird dann automatisch gelöscht, wenn eine gewisse Zeit nicht mehr darauf zugegriffen wird.
So musst du den Umweg über die Datenbank nicht machen.
DB ist in deiner Form etwas umständlich.

Lege doch eine Tabelle mit den Artikeln an und in der Session sicherst du ganz einfach die Artikelnummer und die Anzahl, die der User davon will.
Mit diesen Werten kannst du dann aus der Artikel-Tabelle den Warenkorb zur Anzeige auslesen.
 
Hi!

Könntest mir vielleicht ein kurzes Bsp zeigen, wie ich das machen könnte :-)

Ich habs gestern schon probiert, sachen per Sessions zu speichern, aber irgendwie hat das bei mir nicht hin :(

1.)Zuerst les ich mal die Daten aus der DB
2.)Wenn ich auf den Bestellbutton klick, werden die Daten weiter transportiert
3.) Jetz sollten die daten in den Session Variablen gespeichert werden anstatt in der DB
4.) Ich habe 3 Session Variablen?
5.) Wie kann ich mehrere Daten in den Sessionvariablen speichern ? -> kann ich sie als array anlegen ?

Vielen Dank
Frankster
 
Du setzt die Sessions auf jeder Seite im Shop ein.
Es muss also überall der Befehl session_start(); sein.
Vorsichtshalber würde ich ihn vor der ersten Ausgabe schreiben. Weiß aber nicht ob das notwendig ist.

Struktur:
ArtikelAnzahl = Anzahl / Menge des Artikels (Array)
ArtikelNummer = Artikelnummer (Array)

Also: Session starten:
PHP:
session_start();

Danach kannst du auf alle Sessionvariablen mit $_SESSION["Elementname"] zugreifen.

Beispiel: Status des Warenkorbs:
PHP:
$anz = 0;
for($i=0;$i<count($_SESSION["ArtikelAnzahl"]);$i++)
{
 $anz += $_SESSION["ArtikelAnzahl"][$i];
}
echo "Sie haben ".$anz." Artikel in ihrem Wahrenkorb.";

Zum Hinzufügen:
PHP:
$_SESSION["ArtikelAnzahl"][] = $anzahl;
$_SESSION["ArtikelNummer"][] = $nummer;
Die Variablen $anzahl und $nummer können z.B. aus einem GET oder POST kommen.

Beispiel: addtobasket.php?anzahl=1&artnummer=151
Dann wird in den Warenkorb 1x Artikel 151 hinzugefügt.

Anzeige des Warenkorbs:
PHP:
echo "<h1>Ihr Warenkorb</h1>
<table width=600>
<tr>
<th width=50>Anz.</th>
<th width=*>Bezeichnung:</th>
<th width=100>Stückpreis:</th>
<th width=150>Zwischensumme:</th>
</tr>\n";
$Verbindung = @mysql_connect($db_host, $db_user, $db_pass);
for($i=0;$i<count($_SESSION["ArtikelAnzahl"]);$i++)
{
 $anz = $_SESSION["ArtikelAnzahl"][$i];
 $nr = $_SESSION["ArtikelNummer"][$i];
 $SQLString = "SELECT * FROM Artikel WHERE ArtikelNummer=".$nr;
 $Ergebnis = mysql_db_query($db_name, $SQLString, $Verbindung);
 $info = mysql_fetch_array($Ergebnis, MYSQL_ASSOC);
 echo "<tr>
<td width=50>".$anz."x</td>
<td width=*>".$info["Bezeichnung"]."</td>
<td width=100 align=right>".$info["Preis"]." &euro;</td>
<td width=150 align=right><b>".($info["Preis"]*$anz)." &euro;</b></td>
</tr>\n";
}
echo "</table>\n";

Leeren des Warenkorbs:
PHP:
$_SESSION = Array();
(Ganz einfach ;-))

Ich weiß nicht, ob das mit den Arrays so funktioniert (müsste es aber). Das Script ist nicht getestet.

Hab selbst mit Sessions wenig am Hut.
Purer Anfänger mit geringen Kenntnissen darüber.

Die Datenbank muss so aussehen:
Code:
Tabelle Artikel:
+---------------+-------------+---------+
| Artikelnummer | Bezeichnung |  Preis  |
+===============+=============+=========+
|             1 | Artikel A   |    9.99 |
|             2 | Artikel B   |    4.99 |
|             3 | Artikel C   |    0.99 |
+---------------+-------------+---------+

Datentypen sollten sein:
+---------------+--------------+
| Artikelnummer | INT(5)       |
|   Bezeichnung | VARCHAR(255) |
|         Preis | DOUBLE       |
+---------------+--------------+

Ich glaube kaum, dass du mehr als 99999 Artikel haben wirst. Daher INT(5).
Der Preis müsste eine Zahl mit Komma sein. Daher Double (Zwei Nachkommastellen)
(Ich habe das noch nicht verwendet und weiß daher nicht, ob es den Datentyp Double gibt. Aber mit ziemlich hoher warscheinlichkeit schon.

Ich hoffe, dass ich helfen konnte.
 
Danke für die ausführliche info :)

Ist $_SESSION("Hallo"); das gleiche wie SESSION_REGISTER("HALLO")

Was meinst du mit dem ?
ArtikelAnzahl = Anzahl / Menge des Artikels (Array)
ArtikelNummer = Artikelnummer (Array)

Das ist mir auch nicht so klar
PHP:
for($i=0;$i<count($_SESSION["ArtikelAnzahl"]);$i++)
Wie erhöhe ich SESSION["ArtikelnAnzahl"]
Ich hab mir gedacht so ?

PHP:
session_register("ArtikelAnzahl"]
$ArtikelAnzahl = $ArtikelAnzahl + 1;
 
Frankster hat gesagt.:
Danke für die ausführliche info :)

Ist $_SESSION("Hallo"); das gleiche wie SESSION_REGISTER("HALLO")

Ja. Wenn du schreibst:

$_SESSION["Hallo"].

$_SESSION ist eine globale Variable, wie $_POST, $_GET, $_REQUEST...also ein assoziiertes Array mit den Variablennamen als Schlüsseln.

steht alles hier
 
Ich muss nochmals stören ;)

Wie lösche ich einen Eintrag in einem Array

Ich hätte mir gedacht so:
PHP:
	if ($loeschen)
		{
			echo"$k<br>";
			$Artikelnummer = $_SESSION["ArtNr"][$k];
			echo"$Artikelnummer<br>";
			unset($ArtNr[$k]);
			$Artikelnummer=$_SESSION["ArtNr"][$k];
			echo"$Artikelnummer<br>";
			echo"HALLO";
		
		};

PHP:
<?php
echo "<h1>Ihr Warenkorb</h1>
	<table width=600 border=5>
		<th><tr>
			<td bgcolor=\"#1C6375\"><font size=\"4\" color=\"#FFFFFF\"><b>Nr.</b></td>
			<td align = \"center\" bgcolor=\"#1C6375\"><font size=\"4\" color=\"#FFFFFF\"><b>ArtikelNr.</b></td>
			<td align =\"center\" bgcolor=\"#1C6375\"><font size=\"4\" color=\"#FFFFFF\"><b>Bezeichnung</b></td>
			<td align = \"center\" bgcolor=\"#1C6375\"><font size=\"4\" color=\"#FFFFFF\"><b>Stueck</b></td>
			<td align = \"center\" bgcolor=\"#1C6375\"><font size=\"4\" color=\"#FFFFFF\"><b>Preis/Stk (€)</b></td>
			<td align = \"center\" bgcolor=\"#1C6375\"><font size=\"4\" color=\"#FFFFFF\"><b>Preis (€)</b><td>
		</b></tr></th>";

		
	$Verbindung = mysql_connect(, ,);
		for($i=0;$i<count($_SESSION["ArtNr"]);$i++)

		{
 			$Artikelnummer = $_SESSION["ArtNr"][$i];
 			$Stueck = $_SESSION["Stk"][$i];
 			$lf=$i+1;
 			
 			$SQLString = "SELECT * FROM shop WHERE ArtikelNummer=$Artikelnummer";
 			$Ergebnis = mysql_db_query(XYZ, $SQLString, $Verbindung);
 			$info = mysql_fetch_array($Ergebnis, MYSQL_ASSOC);
 			
 			$GesamtStueckPreis = $info["Preis"]*$Stueck;
      		$X = $GesamtStueckPreis + $X;
 			
 			echo "<tr>
				<td>$lf</td>
				<td>".$info["Artikelnummer"]."</td>
				<td>".$info["Bezeichnung"]."</td>
				<td>$Stueck</td>
				<td>".$info["Preis"]." €</td>
				<td>".($info["Preis"]*$Stueck)."  €</td>
				<td align= \"center\"><a href=\"http://www.geschenkestube.at/warenkorb.php?loeschen=$Artikelnummer&k=$i\"><img src=\"Button\Loeschen.gif\"></a></td>
			</tr>";						
}
		echo"<tr><td colspan=\"6\" align=\"right\" bgcolor=\"#1C6375\"><font size=\"4\" color=\"#FFFFFF\">Gesamtpreis: $X €</td></tr>";
		echo "</table>";
?>
 
Zuletzt bearbeitet:
Zurück