Logischer Fehler beim Schleifendurchlauf

dwex

Erfahrenes Mitglied
Hallo Leute,

ich versuche mich gerade ein einem Warenkorb.
Wenn man einen Artikel hinzufügt, welcher bereits in Warenkorb vorhanden ist soll einfach die Menge des (im Warenkorb) vorhandenen Artikels mit der Menge aus dem $_POST-Array addiert werden.

Dazu habe ich folgenden Quelltext geschrieben:
ACHTUNG: Bitte nicht von $section_id irritieren lassen - dies ist die Artikelnummer!
PHP:
if($_POST['action'] == 'add') {

	if(!$_SESSION['warenkorb']) { // Prüfen ob Warenkorb in der Session schon existiert - wenn nicht dann einen Artikel in die Variable schreiben
	
		$postvariablen = array("section_id" => $_POST['section_id'], "artikelname" => $_POST['artikelname'], "artikelpreis" => $_POST['artikelpreis'], "menge" => $_POST['menge']);
        
        $_SESSION['warenkorb'][] = $postvariablen;
        
	} else { // Wenn Warenkorb bereits exisitiert dann Prüfen ob Artikel bereits in der Variable und dann Hinzufügen oder Updaten
        
		for($i=0; $i<count($_SESSION['warenkorb']); $i++) { // Warenkorb mit Schleife durchsuchen
			
			if( $_SESSION['warenkorb'][$i]['section_id'] == $_POST['section_id']) { // Wenn ID im Warenkorb gefunden dann Menge addieren
				
				$menge = $_SESSION['warenkorb'][$i]['menge'] + $_POST['menge'];
				
				$postvariablen = array("section_id" => $_POST['section_id'], "artikelname" => $_POST['artikelname'], "artikelpreis" => $_POST['artikelpreis'], "menge" => $menge);
        
        		$_SESSION['warenkorb'][$i] = $postvariablen;
        		
        		break;
			
			} else { // Wenn ID im Warenkorb nicht gefunden dann Artikel hinzufügen
				
				$postvariablen = array("section_id" => $_POST['section_id'], "artikelname" => $_POST['artikelname'], "artikelpreis" => $_POST['artikelpreis'], "menge" => $_POST['menge']);
        
        		$_SESSION['warenkorb'][] = $postvariablen;
        		
			}
			
		}
		
	}
	
}

So wenn ich nun meinen ersten Artikel (z.b. 1 Stück) hinzfüge dann funktioniert das bestens.
Code:
Array
(
    [0] => Array
        (
            [section_id] => 12
            [artikelname] => Superdrache \"Herbie\"
            [artikelpreis] => 17.90
            [menge] => 1
        )

)


Wird dann ein zweiter (anderer) Artikel (z.b. 3 Stück) hinzugefügt dann wird grundsätzlich dessen Menge verdoppelt.
Code:
Array
(
    [0] => Array
        (
            [section_id] => 12
            [artikelname] => Superdrache \"Herbie\"
            [artikelpreis] => 17.90
            [menge] => 1
        )

    [1] => Array
        (
            [section_id] => 16
            [artikelname] => Ein weiterer Drache
            [artikelpreis] => 158.90
            [menge] => 6
        )

)

Wenn ich jetzt für den zweiten hinzugefügten Artikel wieder ein Post-Array sende um die Anzahl (z.b. 1 Stück) zu addieren dann funktioniert das jedoch macht er mir dann auch noch zusätzlich einen weiteren Artikel in das Warenkorb-Array.
Code:
Array
(
    [0] => Array
        (
            [section_id] => 12
            [artikelname] => Superdrache \"Herbie\"
            [artikelpreis] => 17.90
            [menge] => 1
        )

    [1] => Array
        (
            [section_id] => 16
            [artikelname] => Ein weiterer Drache
            [artikelpreis] => 158.90
            [menge] => 7
        )

    [2] => Array
        (
            [section_id] => 16
            [artikelname] => Ein weiterer Drache
            [artikelpreis] => 158.90
            [menge] => 1
        )

)

Erstaunlicherweise wenn ich den ersten Artikel über ein Post-Array wieder sende (z.b. 12 Stück) dann addiert er mir das zum richtigen Artikel und macht kein weiteres Array in den Warenkorb.
Code:
Array
(
    [0] => Array
        (
            [section_id] => 12
            [artikelname] => Superdrache \"Herbie\"
            [artikelpreis] => 17.90
            [menge] => 13
        )

    [1] => Array
        (
            [section_id] => 16
            [artikelname] => Ein weiterer Drache
            [artikelpreis] => 158.90
            [menge] => 7
        )

    [2] => Array
        (
            [section_id] => 16
            [artikelname] => Ein weiterer Drache
            [artikelpreis] => 158.90
            [menge] => 1
        )

)

Kann mir bitte jemand die Tomaten von meinen Augen nehmen - ich finde den Fehler hier nicht.
Vielen Dank für eure Mühen im Voraus!
 
Hallo Leute,

ich habe die Tomaten auf meinen Augen jetzt gegessen und folgendes gemacht sodass es funktioniert - manchmal ist man einfach zu doof :D

Ist ja klar, wenn man das ganze in der Schleife erledigt, dass es dann wenn der Artikel nicht der erste in der Reihe ist zu solchen "Phänomenen" kommt.

PHP:
if($_POST['action'] == 'add') {

	if(!$_SESSION['warenkorb']) { // Prüfen ob Warenkorb in der Session schon existiert - wenn nicht dann einen Artikel in die Variable schreiben
	
		$postvariablen = array("section_id" => $_POST['section_id'], "artikelname" => $_POST['artikelname'], "artikelpreis" => $_POST['artikelpreis'], "menge" => $_POST['menge']);
        
        $_SESSION['warenkorb'][] = $postvariablen;
        
	} else { // Wenn Warenkorb bereits exisitiert dann Prüfen ob Artikel bereits in der Variable und dann Hinzufügen oder Updaten
        
		for($i=0; $i<count($_SESSION['warenkorb']); $i++) { // Warenkorb mit Schleife durchsuchen
			
			if( $_SESSION['warenkorb'][$i]['section_id'] == $_POST['section_id']) { // Wenn ID im Warenkorb gefunden $array_id setzen
				$array_id = $i;
				break;
			}			
			
		}
		
		
		if(isset($array_id)) { // Wenn ID im Warenkorb gefunden und gesetzt - dann Artikelmenge addieren
		
				$menge = $_SESSION['warenkorb'][$array_id]['menge'] + $_POST['menge'];
            
            $postvariablen = array("section_id" => $_POST['section_id'], "artikelname" => $_POST['artikelname'], "artikelpreis" => $_POST['artikelpreis'], "menge" => $menge);
    
            $_SESSION['warenkorb'][$array_id] = $postvariablen;
            
        } else { // Wenn ID im Warenkorb nicht gefunden oder gesetzt - dann Artikel hinzufügen
        
            $postvariablen = array("section_id" => $_POST['section_id'], "artikelname" => $_POST['artikelname'], "artikelpreis" => $_POST['artikelpreis'], "menge" => $_POST['menge']);
    
            $_SESSION['warenkorb'][] = $postvariablen;
            
        }
		
	}
	
}
 
Zuletzt bearbeitet:
Zurück