HILFE: Problem mit Sessions!

KP-2007

Grünschnabel
Hallo Leute.

Ich brauche eure HILFE!!

Ich habe ein verflixtes Problem mit Sessions und komme einfach nicht auf den Fehler :confused:

Ich bin gerade dabei einen super schlichten Warenkorb mit sessions aufzubauen.
Es gibt da die Session "Produkte". Hier sollen alle ausgewählten Produkte in der session als array gespeichert werden und später mittels einer foreach-schleife ausgelesen werden.

Und genau da liegt wohl das Problem.

Wie ich schon hier gelesen hatte muss man der Session wohl erstmal sagen, dass sie ein Array sein soll -> $_SESSION['produkte'] = array();
Und das wohl auch nur beim ersten Mal, da sonst die session wohl wieder geleert wird.

Also bei mir sieht das dann so aus:

PHP:
 if($_SESSION["produkte"] == ""  || $_SESSION["produkte"] == FALSE)
{
$_SESSION['produkte'] = array();
}
$_SESSION['produkte'][] = $artikel;      // Sagen wir mal $artikel = 3

Später lese ich diese Session dann so aus:
PHP:
 foreach($_SESSION['produkte'] as $prod) {
echo $prod;
}

Also auf meinem Rechner (localhost) funktioniert das auch alles wunderbar eigendlich. Nur jetzt habe ich die ganze Geschichte mal auf dem Server (bei evanzo :mad:) probiert und ich bekomme folgende Fehlermeldung: "Warning: Invalid argument supplied for foreach() in ... ", was ja soviel sagen sollte, als dass die foreach schleife kein Array zum durchlaufen hat, oder

Aber es ist doch ein Array! Hatte auch schon mal die foreach-schleife so gemacht:

PHP:
 foreach($_SESSION['produkte'][] as $prod) {
echo $prod;
}

Wenn ich es so mache, kommt keine Fehlermeldung, aber auch keine Ausgabe. Das Korriose an der Sasche ist, dass mir
PHP:
 echo sizeof($_SESSION["produkte"]);
die richtige Anzahl in dem Array zurückgibt.

Vielleicht seht Ihr ja den Fehler oder könnt mir einen Tipp geben, was ich versuchen könnte. Wäre echt nett.

Ich hoffe das war nicht etwas zu komplex erklärt... :eek:

PS: Bin neu hier, falls evtl. falsch gepostet bitte verschieben, danke. ;-)
 
Mach mal ein [phpf]var_dump[/phpf] auf $_SESSION['produkte'] und schau, was es dir ausgibt. Und änder mal die if-Abfrage auf:
PHP:
if(!isset($_SESSION['produkte']) || empty($_SESSION['produkte']))
 
Die Ursache des Problens ist vermutlich ganz einfach, dass die Sitzung, in der die Daten gespeichert sind, nicht wieder aufgenommen wird, da die Sitzungs-ID nicht übergeben wurde. Lass dir mal die Sitzungs-ID ausgeben und prüfe, ob sie bei jedem Aufruf identisch ist.
 
Erstmal: Vielen Dank soweit. :)
Ich habe die if Anweisung abgeändert... Und es lag wohl wirklich daran, dass die sitzungs-id nicht übergeben wurde :-) Ich hatte @session_start(); benutzt. ohne @ geht es nun zumindestens einmal. Und da bin ich wohl bei dem nächsten probl. ;-)

Also ich habe jetzt folgenden Code da stehen:


PHP:
if(!isset($_SESSION['produkte'])  || empty($_SESSION['produkte']))
{
$_SESSION['produkte'] = array();
$_SESSION['anzahl'] = array();
$_SESSION['grundfarbe'] = array();
$_SESSION['motivfarbe'] = array();
$_SESSION['groesse'] = array();
}

$_SESSION['produkte'][] = $artikel;               // speichert in der session ab
//var_dump($_SESSION['produkte']);

$_SESSION['anzahl'][] = $anzahl;
$_SESSION['grundfarbe'][] = $grundfarbe;
$_SESSION['motivfarbe'][] = $motivfarbe;
$_SESSION['groesse'][] = $groesse;

Also, ähh mit der session produkte hat er jetzt nichts mehr zu meckern. Aber wenn ich nun ein zweites produkt in den warenkorb lege kommt folgender fehler:

"Fatal error: [] operator not supported for strings in ... on line 114"

Die Zeile 114 des obigen Quellcodes ist " $_SESSION['anzahl'][] = $anzahl; "
wenn ich mal ein vardump auf $_SESSION['anzahl'] direkt vor Zeile 114 setzte zeigt der mir beim "reinlegen" des 1. Produktes folgendes an:
PHP:
array(0) { }
Wenn ich nun das 2. Produkt in den Warenkorb legen will zeigt der mir auf einmal einen string an:
PHP:
string(1) "1"

Wie kann das sein :confused: Was mache ich denn falsch?
Wie gesagt, localhost läuft das einwandfrei nur auf dem Server nicht :-/

Wäre nett wenn ihr mir nochmal "übern Berg" helfen könntet. Ich steig da nicht recht hinter. Danke...
 
Zurück