Problem med brug af session til varekurv i webshop

Tags:    php

Hejsa,

Jeg er igang med at lave en webshop i PHP/mySQL, hvor alle varerne er gemt i mySQL-databasen. Nu er jeg nået til varekurvs-delen, hvor man skal kunne trykke 'Køb' ud for en vare og så bliver den vist ude i en varekurv i menuen. Jeg har forsøgt mig med sessions, og det virker som sådan også. Problemet er bare lige nu, at man kun kan tilføje én vare til kurven, og hvis man prøver at tilføje én til bliver den gamle overskrevet. Det skulle den helst ikke. Er der nogen der kan hitte ud af hvordan jeg kan løse det?

Her står min sessionkode fra den side hvor varerne er listet, shop.php:


Her vælger man hvor mange varer man vil have og lægger i kurven:
Fold kodeboks ind/udKode 


Og dette er min varekurv:

Fold kodeboks ind/udKode 


Med venlig hilsen,
Christoffer Kjeldgaard



4 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 1 karma
Sorter efter stemmer Sorter efter dato
Der findes mange løsninger på dit problem, men det mest enkle ville være at bruge arrays... dit array kan f.eks. se sådan ud:

| varenavn | antal | pris pr. stk |

så er det bare at gemme dette array i sessionen i stedet.

et eks. på 2 varer:

| Lagkage | 1 | 1400 |
| Sukker 2kg | 2 | 20 |

Så kan du ved at løbe det igennem se hvor meget kunden har købt for osv...



Der findes mange løsninger på dit problem, men det mest enkle ville være at bruge arrays...


Fint nok, nu gemmer jeg det i et array i stedet, og koden ser nu således ud:

Lægger vare i kurven:
Fold kodeboks ind/udKode 


Selve varekurven:
Fold kodeboks ind/udKode 


Men det løser ikke problemet med, at varerne bliver overskrevet når brugeren trykker 'Køb' på en ny vare. Er der ikke nogen der ved hvordan jeg kan løse dette?

[Redigeret d. 25/04-04 14:45:54 af Bjarne Kruse]



Du skal lave et todimensionalt array, f.eks. 100x3 hvor 3 er (varenavn, pris, antal). De 100 er så det antal køb du kan foretage dig inden du løber ind i problemer ;) - nåh, men der for skal du sætte en sessionvariabel, 'koebnr', til 0 når du initialiserer, hvis der så bliver købt noget, så er koebnr = koebnr +1, altså 1 :)

hmm pænt svært at forklare, lidt pseudokode:

//initialiser
intKoeb = 0;
intKurv = array(99, 2) //husk at arrays er 0-baseret derfor de "-1"

//indsæt vare
//intKoeb er stadigvæk 0
intKurv(intKoeb)(0) = 'varenavn'
intKurv(intKoeb)(1) = antal
intKurv(intKoeb)(2) = pris

På den måde kan du styre det...

Så kan du jo hvis du vil udskrive det gøre således:
//udskriv
intI = 0
intMax = 99

While intI < 99
echo intKurv(i)(0) //udskriver varenavnet på vare nr i

Lidt løst men jeg har p.t. ikke tid til at lave et eksempel, beklager, håber dog at du kan bruge det til noget....



Nu fandt jeg så ud af det på anden vis. Min nye kode blev som følger:

Der hvor man lægger varer i kurven
Fold kodeboks ind/udKode 


Selve varekurven:
Fold kodeboks ind/udKode 




t