|
ASP.net (199)
ASP 3.0 (111)
PHP (30)
HTML (66)
SQL (89)
CSS (46)
XML (7)
JavaScript (78)
Diverse kode (13)
Programmering (22)
System og drift (15)
Trafikk og inntekt (11)
Guider og tips (22)
Nyttig lesestoff (23)
Web forum (604)
Link galleri (565)
ASP.NET kurs(5)
CSS kurs (2)
JQuery kurs (2)
Øk trafikken (8)
Facebook App. (4)
Microsoft CEO (6)
Server & web
Internett & epost
Systemverktøy
Sikkerhet
Fildeling
Lyd & media
Diverse software
Domenesalg
Metagenerator
Websikre farger
WebMail
Bli medlem!
Siste innlegg
Gjestebok
Tips en venn
Kontakt oss
Forsiden
|
|
Slik fungerer en nettbutikk Av: Øyvind A. Isaksen
Denne artikkelen dreier seg hovedsakelig om hvordan handleprosessen i en nettbutikk fungerer. Beskriver databasens oppbygning, og ser på hvordan koden fungerer når en ordre effektueres.
Utgangspunktet for løsningen er at det skal være mulig for en kunde å legge varer i en handlekurv, og å gå til kassen og betale. Jeg ønsker å lagre handlekurven i databasen.
Først av alt er det viktig å bygge opp en fornuftig database for å kunne gjennomføre en handleprosess så enkelt og dynamisk som mulig.
Dobbeltlagring
I 2 tilfeller har jeg valgt å lagre data dobbelt, dette for at løsningen skal bli så dynamisk som mulig. Jeg har valgt å lagre pris i tabellene tblVarer, tblHandlekurv og tblOrdrePoster. Grunnen til at prisen bør lagres i tblHandlekurv er at kunden skal få den prisen varen har når han velger å kjøpe den. Oppdateres prisen på en vare etter at en kunde har lagt den i handlekurven, skal ikke prisen på varen endres for denne kunden. Grunnen til at prisen lagres i tblOrdreposter er at en endring av prisen på en vare ikke skal endre historikken, og dermed regnskapet, for tidligere salg. Prisen ved et salg blir dermed lagret, og vil ikke endres ved prisjusteringer senere.
Har også valgt å lagre informasjonen om kunden i tblOrdre. Grunnen til dette er at kunde da har mulighet til å velge en annen leveringsadresse en der han/hun bor, eller levere varen som en gave.
SessionID
Når en kunde handler i butikken, vil handlekurven (tblHandlekurv) fylles opp med kundens varer. Grunnen til at jeg lagrer kundens SessionID i handlekurven er at da kan vi koble denne handlekurven til riktig bruker, uten at brukeren er logget inn!
Gå til kassen
Når en bruker logger inn og velger å gå til kassen, opprettes det en ny ordre i tblOrdre der opplysninger om leveringsadresse blir lagert.
Deretter tar vi dataene fra tblHandlekurv og legger disse inn i tblOrdreposter sammen med kundens KundeID. På denne måten er er tblOrdrePoster som inneholder alle effektuerte ordre, mens tblHandlekurv bare er et midlertidig sted for lagring av kundens varer under handleprosessen.
Tømme handlekurv i databasen
Handlekurven vil fylles opp med veldig mye data etterhvert. Husk at alle som kun legger en vare i handlekurven men ikke går til kassen, vil likevel legge inn poster i tblHandlekurv. Derfor vil det være greit å tømme handlekurven ved jevne mellomrom, dette kan f.eks løses med en liten kommando i Global.ASA filen som sletter alle poster i handlekurven ved f.eks re-staring av serveren.
Overføre data til Ordrepost-tabellen
Den største utfordingen rent kodemessig vil nok i denne løsningen være å overføre informasjonen fra tblOrdre, sammen med alle aktuelle poster i handlekurven, til tablellen tblOrdreposter.
Først oppretter vi en ordre med leveringsadresse i tblOrdre.
Deretter henter vi ut denne ordreID’en ved å ta ut siste ordreID i tblOrdre, og legge denne i variabelen dbOrdreID.
Koden for å overføre dataene:
SQL = "Select ordreID from tblOrdre where kundeID =" &varKundeID
Set rsHentOrdreID = SERVER.CreateObject("ADODB.RECORDSET")
rsHentOrdreID.Open SQL, ConnString,2,2
Flytter til kundens siste ordre i databasen.
rsHentOrdreID.MoveLast
dbOrdreID = rsHentOrdreID.Fields("ordreID")
rsHentOrdreID.Close
set rsHentOrdreID = nothing
Her hentes hele handlekurven til den aktuelle brukeren (SessionID) ut av tblHandlekurv:
varSessionID = Session.SessionID
SQL = "SELECT VareID, Antall, Pris,
(SELECT Varenavn FROM tblVarer WHERE VareID = tblHandlekurv.VareID) AS Varenavn FROM tblHandlekurv
WHERE SessionID =” &varSessionID
set rsHentkurv = server.CreateObject("ADODB.RECORDSET")
rsHentkurv.Open SQL, Connstring
dim dbvareID(),dbAntall(),dbPris(),dbVarenavn()
i = 0
do while not rsHentkurv.EOF
Her hentes alle forekomstene i handlekurven og legges sekvensielt inn i arrays
Må redefinere størrelsen på de 3 arrays hver gang da vi ikke vet hvor mange
poster handlekurven inneholder og derfor heller ikke størrelsen på arrayene.
redim preserve dbvareID(i),dbAntall(i),dbPris(i),dbVarenavn(i)
dbVareID(i) = rsHentkurv.Fields("VareID")
dbAntall(i) = rsHentkurv.Fields("antall")
dbPris(i) = rsHentkurv.Fields("pris")
i = i + 1
rsHentkurv.MoveNext
loop
rsHentkurv.Close
set rsHentkurv = nothing
Lager en løkke der SQL-setningen blir forlenget med tilsvarende antall forekomster som i handlekurven. Hver del av løkken tilsvarer da en post i handlekurven.
for i = 0 to ubound(dbVareID)
Query = Query & " INSERT INTO tblOrdrePoster (OrdreID,VareID,Antall,Pris) VALUES ("&dbOrdreID&","&dbVareID(i)&","&dbAntall(i)&","&dbPris(i)&")"
next
Til slutt legger vi inn dataene i tblOrdrePoster med variabelen Query (ovenfor) som source/kilde. Dermed blir det generert en ordrepost for hver post i handlekurven.
set cn = server.CreateObject("ADODB.Connection")
cn.Open ConnString
cn.Execute Query
cn.Close
Set cn = nothing
Da er det bare å behandle alle ordre som ligger lagret i tblOrdrePoster, og få dem sendt til kunden så raskt som mulig!
|
|