En enkel webbshop
Förord
Att göra ett shoppingsystem i asp är enklare än vad man tror. Den här artikeln tar kortfattat upp hur man skapar en enkel shop och källkoden till denna shop finner du längst ner i artikeln.Det största problemet är att skapa databasen så att den blir smidig och hanterar våra artiklar, kunder och beställningar så smart som möjligt. I det här exemplet så använder jag mig av fyra olika tabeller i databasen och det är Access 97 som används.
Min första tabell innehåller de olika kategorierna, här Spelkategorier. I den andra tabellen lagras själva produkterna, det vill säga spelen. Eftersom varje produkt är bunden till en kategori i kategoritabellen binder vi samman dem med hjälp av SQL. Den tredje tabellen är en tabell som både är temporär och fast, den håller reda på vilka varor som kunden har köpt, när köpet är klart sätts en flagga i den till True. Den fjärde och sista innehåller information om kunden när denne har skickat in sin beställning och uppgett leveransuppgifter.
Jag börjar med att förklara hur databasen ser ut i praktiken för att du ska förstå hur den är uppbyggt. Nedan följer en beskrivning av fälten i mina fyra tabeller. Du kan självklart ändra strukturen beroende på hur du väljer att skapa din webbutik.
Tabellen Kat innehåller de olika produktkategorierna och följande fält:
KatId Id-nummer för varje kategori.
Kategori Textbeskrivning för varje kategori.
Tabellen Prod innehåller de olika produkterna och följande fält:
ProdId Varje produkts unika id-nummer.
KatId Varje produkts kategori, hämtas från tabellen Kat ovan.
Produkt Namn på produkten.
Beskrivning En kort beskrivning av produkten.
Pris Pris på varje enskild produkt.
Tabellen Korg innehåller besökarens shoppingkorg och följande fält:
KorgId Unikt id för varje produkt som ligger i korgen.
AnvId Id på användaren för att hålla reda på produkterna som ligger i korgen.
Användar-id tar vi från sessionsvariabeln Session (”KundID”) den tilldelas värdet av Session.SessionId som är ett unikt id genererat av servern för varje ny besökare.
ProdId Produkt-id som kommer från tabellen Prod.
Antal Antal produkter som beställts.
Spara Ett booleanskt fält (ja/nej-fält) som anger om ordern ska sparas eller inte. Har det satts till "1" eller True ska ordern sparas i tabellen så att ordermottagaren kan behandla den. I annat fall räknas den som ofullständig och kommer att raderas ur databasen när besökarens session har upphört.
Tabellen Kunder innehåller kunduppgifter och följande fält:
KundId Unikt Id för varje kund.
SessionId Besökarens unika sessions-id. Det kopplas till AnvId i tabellen Korg så att vi vet vem som har köpt vad.
Namn Kundens namn.
Adress Kundens adress.
Postnummer Postnummer.
Ort Ortsnamn.
Tel Telefon.
Epost E-postadress.
Unikt id-nummer
När en kund besöker webbplatsen genererar servern automatiskt ett unikt id-nummer. Det sparas i sessionsobjektet Session.SessionId. Du kan prova själv genom att starta din webbläsare och skapa en sida som endast innehåller följande kodsnutt:
<%= Session.SessionId %>
När du besöker sidan kommer ett nummer att skrivas ut, till exempel 3216546732. Prova sedan att stänga din webbläsare, starta den igen och besöka samma sida. Nu kommer du att se ett nytt nummer. Varje gång du stänger webbläsaren avslutas alltså en session. Lämnar du webbplatsen eller är inaktiv kommer sessionen att avslutas av servern efter 20 minuter. Intervallet kan ändras till kortare eller längre i Internet Information Server Admin eller i asp.
Vi måste ha ett unikt användar- eller sessions-id för varje besökare så att vi kan hålla reda på vem som har beställt vad i butiken. För att sessionsobjektet ska fungera krävs det att besökaren kan ta emot cookies. I den här shopen så har jag byggt bort det här problemet, så kunden får ett sessions id som jag sedan sparar, detta för att om en kund inte tar emot cookies så får denne ett 500 fel på sista sidan.
Först presenterar vi alla kategorier som finns på sidan enter.asp. Det gör vi genom att lista alla fält som finns i tabellen Kat. Varje kategori länkas sedan till sidan produkter.asp med ett id-nummer som representerar den aktuella kategorin. På sidan produkter.asp söker vi sedan i tabellen Prod efter produkter med det kategori-id som skickades från föregående sida. Så här långt bör det inte vara några problem då det är ganska enkelt att lista saker från en databas som bygger på en strängvariabel som skickas från en annan sida. Låt oss säga att vi har klickat på kategorin Gameboy på sidan enter.asp. Vi hamnar då på sidan produkter.asp med kategori-id nummer ett. Den lokala adressen ser ut enligt följande: http://localhost/webbshopen/produkter.asp?KatId=1 Produkter-sidan söker igenom tabellen Prod efter samtliga produkter med värdet 1 i fältet KatId.
Alla produkter har en beskrivning och ett pris. Besökaren kan även välja antal produkter som denne vill köpa.
På sidan produkter.asp listas alla produkter med namn, beskrivning och pris. Varje produkt har sedan en köpknapp kopplad till sig som kunden klickar på för att lägga varan i sin korg. Det finns även en liten textruta där kunden anger önskad kvantitet. Vi anropar en sida som kan köra asp-kod och uppdatera shoppingkorgen, utan att ladda om sidan. Det är egentligen inte möjligt i html och asp, eftersom en sida som innehåller asp-kod måste exekveras av webbläsaren. Det går dock att komma runt problemet genom att använda ett felmeddelande som finns i http-protokollet. Först skapar vi sidan som ska lägga till en produkt i kundens shoppingkorg. Vi döper sidan till add.asp och skapar ett asp-skript som gör en insert-sats i tabellen Korg enligt följande:
Ovanstående SQL-sats för in kundens unika id-nummer som hämtats från sessions-objektet (AnvID = Session("KundID")). Sedan sätts produktens unika id-nummer och antalet produkter som kunden beställt in. Normalt skulle sidan add.asp laddas i webbläsaren och en tom sida komma upp, eftersom html-kod saknas. För att undvika detta lägger vi till följande rad högst upp:
Response.Status = ”204 No Content”
Kommandot är ett felmeddelande som hanteras av Http 1.1-protokollet. När webbläsaren får detta tror den att sidan inte innehåller några data och struntar därför i att ladda sidan. Den kommer dock att exekvera all asp-kod som finns efter kommandot. Tänk bara på att du inte får lägga in några html-kommandon på sidan.
På sidan basket.asp kan kunden hela tiden se vilka varor denne har valt att köpa. Är kunden nöjd kan denne sedan välja att gå till kassan för att avsluta köpet. När kunden fyllt i sina adressuppgifter uppdateras fältet Spara i tabellen Korg till 1. Det betyder att ordern ska sparas så att ordermottagaren kan ta del av den. Är fältet inte satt till 1 kommer ordern att anses ofullständig och raderas från tabellen. Det kommer vi att göra manuellt i filen delete.asp.
Jag har inte gått igenom all kod här, men du kan ladda ner exemplet och titta på koden och se hur den fungerar. Har du några frågor eller problem, ställ dem i forumet i fall att andra kanske stöter på samma fel.
Källkoden hittar du på: Se Filarkiv 404
Min första tabell innehåller de olika kategorierna, här Spelkategorier. I den andra tabellen lagras själva produkterna, det vill säga spelen. Eftersom varje produkt är bunden till en kategori i kategoritabellen binder vi samman dem med hjälp av SQL. Den tredje tabellen är en tabell som både är temporär och fast, den håller reda på vilka varor som kunden har köpt, när köpet är klart sätts en flagga i den till True. Den fjärde och sista innehåller information om kunden när denne har skickat in sin beställning och uppgett leveransuppgifter.
Databasens fyra tabeller
Jag börjar med att förklara hur databasen ser ut i praktiken för att du ska förstå hur den är uppbyggt. Nedan följer en beskrivning av fälten i mina fyra tabeller. Du kan självklart ändra strukturen beroende på hur du väljer att skapa din webbutik.Tabellen Kat innehåller de olika produktkategorierna och följande fält:
KatId Id-nummer för varje kategori.
Kategori Textbeskrivning för varje kategori.
Tabellen Prod innehåller de olika produkterna och följande fält:
ProdId Varje produkts unika id-nummer.
KatId Varje produkts kategori, hämtas från tabellen Kat ovan.
Produkt Namn på produkten.
Beskrivning En kort beskrivning av produkten.
Pris Pris på varje enskild produkt.
Tabellen Korg innehåller besökarens shoppingkorg och följande fält:
KorgId Unikt id för varje produkt som ligger i korgen.
AnvId Id på användaren för att hålla reda på produkterna som ligger i korgen.
Användar-id tar vi från sessionsvariabeln Session (”KundID”) den tilldelas värdet av Session.SessionId som är ett unikt id genererat av servern för varje ny besökare.
ProdId Produkt-id som kommer från tabellen Prod.
Antal Antal produkter som beställts.
Spara Ett booleanskt fält (ja/nej-fält) som anger om ordern ska sparas eller inte. Har det satts till "1" eller True ska ordern sparas i tabellen så att ordermottagaren kan behandla den. I annat fall räknas den som ofullständig och kommer att raderas ur databasen när besökarens session har upphört.
Tabellen Kunder innehåller kunduppgifter och följande fält:
KundId Unikt Id för varje kund.
SessionId Besökarens unika sessions-id. Det kopplas till AnvId i tabellen Korg så att vi vet vem som har köpt vad.
Namn Kundens namn.
Adress Kundens adress.
Postnummer Postnummer.
Ort Ortsnamn.
Tel Telefon.
Epost E-postadress.
Unikt id-nummer
När en kund besöker webbplatsen genererar servern automatiskt ett unikt id-nummer. Det sparas i sessionsobjektet Session.SessionId. Du kan prova själv genom att starta din webbläsare och skapa en sida som endast innehåller följande kodsnutt:
<%= Session.SessionId %>
När du besöker sidan kommer ett nummer att skrivas ut, till exempel 3216546732. Prova sedan att stänga din webbläsare, starta den igen och besöka samma sida. Nu kommer du att se ett nytt nummer. Varje gång du stänger webbläsaren avslutas alltså en session. Lämnar du webbplatsen eller är inaktiv kommer sessionen att avslutas av servern efter 20 minuter. Intervallet kan ändras till kortare eller längre i Internet Information Server Admin eller i asp.
Kunden måste kunna ta emot cookies
Vi måste ha ett unikt användar- eller sessions-id för varje besökare så att vi kan hålla reda på vem som har beställt vad i butiken. För att sessionsobjektet ska fungera krävs det att besökaren kan ta emot cookies. I den här shopen så har jag byggt bort det här problemet, så kunden får ett sessions id som jag sedan sparar, detta för att om en kund inte tar emot cookies så får denne ett 500 fel på sista sidan.
Vi kan börja handla
Först presenterar vi alla kategorier som finns på sidan enter.asp. Det gör vi genom att lista alla fält som finns i tabellen Kat. Varje kategori länkas sedan till sidan produkter.asp med ett id-nummer som representerar den aktuella kategorin. På sidan produkter.asp söker vi sedan i tabellen Prod efter produkter med det kategori-id som skickades från föregående sida. Så här långt bör det inte vara några problem då det är ganska enkelt att lista saker från en databas som bygger på en strängvariabel som skickas från en annan sida. Låt oss säga att vi har klickat på kategorin Gameboy på sidan enter.asp. Vi hamnar då på sidan produkter.asp med kategori-id nummer ett. Den lokala adressen ser ut enligt följande: http://localhost/webbshopen/produkter.asp?KatId=1 Produkter-sidan söker igenom tabellen Prod efter samtliga produkter med värdet 1 i fältet KatId.
Köpet genomförs
Alla produkter har en beskrivning och ett pris. Besökaren kan även välja antal produkter som denne vill köpa.På sidan produkter.asp listas alla produkter med namn, beskrivning och pris. Varje produkt har sedan en köpknapp kopplad till sig som kunden klickar på för att lägga varan i sin korg. Det finns även en liten textruta där kunden anger önskad kvantitet. Vi anropar en sida som kan köra asp-kod och uppdatera shoppingkorgen, utan att ladda om sidan. Det är egentligen inte möjligt i html och asp, eftersom en sida som innehåller asp-kod måste exekveras av webbläsaren. Det går dock att komma runt problemet genom att använda ett felmeddelande som finns i http-protokollet. Först skapar vi sidan som ska lägga till en produkt i kundens shoppingkorg. Vi döper sidan till add.asp och skapar ett asp-skript som gör en insert-sats i tabellen Korg enligt följande:
Set Connection = Server.CreateObject("ADODB.Connection")
SET Connection = ShopIT_GetDatabaseConn()
SQLStmt = ”INSERT INTO KORG”
SQLStmt = SQLStmt & ”(AnvId, ProdId, Antal)”
SQLStmt = SQLStmt & ”VALUES (” & Session.SessionId & ”,” &
Request.Form(”ProdId”) & ”, ” & Request.Form(”Antal”) & ”)”
Connection.Execute(SQLStmt)
Connection.Close
Ovanstående SQL-sats för in kundens unika id-nummer som hämtats från sessions-objektet (AnvID = Session("KundID")). Sedan sätts produktens unika id-nummer och antalet produkter som kunden beställt in. Normalt skulle sidan add.asp laddas i webbläsaren och en tom sida komma upp, eftersom html-kod saknas. För att undvika detta lägger vi till följande rad högst upp:
Response.Status = ”204 No Content”
Kommandot är ett felmeddelande som hanteras av Http 1.1-protokollet. När webbläsaren får detta tror den att sidan inte innehåller några data och struntar därför i att ladda sidan. Den kommer dock att exekvera all asp-kod som finns efter kommandot. Tänk bara på att du inte får lägga in några html-kommandon på sidan.
Visa varukorgen
På sidan basket.asp kan kunden hela tiden se vilka varor denne har valt att köpa. Är kunden nöjd kan denne sedan välja att gå till kassan för att avsluta köpet. När kunden fyllt i sina adressuppgifter uppdateras fältet Spara i tabellen Korg till 1. Det betyder att ordern ska sparas så att ordermottagaren kan ta del av den. Är fältet inte satt till 1 kommer ordern att anses ofullständig och raderas från tabellen. Det kommer vi att göra manuellt i filen delete.asp.Jag har inte gått igenom all kod här, men du kan ladda ner exemplet och titta på koden och se hur den fungerar. Har du några frågor eller problem, ställ dem i forumet i fall att andra kanske stöter på samma fel.
Källkoden hittar du på: Se Filarkiv 404
carl karlsson
var finns källkoden till denna kurs ? ? ?
tobias klint
Varför försvinner produkten inte? Det står: "Spara Ett booleanskt fält (ja/nej-fält) som anger om ordern ska sparas eller inte. Har det satts till "1" eller True ska ordern sparas i tabellen så att ordermottagaren kan behandla den. I annat fall räknas den som ofullständig och kommer att raderas ur databasen när besökarens session har upphört." Inga av mina produkter i korgen är i kryssade men ändå försvinner de inte? Vad är fel?
Ken Edlund
Hej! kan man få tag på källkoden till denna artikel?
David nasri
Köllkoden??