Detta är en artikelserie om hur man själv skapar en webbshop i ASP från grunden. I förra delen av denna artikelserie gick vi igenom vad som krävs av webbhotellet, hur man sätter upp databas- och tabellstrukturen för webbshopen och vi avslutade med att lägga till två kategorier; Kategori 1 och Kategori 2 ihop med två produkter; Produkt 1 och Produkt 2 som båda placerades i Kategori 1 (ID: 1).
Missade ni första delen finns den att tillgå här: Hur man gör en webbshop i ASP (del 1)
—
Nästa steg är att lägga upp en enklare designstruktur för sidan.

<html>
<head>
<title></title>
<style type=”text/css”>#logotype {
float: left;
height: 100px;
width: 760px;
}#menu {
float: left;
width: 150px;
}#main {
float: left;
width: 610px;
}.long {
float: left;
width: 760px;
}.wrap {
clear: both;
float: left;
}</style>
</head>
<body>
<div class=”wrap long”>
<div id=”logotype”></div>
<div id=”menu”></div>
<div id=”main”></div>
</div>
</body>
</html>
Kopiera koden ovanför och spara som default.asp. Detta webbshopsskript kommer utgå ifrån denna fil och det mesta kommer ligga i den, så när som på inställningar för databaskopplingar och funktioner för att validera data etc
Inställningar för databaskoppling
Skriptet behöver veta adressen och portnummer till databasservern, vilket användarnamn och lösenord som har behörighet att ansluta till databasen samt namnet på databasen som innehåller våra tabeller. För att slippa ange denna kritiska information i varje databaskoppling väljer vi att skapa en inställningsfil med variabler för denna information. Skapa en ny fil med följande innehåll och fyll i informationen mellan citationstecknen. Denna information fås av webbhotellet.
<% strMySQLServer = “”
strMySQLPort = “”
strMySQLDatabase = “webXXXXX_webshop”
strMySQLUsername = “webXXXXX”
strMySQLPassword = “**********” %>
Spara den nya filen som settings.asp och lägg till följande rad överst i default.asp för att inkludera filen med inställningarna:
<!–#Include File=”settings.asp”–>
Lista kategorier från databasen
För att ta fram kategorierna som vi lagt till i databasen behöver vi göra en databaskoppling. Detta är i regel ingen kod man behöver lägga på minnet, utan man kan kopiera och klistra in från tidigare användningsområden. Det vitala i databaskopplingen är den så kallade SQL-strängen, som anger vilken tabell och vilka fält som skall hämtas. Vi vet att vi vill ansluta till databasen webXXXXX_webshop med användarnamn webXXXXX och lösenord *********, men vi måste även tala om vilken tabell vi vill ansluta till - i detta fall “kategorier” som vi döpte tabellen till. Fälten vi vill hämta ut till en början är ID (det unika ID-numret för varje kategori) och strKategori (namnet på kategorin). Vi lämnar Parent ID (PID) orörd för stunden, men återkommer till det framöver, då det är en onödigt krånglig funktion så här tidigt i detta stadie.
Låt oss börja med inledande databaskopplingen:
<% Set Conn = Server.CreateObject(”ADODB.Connection”)
Conn.Open “Driver={MySQL ODBC 3.51 Driver};Server=” & strMySQLServer & “;port=” & strMySQLPort & “;Database=” & strMySQLDatabase & “;User=” & strMySQLUsername & “;Password=” & strMySQLPassword & “;”
Det ser krångligt ut och som sagt är det inget som man behöver lägga på minnet. Som synes använder vi de variabler som vi har angett i settings.asp för att slippa skriva informationen i klartext ifall vi av någon anledning råkar skriva fel i skriptet och ASP-koden inklusive lösenord till databasen skrivs ut i klartext. Detta är initierandet av databaskopplingen. Nu kommer vi till SQL-strängen, som ska se ut enligt följande för att lista kategorierna:
SQL = “SELECT ID, strKategori FROM kategorier ORDER BY strKategori”
Här lägger vi SQL-strängen som en variabel. Det är egentligen inte nödvändigt, men det kan vara överskådligare ifall det rör sig om mycket kod runt omkring, då man direkt ser var och vad man kan ändra. Vad gör då denna SQL-sträng? Jo, vi säger åt databasen att ta fram ID och strKategori från tabellen “kategorier” och avslutar med att bestämma vilken ordning vi vill att de skrivs ut i. Anger man inte ordning kommer den sortera efter ID, dvs. den ordning som man lagt in kategorierna i databasen. Vi väljer dock att sortera efter strKategori, vilket gör att när vi nedanför skriver ut de rader vi tagit fram kommer de komma i bokstavsordning.
Nästa steg är att köra SQL-frågan. Innan hade vi enbart deklarerat den. Detta görs genom nedanstående rad, där vi helt sonika ber om att få exekvera SQL-strängen (variabeln SQL nedan) med det databaskopplingsobjekt (Conn) som vi innan skapat:
Set RS = Conn.Execute(SQL)
Anropet är klart. Det är dags att kolla ifall den hittat några rader med fält i tabellen som matchar vår förfrågan. Det finns två möjliga resultat - antingen hittades rader eller så hittades det inga. Vi vill beroende på resultat visa olika saker, ex. “Inga kategorier hittades” eller som i vårt fall, eftersom vi vet med oss att vi lagt in kategorier, skriva ut dem. Med en enkel koll kan vi styra vad som händer för varje tänkbart resultat:
If RS.EOF Then
Response.Write “Inga kategorier hittades”
Else
Do Until RS.EOF %>
<a href=”default.asp?kategori=<%=Server.HTMLEncode(RS(”ID”))%>”><%=Server.HTMLEncode(RS(”strKategori”))%></a><br>
<% RS.MoveNext
Loop
End if
Set RS = Nothing
Set Conn = Nothing %>
Rad 1: Om resultatet av databashämtningen är tomt (EOF - End of File) då (Then)
Rad 2: Skriv ut “Inga kategorier hittades”. Detta görs med ASP-funktionen Response.Write för att skriva ut vanlig text.
Rad 3: Annars (ifall resultatet av databashämtningen inte är tom, dvs att det finns rader som matchade vår SQL-slagning)
Rad 4: “Gör nedanstående tills alla rader är utskrivna”
Rad 5: Här skriver vi ut en länk till kategorin enligt följande mönster: default.asp?kategori=1 och där länktexten blir det som finns i fältet strKategori, dvs. “Kategori 1″ då “Kategori 1″ kommer före “Kategori 2″ när man sorterar efter strKategori-fältet - som vi har gjort i detta exempel. Funktionen Server.HTMLEncode() gör att eventuell HTML-kod som finns i databasfältet inte exekveras, utan istället visas som klartext.
Rad 6: RS.MoveNext säger till att vi nu är klara med denna tabellrad och vill ha nästa rad.
Rad 7: Loop hoppar upp till senaste Do-rad, vilket gör att vi har en ny rad från databasen i pipelinen och att vi genom upphoppet med loopen är redo att behandla den på samma sätt som förra raden, dvs skriva ut en länk baserad på den nya informationen från rad 2
Rad 8: End if avslutar kontrollen om vad som skall göras ifall det finns rader i databasen eller ifall hämtningen var tom. Denna rad nås först efter att alla rader är hämtade från databasen. Var hämtningen tom nås den direkt.
Rad 9 & 10: Vi stänger databaskopplingen
Kopiera in alla fyra kodblock ovanför på det ställe i default.asp där ni vill att kategorierna skall visas, till exempel mellan <div id=”menu”> och </div> för att få dem i vänsterkant. Får ni det inte att fungera? Ladda hem filerna (856 bytes) och dubbelkolla så att ni har gjort rätt.
I nästa avsnitt visas hur man med hjälp av kategorilänkarna visar de produkter som är kopplade till de olika kategorierna.
Lägg gärna till feeden för denna blogg i er RSS-läsare, så minimerar ni risken att missa kommande delar i artikelserien. Har ni frågor, funderingar eller tips på förbättringar är ni självklart välkomna att lämna kommentarer på inlägget.
16:37 on augusti 24th, 2009
[...] Har du missat de tidigare delarna finns de här: Hur man gör en webbshop i ASP (del 1) och Hur man gör en webbshop i ASP (del 2). Vår webbshop hämtar nu kategorierna från databasen och länkar dem enligt [...]