Habe den Fehler gefunden. Er befindet sich im Konstruktor der sitzungsSeite-Klasse:
Hier erstmal das Original:
PHP:
public function __construct()
{
session_start();
if (!is_array(isset($_SESSION['korb']))) // Hier ist der Bug!
{
$_SESSION['korb'] = array();
}
$this->korb = $_SESSION['korb'];
}
Das Problem ist, das die if-Prüfung immer wahr zurück liefern wird, denn
- is_array() prüft, ob eine Variable bzw. ein Wert ein Array ist
- isset() gibt ein "true" zurück, wenn eine Variable nicht leer bzw. gesetzt ist, oder "false" wenn die Variable nicht exisiert oder leer ist
- demzufolge prüft laut dem Code, die is_array-Funktion, ob entweder true oder false ein Array ist, was beides mal falsch ist.
- Dadurch, das für dem is_array() ein Ausrufe-Zeichen steht, wird die Prüfung negiert, sprich man geht vom Gegenteil aus.
Wir schreiben jetzt mal in unserer Sprache, was da geprüft würde:
"Prüfe, ob der Wert von $_SESSION['korb'] nicht leer ist. Übergib das Ergebnis an 'Prüfe, ob der Wert kein Array ist'" => Das ist immer wahr!
Folglich wird der Code im Anweisungsblock immer ausgeführt, die Session-Variable wird also immer überschrieben, und damit das, was eine Seite zuvor in die Session geschrieben wurde, wieder gelöscht. Daher ist dein Warenkorb immer leer.
Die korrekte Prüfung dürfte lauten:
PHP:
public function __construct()
{
session_start();
if (!is_array($_SESSION['korb']))
{
$_SESSION['korb'] = array();
}
$this->korb = $_SESSION['korb'];
}