Mehrdimensionale Session-Arrays

tommycush

Mitglied
Hi,

ich habe ein Problem mit dem Speichern und Abrufen von Daten in mehrdimensionalen Session-Arrays. Ich versuche eine Art primitives Shopsystem zu programmieren. Jede Bestellung soll unter einer Bestellnr und bestimmten Eigenschaften in der Session festgehalten werden, bis der Kunde sich anmeldet und die Bestellung abschließt.

Um das zu testen habe ich erstmal folgendes probiert:

Datei eintragen.php:
PHP:
$_SESSION[0]['model'] = "rot";
$_SESSION[1]['model'] = "gelb";

Wenn ich im gleichen Skript das Array wieder ausgebe, klappt alles. Benutze ich jetzt allerdings ein anderes Skript (ausgeben.php) um die Session auszugeben, ist sie wieder leer.

Das passiert ausschließlich mit mehrdimensionalen Arrays. Eindimensionale Arrays, wie z.B. $_SESSION['model'], werden perfekt gespeichert und lassen sich auch skriptübergreifend wieder ausgeben.

Weiß einer was ich da falsch mache?

Viele Grüße,
Martin
 
hm, inwiefern? die beiden befehle weisen die werte ja nicht den gleichen array-stellen zu. schreibe ich direkt hinter die wertezuweisung eine echo ausgabe der speziellen array-stellen, krieg ich eine korrekte ausgabe. kommt die echo ausgabe in einem anderen skript, gibts eine leere ausgabe.
 
Wenn die Array-Inhalte in anderen Skripten gar nicht zur Verfügung stehen, scheint die Übergabe der Sitzungs-ID nicht zu funktionieren, sodass eine Wiederaufnahme der Sitzung auch nicht möglich ist.

Anders kann ich mir das Verhalten nicht erklären, da die $_SESSION-Variable auch eigentlich nur eine normale Variabel ist, nur dass ihr Inhalt sitzungsweit zur Verfügung steht.
 
die session id lässt sich in jedem skript ausgeben und bleibt immer gleich. und benutze ich die session als "normales" array (also nicht mehrdimensional) funktioniert die ausgabe auch skriptübergreifend. muss man vielleicht mehrdimensionale arrays vorher irgendwie initialisieren, oder geht sowas nur in bestimmten php versionen? irgendwie macht das alles keinen sinn...
 
Dann muss es daran liegen, wie du die Werte dem Array zuweist. Zeig doch mal bitte etwas Quellcode.
 
ok, gerne.

so sieht die datei eingabe.php aus:

PHP:
<?php

session_start();

echo session_id();

$_SESSION[0]['model'] = "rot";
$_SESSION[1]['model'] = "gelb";

?>

und so die datei ausgabe.php:

PHP:
<?php

session_start();

echo session_id();

echo $_SESSION[0]['model'];
echo $_SESSION[1]['model'];

?>

ich rufe zuerst eingabe.php auf, und dann ausgabe.php
trotzdem gibt ausgabe.php nur die session id aus.
 
Um ehrlich zu sein, kann ich eine mögliche Ursache für diesen Fehler gar nicht nachvollziehen. Syntaktisch und semantisch gesehen, sind beide Skripte einwandfrei.

Lass dir doch mal die Struktur des gesamten Arrays ausgeben:
PHP:
var_dump($_SESSION);
 
Hm,

wie gehabt... in eingabe.php gibt var_dump folgendes aus:

array(2) { [0]=> array(1) { ["model"]=> string(3) "rot" } [1]=> array(1) { ["model"]=> string(4) "gelb" } }

In ausgabe.php wird ein frustrierendes

array(0) { }

geliefert.

Habs jetzt auch nochmal mit diesen Skripten probiert:

eingabe.php

PHP:
<?php

session_start();

echo session_id();

$_SESSION['model'] = "rot";

?>

und ausgabe.php

PHP:
<?php

session_start();

echo session_id();

echo $_SESSION['model'];

?>

und alles funktioniert ganz hervorragend. Es muss irgendwas mit der Mehrdimensionalität zu tun haben...

Hab es auf zwei verschiedenen Servern mit den PHP Versionen 5.2.0 und 4.4.0 ausprobiert.
 
Problem gelöst...

Zitat (http://de3.php.net/manual/en/ref.session.php):
The keys in the $_SESSION associative array are subject to the same limitations as regular variable names in PHP, i.e. they cannot start with a number and must start with a letter or underscore. For more details see the section on variables <http://de3.php.net/manual/en/language.variables.php> in this manual.

Das Array darf also in erster Instanz nicht mit einer Zahl anfangen...

Mach ich das Ganze beispielsweise mit $_SESSION['bestellung0']['model'], funktioniert es.
 
Zurück