 
  | 
		
			
	
  
  
  
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! 		
		 | 
		 
  |