kazu
Aktives Mitglied
Thread Starter
- Dabei seit
- 09.11.2005
- Beiträge
- 1.425
- Reaktionspunkte
- 56
Hallo,
ich programmiere gerade einen Warenkorb: Die waren sind Objekte, die ich in $_SESSION['warenkorb'] verstaue, um sie dann im Warenkorb anzuzeigen usw.
Zuerst liest ein Skript die $_POST-Variablen, erstellt ein Objekt, legt es in $_SESSION['warenkorb'] ab und includet dann die Datei, die den Warenkorb anzeigt.
Soweit funktioniert alles (ich hoffe ich habe beim Kürzen des Codes keinen Fehler gemacht).
Wenn nun ein Artikel vom User ausgewählt wird, kann ich ihn auch wieder aus $_SESSION['warenkorb'] auslesen und anzeigen. Soweit funktioniert es.
In der korb.php steht:
Nun zum Problem:
Wenn ich einen zweiten Artikel hinzufüge, wird dieser wie gewünscht an das Array angehängt (habe ich mir ausgeben lassen), das Skript wird aber nach der Ausgabe der Anzahl des ersten Artikels beendet und gibt folgende Fehlermeldung:
Ich habe einmal testweise in der for-Schleife das erste Objekt übersprungen, das zweite wird korrekt ausgegeben (genau wie das erste, als dieses noch das einzige war).
Erst dachte ich, es läge daran, dass das Objekt in $_SESSIONS vielleicht nur eine seichte Kopie wäre. Aber das kann doch nicht der Grund sein, denn bei eben frisch hinzugefügten Objekten funktioniert es ja! Woher also kommt es, dass mein Objekt "incomplete" sein soll?
Ich wäre froh, wenn jemand hier auf die Lösung kommt, ich hänge schon seit einigen Stunden an dieser Stelle fest
Vielleicht hat ja auch mal jemand ein ähnliches Vorhaben (Objekte in Session speichern) schlauer gelöst?
Meine PHP-Version ist 5.0.4
ich programmiere gerade einen Warenkorb: Die waren sind Objekte, die ich in $_SESSION['warenkorb'] verstaue, um sie dann im Warenkorb anzuzeigen usw.
Zuerst liest ein Skript die $_POST-Variablen, erstellt ein Objekt, legt es in $_SESSION['warenkorb'] ab und includet dann die Datei, die den Warenkorb anzeigt.
PHP:
<?php
session_start();
# $_POST['Gr'] enthält die Größe der ausgewählten Ware.
# Die Klasse bereitstellen, aus der der Artikel in der gewünschten
# Größe erzeugt wird:
include("class_Artikel.php");
if( isset($_POST['Gr']) && $_POST['Gr'] != ""){ // wurde die Größe übertragen?
$size = $_POST['Gr'];
# Artikel-Objekt mit der ausgewählten Größe erstellen
$auswahl = new Artikel($size);
# Wenn es den Warenkorb noch nicht gibt, dann diesen erstellen
if( !isset($_SESSION['warenkorb']) ) $_SESSION['warenkorb'] = Array();
# In die Variable ['warenkorb'] ein Array ans Ende legen, das
# [0] die Anzahl (1) und [1] das Artikel-Objekt enthält:
array_push($_SESSION['warenkorb'], Array(1, $auswahl));
}
# Die Warenkorb-Anzeigedatei einfügen:
include("korb.php");
?>
Soweit funktioniert alles (ich hoffe ich habe beim Kürzen des Codes keinen Fehler gemacht).
Wenn nun ein Artikel vom User ausgewählt wird, kann ich ihn auch wieder aus $_SESSION['warenkorb'] auslesen und anzeigen. Soweit funktioniert es.
In der korb.php steht:
PHP:
<?php
@session_start();
if( isset($_SESSION['warenkorb']) ){ // wenn es eine Warenkorb-Variable gibt
$lim = sizeof($_SESSION['warenkorb']); // Anzahl der Artikel
for($i=0;$i<$lim;$i++){ // für jeden Artikel einmal ausführen:
print $_SESSION['warenkorb'][$i][0]." "; # Anzahl ausgeben
print $_SESSION['warenkorb'][$i][1]->gib_Groesse(); # Größe ausgeben
print "<br>\r"; # Umbruch zur besseren Lesbarkeit der Ausgabe
}
}
}else{
print "Der Warenkorb ist leer";
}
?>
Nun zum Problem:
Wenn ich einen zweiten Artikel hinzufüge, wird dieser wie gewünscht an das Array angehängt (habe ich mir ausgeben lassen), das Skript wird aber nach der Ausgabe der Anzahl des ersten Artikels beendet und gibt folgende Fehlermeldung:
Fatal error: main() [FUNCTION.MAIN]: The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "Artikel" of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition in /Users/<benutzername>/Sites/Warenkorb/korb.php on line 12
Ich habe einmal testweise in der for-Schleife das erste Objekt übersprungen, das zweite wird korrekt ausgegeben (genau wie das erste, als dieses noch das einzige war).
Erst dachte ich, es läge daran, dass das Objekt in $_SESSIONS vielleicht nur eine seichte Kopie wäre. Aber das kann doch nicht der Grund sein, denn bei eben frisch hinzugefügten Objekten funktioniert es ja! Woher also kommt es, dass mein Objekt "incomplete" sein soll?
Ich wäre froh, wenn jemand hier auf die Lösung kommt, ich hänge schon seit einigen Stunden an dieser Stelle fest
Vielleicht hat ja auch mal jemand ein ähnliches Vorhaben (Objekte in Session speichern) schlauer gelöst?
Meine PHP-Version ist 5.0.4
Zuletzt bearbeitet: