Hei,
olisiko tämä hyvä tapa toteuttaa ostoskori, eli istuntoon tallennetaan array johon on laitettuna nimi ja kpl-määrä.
$_SESSION['cart'] = array( 1 ==> 2, 2 ==> 1 );
Tämä siis tarkottaisi että tuotetta 1 on 2 kpl ja tuotetta 2 on 1 kpl
Olisiko olemassa joku toinen vielä parempi tapa?
Itse saattaisin harkita myös tuotteiden nimien ja hintojen tallentamista, jos kerran halutaan että ostoskori ei ole tietokannassa.
Mielestäni on kaksi vaihtoehtoa, ostoskori on kokonaan istunnossa tai kokonaan tietokannassa. Jos näitä sekoittaa, niin lopputuloksena on vaan hankalampi ja huonompisuorituskykyinen ratkaisu, kuin kumpi tahansa noista kahdesta.
No ajattelin niin että silloin kun listataan ostoskorissa olevat tuotteet niin haetaan tuote kerrallaan tuotteen tiedot tietokannasta.
Jos säilyttäisi tiedot kokonaan istunnossa, niin sitten jos tuotteen nimeen/hintoihin tulee muutoksia niin ne eivät päivity käyttäjälle.
No miksi sitten et säilyttäisi ostokoriakin kannassa?
No sitten olisi vaikeampi yksilöidä eri käyttäjät. Menisi liian monimutkaiseksi - joutuisi tekemään esim kirjautumisen ja muut eivät voisi pitää ollenkaan ostoskoria
Voithan tallentaa keksiin jonkun uniikin tunnisteen, ja liität sen kannan tietoihin ostoksista.
Nyt olet tallentanut istuntoon tuotteiden id:t. Jos kori on kannassa, voit tallentaa istuntoon korin id:n.
Tietokantaan tallentaminen on välttämätöntä, jos tuotteita on rajallisesti ja haluat, että ne varataan jo koriin laitettaessa (toki mieluiten määräajaksi).
Kiitoksia näistä vastauksista. Harkitsen vielä asiaa.
Nyt olisi kuitenkin uusi kysymys - mikä olisi järkevin tapa tehdä seuraavat vaiheet:
Kun käyttäjä on kerännyt ostoskorin, mennään sivulle jossa käyttäjä antaa henkilötietonsa (nimi, puh, email, osoite jne). Tämän jälkeen olisi tarkoitus näyttää ns. viimeinen vahvistus tilauksesta jossa käyttäjä näkee tilauksen tuotteet ja yhteissumman. Siellä olisi nappi jossa vahvistetaan tilaus tai peruutetaan se.
Ajattelin että vasta painettaessa tuota viimeistä "vahvista tilaus" nappia tarkistetaan löytyykö tuotetta vielä varastosta (toki tarkistus tehdään jo ostoskoriin lisättäessä, mutta siinä tapauksessa että joku muu kerkeää sillä aikaa tehdä oman tilauksen).
Olisiko hyvä tallentaa käyttäjän tiedot istuntoon ja sieltä lukea ne kantaan kun vahvistusnappia painettu?
Ja miten lomakkeen validointi kannattaisi toteuttaa?
Olisiko tämä esim hyvä validointi skripti: http://www.html-form-guide.com/php-form/php-form-validation.html
No lomakkeen validointi onnistuu ehkä helpoiten käyttämällä jotain valmista Validointi-komponenttiä. Esim. Zend Frameworkistä löytyy mielestäni erittäin hyvä systeemi tätä varten...
Olli kirjoitti:
Ajattelin että vasta painettaessa tuota viimeistä "vahvista tilaus" nappia tarkistetaan löytyykö tuotetta vielä varastosta (toki tarkistus tehdään jo ostoskoriin lisättäessä, mutta siinä tapauksessa että joku muu kerkeää sillä aikaa tehdä oman tilauksen).
Itseä ainakin ärsyttäisi jos olisin ruokakaupassa ja olisin ottanut hyllystä viimeisen leipäpussin ostoskäärryyn, ja sitten kassalla huomaisin että ei prkl..juuri ostoksensa maksanut asiakas olikin sen jotenkin saanut minun kärrystä itselleen.
Toisaalta olisi sekin ärsyttävää, että joku toinen ottaisi hyllystä sen viimeisen leipäpussin ostoskärryynsä, häipyisi kaupasta jättäen kärryn lojumaan käytävälle ja siinä kärryssä oleviin tavaroihin ei saisi koskea vaikkapa 6 tuntiin.
Grez kirjoitti:
Toisaalta olisi sekin ärsyttävää, että joku toinen ottaisi hyllystä sen viimeisen leipäpussin ostoskärryynsä, häipyisi kaupasta jättäen kärryn lojumaan käytävälle ja siinä kärryssä oleviin tavaroihin ei saisi koskea vaikkapa 6 tuntiin.
6 tuntia on turhan pitkä aika tuollaiselle. Itse laittaisin max. 15/30 minuuttia, jonka jälkeen varaus poistuu mutta ostoskori säilyy silti kannassa.
Riippuen toki kuinka paljon tuotetta on jäljellä. Jos on runsaasti niin sama se nyt on vaikka varata 24 tunniksi, asiakashan siitä vain tykkää :)
Toisaalta vaikka olisi 15/30 minuuttia, niin silti sille toiselle näkyisi sen aikaa vaan että "tuotetta ei ole vapaana". Vai pitäisikö olla joku että "tuotetta ei vapaana, mutta jollei toinen asiakas tilaa sitä 8,5 minuutin kuluttua, se vapautuu" :D
Aihe on jo aika vanha, joten et voi enää vastata siihen.