Bernhard Robbel: Immer noch OnMouseover-Menü ;-)

Moin, Moin!

Das ist ein Denk- oder Umsetzungsfehler bei den Sessions. Meine Erfahrungen sind da etwas anders.

Naja, wie ich das mit der DB gemacht habe, habe ich bereits geschrieben, also auf der Produktseite habe ich einen Link wie "warenkorb.php?produktID=123", am Anfang des Scriptes warenkorb.php kommt denn ein

"INSERT INTO
  warenkorb
  (produktID,Anzahl,PHPSESSID)
 VALUES
  ('$produktID','$anzahl','$PHPSESSID')";

und danach ein

"SELECT * FROM
  warenkorb
 WHERE
  PHPSESSID = '$PHPSESSID'";

Jetzt werden diese Daten alle angezeigt. Jetzt sag mir mal wie Du das genau so mit Sessions machst? Wenn ich anstatt der ersten Sache schreibe

$warenkorb_array[$produktID]=$anzahl;
$_SESSION[$warenkorb_array];

oh - Du hast Recht! In $warenkorb_array steht ja jetzt schon alles ;-))) Prima! Wie bin ich da wohl drauf gekommen?

Wenn in der Session bereits Daten gespeichert sind, werden diese in die entsprechenden Variablen übertragen, sobald im Skript start_session() aufgerufen wird. Ab da hat man also die von der letzten Seite hinübergeretteten Werte verfügbar und kann mit den Variablen arbeiten.

Mein Problem war, das ich auf ein und derselben Seite die Variable registrieren und auslesen wollte, aber hat sich ja erledigt ;-)

Wenn die Bearbeitung erfordert, weitere Daten zu speichern, wird man diese Daten sinnvollerweise in die Variable tun.

Ja mit Arrays habe ich das noch nie gemacht, werde es aber rein Interesse halber mal probieren!

Weiterer Output für den Besucher (also die erneute, jetzt ergänzte Ausgabe des Warenkorbinhaltes) wird man sinnvollerweise basierend auf der Variablen generieren.

Wie meinst Du das? Ich speicher so wie oben ja nur die produktID als key, und die Anzahl als value im warenkorb-array, ist jetzt die Frage ob das reicht, und so bei jeder Ausgabe die restlichen Daten(Preis, Bezeichnung...) aus der DB ausgelesen werden müssen, oder ob man nicht nur die produktID und Anzahl speichert, sondern einen eigenen Array für jeden Artikel im warenkorb_array, und darin alles notwendige speichert und so immer ausgeben kann, ohne sich mit der DB zu verbinden. Was meinst Du dazu?

Endet das Skript, dann wird der aktuelle Zustand der Variablen wieder gespeichert. Fertig.

Genau, aber erst dann, wenn ich die Ausgabe vorher will geht das ja nicht, aber da ich die Variable ja speichere, kann ich ja ohne auf die Session zuzugreifen den aktuellen 'Wert' des Arrays auslesen.

Insofern ist die Session-Lösung einer Datenbanklösung absolut gleichwertig, jedenfalls vom Datenhandling und ihrer Verfügbarkeit.

Das habe ich jetzt auch verstanden.

Warum nicht gleich diese Hashvariable als Sessionvariable festlegen? :)

Das wäre auch mein Vorschlag. Nur um das nochmal klarzustellen:
Ich bin nicht dabei, ein Performance-Problem zu beheben, sondern einen sträflich geschrieben Anfänger-Warenkorb (mein erstes richtiges PHP-Script ;-)) neu zu schreiben. Und jetzt habe ich halt die Qual der Wahl, und würde mich jetzt gerne direkt für die bessere Lösung entscheiden, bevor ich dann im Fall der Fälle nochmal was ändern müßte. Ich glaube Du hast Recht, ich werde wohl auch langfristig keine derartigen Performance-Probleme bekommen. Also lassen wir mal den Performance-Gesichtspunkt außern vor. Der einzige Vorteil ist ja noch, das evtl. erst gar keine Verbindung zur DB aufgenommen werden muß, aber 1. habe ich eh eine persistente Verbindung(die bleibt doch über ein Script hinaus bestehen oder?), und 2. greife ich eh auf den meisten Seite zusätzlich auf die DB zurück, also ist diese zeitliche Verzögerung auch zu vernachlässigen. Aber ein anderer Vorteil wäre, ich könnte mal mehr über Sessions und Arrays lernen, was ja auch nicht schlecht wäre, aber da hat der Warenkorb nichts von ;-)
Welche Varinate würdet Ihr jetzt noch empfehlen? Auch in anbetracht der Tatsache, das ich gerne mal mit einer Warenkorb-Klasse arbeiten würde!

Vielen Dank schonmal und viele Grüße

Andreas