goedenavond iedereen,

ik loop tegen een klein probleem op, ik ben bezig met het programmeren van mijn webshop maar ik heb een klein probleem met mijn shopping cart wanneer ik the quantity van mijn array in mijn shopping cart session probeer aan te passen, zodra ik het probeer aan te passen komt er te staan NULL in the key: quantity

dit is de code die het zou moeten aanpassen maar ik snap niet zo goed wat er fout gaat ben namelijk ook geen pro met associative arrays.

dit is precies wat mijn error aangeeft: Undefined offset: 10



$quantity_txt = $_POST['var-qnty_val'];

if(isset($_POST['btn-sbt_qnty'])){
	foreach($_SESSION["shopping_cart"] as $key => $value){
		$_SESSION["shopping_cart"][$key]['quantity'] = [$value][$quantity_txt];
}

}




P.S de quantity value begint met '1' en ik probeerde het te veranderen naar 10 en dat veranderde naar NULL

alvast bedankt,

groetjes jan
Dan zullen we inderdaad hetzelfde bedoelen. Je hebt een 'cart' array met daarin product ids en aantallen. Meer moet je inderdaad niet in een sessie opslaan.
ik snap nog niet helemaal waar jullie naar toe wilde maar heb het wel opgelost al in de tussentijd, het enigste wat mist was de id mee te geven voor het veranderen van de quantity value het ziet er nu zo uit en werkt prima.



$quantity_txt = $_POST['var-qnty_val'];

if(isset($_POST['btn-sbt_qnty'])){
	foreach($_SESSION["shopping_cart"] as $key => $value){
		if($_POST["code"] == $key){
		$_SESSION["shopping_cart"][$key]['quantity'] = $quantity_txt;
		}
}

}

De code hierboven is niet echt zinnig.

In regel 1 is $_POST['var-qnty_val'] mogelijk niet gedefinieerd, pas in regel 3 controleer je of er iets (via POST) gesubmit is?

Vervolgens voer je een foreach loop uit om één waarde aan te passen? Is dit om te garanderen dat $_SESSION['shopping_cart'][$key] bestaat? Daar zijn andere manieren voor, daar hoef je niet heel je cart voor te doorlopen. En als je onderscheid wilt maken tussen items die reeds in je cart zitten (waarbij je $quantity_text bij de reeds aanwezige hoeveelheid optelt) of voor het eerst toevoegt, dat kan ook met een simpele isset().

En dan nog de mysterieuze key "quantity", wat zit er nog meer in $_SESSION['shopping_cart'][$key] dat je een subarray nodig hebt? Kun je dit niet rechtstreeks aan $_SESSION['shopping_cart'][$key] hangen? Wat voor productinformatie houd je nog meer bij behalve product-id en hoeveelheid in de winkelmand? En zoals eerder aangegeven, meer dan dat hoef je eigenlijk niet van producten bij te houden.

Simpelweg omdat iets werkt maakt het nog niet juist. En ik vermoed dat dit nog steeds foutmeldingen/warnings produceert vanwege een mogelijk niet-bestaande variabele.
dat van regel 1 viel me inderdaad ook op dus ik heb de variable weggehaald en heb dit er van gemaakt:


$_SESSION["shopping_cart"][$key]['quantity'] = $_POST['var-qnty_val'];


ik krijg nu ook geen melding meer van php.


daarbij over hoe mijn winkelmand ingedeeld is, als ik dit er van zou maken :

$_SESSION['shopping_cart'][$key]

of

$_SESSION['shopping_cart']['quantity']

krijg ik in beide instanties errors en krijg ik het niet eens voor elkaar om item total x quantity te berekenen en het totaal.

zou ook niet weten waarom mij code fout is als het werkt, en als het op een betere manier kan zonder een hoop foutmeldingen sta ik daar natuurlijk open voor.


Okay, een voorbeeld met "ingevulde waarden":
<?php
// start hier ergens je sessie

$_SESSION['cart'][5] = 4;
?>

(uiteraard komen 5 en 4 elders uit code)

Hiermee stop je 4 x het product met id 5 in je winkelmand. De sleutels in "cart" vormen je product id's en de waarden de hoeveelheden.

Op die manier kun je hier ook makkelijk en op een intuïtieve manier doorheen lo(o)pen:
<?php
// start hier ergens je sessie

// indien de cart niet leeg is
if (false === empty($_SESSION['cart'])) {
    // loop door je winkelmand heen
    foreach ($_SESSION['cart'] as $productId => $quantity) {
        echo 'ik heb '.$quantity.' keer product met id '.$productId.' in mijn winkelmand.<br>';
    }
}
?>

Korter kan het niet en langer hoeft het niet.

Reageren