Webshop "SESSION"-Konstrukt

DiDiJo

Erfahrenes Mitglied
Hi Leute ...

ich bin gerade dabei nen Warenkorbsystem in eine Homepage zu basteln. Soweit hab ich auch alles Problemlos erstellen können.

Ich hab auch schon soweit meine Grundfunktionen geschriben ... wie z.B. Artikel in den WK einfügen ... Warenkorb ausgeben ... Warenkorb abändern ... [...].

Hier mal ein kleiner Überblick meiner Funktionen:
Code:
function aktualisiereWarenkorb() {
	$keys = array_keys($_REQUEST);

	foreach ($keys as $key)
	{
		if (preg_match("/^menge_/", $key)) {		
			$pos = str_replace("menge_", "", $key);	
			$artikel = $_SESSION['warenkorb']['id'][$pos];
			if ($_REQUEST[$key] > 0){								
				$_SESSION['warenkorb']['menge'][$pos] = $_REQUEST[$key];
			} else {								
				#echo '------> '.$pos.'  <br/>';
				$_SESSION['warenkorb'] = deleteArtikelInWarenkorb($pos);
			}
		}
	}
}

function deleteArtikelInWarenkorb($position) {
	$warenkorb = array();
	$anzWaren = countArtikelInWK();
	for ($i=0; $i < $anzWaren; $i++) {
		if ($i != $position) {
			#unset($_SESSION['warenkorb']['id'][$i]);
			#unset($_SESSION['warenkorb']['menge'][$i]);
			$warenkorb['warenkorb']['id'][] = $_SESSION['warenkorb']['id'][$i];
			$warenkorb['warenkorb']['menge'][] = $_SESSION['warenkorb']['menge'][$i];
		}
	}
	
	$_SESSION['warenkorb'] = $warenkorb;
}

function addArtikel2Warenkorb($id) {
	$check = artikelInWarenkorb($id);
	if ($check === false) {
		$_SESSION['warenkorb']['id'][] = $id;
		$_SESSION['warenkorb']['menge'][] = 1;
	} else {
		$_SESSION['warenkorb']['menge'][$check] += 1;	
	}
}


function artikelInWarenkorb($id) {
	$anzWaren = countArtikelInWK();
	for ($i=0; $i < $anzWaren; $i++) {
		if ($_SESSION['warenkorb']['id'][$i] == $id) return $i;
	}
	return false;
}

function countArtikelInWK() {
	return count($_SESSION['warenkorb']['id']);
}

bis auf diese "deleteArtikelInWarenkorb" funktioniert alles super. Nachdem ich nun die gerade genannt Funktion mehrfach umgeschriebn habe ... komme ich zu dem Punkt, dass meine ganze SESSION-Struktur nicht so das ware ist. Zumindest kriege ich es zum erbrechen nicht hin, dass ich ein Element in meinem Warenkorb lösche. Das heißt ich will werder die Artikel-Id noch die Menge der Elemente in der Session-Variable stehen haben.

Aber bevor jemand auf dieses Problem eingeht ... kann ich mit so einem Konstrukt halbwegs gut weiterarbeiten ... würdet Ihr das ganze System umstricken ? Was sind ewure Tipps für mich ... und viel wichtiger ... warum klappt meine Delete-Funktion nicht.

mfg

DiDi


P.S.
Hier ein Link um sich den Shop mal anzuschauen ....
http://w00bd561.dd8328.kasserver.com/shop.php

Sollte mal der Warenkorb kaputtgehen (weil man versucht null Artikel in den Warenkorb zu legen) ruft man die Seite am besten wie folgt auf:
http://w00bd561.dd8328.kasserver.com/shop.php?unsetWK=1
 
also ... sry dass ich gestern nicht mehr geantwortet habe aber ich war nicht mehr im Büro.

Mit einem ausgeschlafenen Kop hab ich mein Problem heute auch recht zügig lösen können.
Code:
function deleteArtikelInWarenkorb($position) {
	$warenkorb = array();
	$anzWaren = countArtikelInWK();
	for ($i=0; $i < $anzWaren; $i++) {
		if ($i != $position) {
			#unset($_SESSION['warenkorb']['id'][$i]);
			#unset($_SESSION['warenkorb']['menge'][$i]);
			$warenkorb['id'][] = $_SESSION['warenkorb']['id'][$i];
			$warenkorb['menge'][] = $_SESSION['warenkorb']['menge'][$i];
		}
	}
	return $warenkorb;
}

So hab ich jetzt gelöst was auch funktioniert ... aber meine eigentliche frage; Ist dieses Array Konstrukt sinnvoll? ... würde ich trotzdem gerne beantwortet bekommen..

Ich frag nur weil ich so ein Webshop noch nie gemacht habe und ich quasi nmeuland betrete. Ich weiß, dass man das ganze auch mit ner Klasse hätte lösen könmnen, allerdings bin ich nicht so der Klassen-Fan (aufgrundf miner PhP-Kenntnisse)
 
Eine Möglichkeit wäre, es über eine Datenbank wie Mysql zu regeln.
Jeder User meldet sich, an und in einer Tabelle werden alle Waren im Warenkorb für den User gespeichert
 
neee ... das kann man bei Seiten machen die oft vom gleichen Besucher besucht werden.

jemand der sich (wie in diesem fall) ne Solaranlage holt macht das einmal und nie wieder ... der hat dann auch keine Lust sich extra für den Shop anzumelden / registrieren. Deshalb wollte ich das ganze über die Session lösen
 
Zurück