Mehrdimensionale Arrays, schaffes nicht

Schänk

Mitglied
Moin

Ich hab folgende Funktion:
HTML:
class basket {
	//var $showBasket;

	function addBasket($prodID, $anzahl) {
		$countBasket = count($showBasket)+1;
		$showBasket[$countBasket] = array(
			"prodID"=>$prodID,
			"anzahl"=>$anzahl );
		
		$count = count($showBasket);
		for($x=0;$x<=$count;$x++) {
			foreach($showBasket as $value=>$details) {
				foreach($details as $value2=>$elem) {
					echo $value.": ".$value2.": ".$elem."<br>";
				}
			echo "<br>";
			}
		}
	}
}

Es geht um einen Warenkorb für nen Onlineshop.
Die Variabel $showBasket hab ich im Index file als global gesetzt.

Es funktioniert soweit auch, nur dass das Array $showBasket[$countBasket] bei jedem weiteren Eintrag überschrieben wird, anstatt einen neuen Wert anzuhängen.

Kann mir jemand helfen?

thx Greetz Schänk
 
Du musst die Klassenvariable wieder einkommentieren ( var $showBasket; ) Ausserdem musst du innerhalb der Klassenfunktionen mittels $this->showBasket auf die Variable zugreifen.
 
$this->showBasket[$countBasket] = array(....);

so? Und jedes mal wenn ich in der Funktion die Variabel $showBasket brauche?
 
Zuletzt bearbeitet:
HTML:
class basket {
	var $showBasket;

	function addBasket($prodID, $anzahl) {
		$countBasket = count($this->showBasket)+1;
		$this->showBasket[$countBasket] = array(
			"prodID"=>$prodID,
			"anzahl"=>$anzahl );
		
		$count = count($this->showBasket);
		for($x=0;$x<=$count;$x++) {
			foreach($this->showBasket as $value=>$details) {
				foreach($details as $value2=>$elem) {
					echo $value.": ".$value2.": ".$elem."<br>";
				}
			echo "<br>";
			}
		}
	}
}

Hab's jetzt mal so gemacht
Bei der Ausgabe des Arrays bekomm ich aber 2mal den selben Eintrag zurückgegeben, welcher sich immer von der neuen Eingabe überschreiben lässe :(

1: prodID: 69
1: anzahl: 6

1: prodID: 69
1: anzahl: 6
 
Änder mal die For-Schleife in folgende Zeile um:
PHP:
for($x=0;$x<$count;$x++)

Ausserdem wäre es interessant, wie du das objekt instanzierst und wie die Methode aufgerufen wird.
 
Aufgerufen wird die Methode so...
$basket->addBasket($_GET['prodID'], $_GET['basketAnzahl']);

Die Variabeln prodID und basketAnzahl kommen aus einem Formular.


Das Objekt wird so instanziert:
$basket = new basket();
 
1.) Klappt es mit der Änderung der For-Schleife?

2.) Speicherst du auch das Objekt in einer Session (oder anderswo) ab, damit die Daten auch nicht verloren gehen, wenn der Nutzer den Shop benutzt und dabei verschiedene Seiten nacheinander aufruft?
 
Mit der forschlaufe bekomm ich nun nur noch eine Ausgabe, das ist gut so. Danke

Das Objekt wird in keiner Session abgespeichert... Ich hab sie im Index file als global gsetzt.. Also

global $showBasket;


Reicht das nicht? Der Shop ist in einem sparatem Fenster, wenn dieses geschlossen wird, werden alle Daten im Warenkorb gelöscht, das ist klar. Der Shop hat nichts mit der restlichen website zu tun
 
Das ist egal. Sobald man im Shop auf einen Link klickt oder ein Formular absendet, wird eine neue Seite aufgerufen und alle Variablen, die du nicht gespeichert hast, gehen verloren. Die Globalisierung der Variable hilft dagegen nicht. Du musst das Objekt in der Session-Speichern, um über die Seitenaufrufe hinweg, die Daten des Warenkorbs nicht zu verlieren.
 
ok, dann mach ich das mal
Danke dir. Melde mich wieder wens geklappt hat oder ich ganz am verzweifeln bin :D

edit...

Reicht das so?

session_start();
$_SESSION['basket'] = $showBasket;
session_register();
 
Zuletzt bearbeitet:
Zurück