array key value veranderen
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
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
$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];
}
}
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
$_SESSION["shopping_cart"][$key]['quantity'] = $quantity_txt;
Ozzie PHP op 28/08/2020 00:36:05:
Bedoel je dit?
$_SESSION["shopping_cart"][$key]['quantity'] = $quantity_txt;
$_SESSION["shopping_cart"][$key]['quantity'] = $quantity_txt;
hahaha ja precies dat dankjewel, ik ben blijkbaar toe aan slaap XD
Toevoeging op 28/08/2020 01:05:29:
nu krijg ik het volgende probleem, het verander iedere array value in de shopping cart inplaats van de uitgekozen key, iemand surgesties ?
Toevoeging op 28/08/2020 01:07:09:
>> het verander iedere array value in de shopping cart inplaats van de uitgekozen key
Wat is 'de uitgekozen key'? Hoe kom je daaraan?
(waarbij <product id> een product id is, en <quantity> de hoeveelheid)
Oftewel een mapping van product id naar hoeveelheid? Al die extra niveau's heb je toch niet nodig? De bijbehorende productinformatie kun je prima uit de database ophoesten en zou ik ook niet in een sessie vastleggen.
Gewijzigd op 28/08/2020 01:16:10 door Thomas van den Heuvel
Dat is toch ook wat hij doet / tracht te doen?
Ozzie PHP op 28/08/2020 01:25:05:
Dat is toch ook wat hij doet / tracht te doen?
Mja maar een sessie is geen rijdend archief waar je maar alles in zou moeten dumpen wat je handig lijkt. Hier zou alleen het hoogstnoodzakelijke in moeten zitten, zonder enige opsmuk. Alles wat in je sessie zit zou ook een weloverwogen ontwerp moeten hebben, de data hierin zou eenvoudig (toegankelijk) moeten zijn. Een "tussenmuur" in de vorm van een subarray is niet nodig --> weg ermee.
Gewijzigd op 28/08/2020 16:55:44 door Thomas van den Heuvel
Eens, maar een winkelmandje opslaan in sessie (zolang de bestelling niet is geplaatst) is zo vreemd niet.
>> Een "tussenmuur" in de vorm van een subarray is niet nodig --> weg ermee.
Ik snap niet helemaal wat je hiermee bedoelt. Welke "tussenmuur"? Oh, je bedoelt denk ik dat hij nog het woordje 'quantity' heeft toegevoegd. Als dat is wat je bedoelt dan is dat inderdaad niet nodig.
Ozzie PHP op 28/08/2020 17:01:48:
Eens, maar een winkelmandje opslaan in sessie (zolang de bestelling niet is geplaatst) is zo vreemd niet.
Productinformatie opslaan in je sessie is redundant, deze info is afleidbaar uit het product id.
Jij zegt: "Productinformatie opslaan in je sessie is redundant, deze info is afleidbaar uit het product id."
Waar heb ik het over het opslaan van productinformatie?
Waarschijnlijk bedoelen we hetzelfde, maar ik spreek @jan aan om te onderbouwen waarom je bepaalde keuzes maakt bij de indeling van informatie. Je kunt wel simpelweg oplossingen geven, maar als je niet uitlegt hoe je tot een oplossing komt leer je niet zoveel.
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.
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.
Gewijzigd op 29/08/2020 19:59:51 door Thomas van den Heuvel
ik krijg nu ook geen melding meer van php.
daarbij over hoe mijn winkelmand ingedeeld is, als ik dit er van zou maken :
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
$_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.
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.
(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:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
Korter kan het niet en langer hoeft het niet.