I am Kay

Ett webbimperium under utveckling

Detta är tredje delen i artikelserien om hur man bygger en webbshop i ASP från grunden. 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 default.asp?kategori=[ID]. Vi vill självklart visa produkterna under kategorisidorna och det är vad denna del kommer avhandla.

Vi har nu unika länkar som alla skiljer sig åt på en punkt - ID-numret i länken. Logiskt sätt måste vi använda oss av denna siffra för att kunna ta fram produkter som i databasen har samma siffra i fältet “intKategoriID” eftersom de tillhör den aktuella kategorin. Siffran i länken kan man skriva ut på sidan genom:

<% Response.Write Server.HTMLEncode(Request.QueryString(”kategori”)) %>

Oj, tänker ni kanske. Det var omständigt. Måste allt det där finnas med? Svaret är både ja och nej. Till en början använder vi oss av Response.Write, funktionen för att skriva ut något med hjälp av ASP-kod. Request.QueryString(”kategori”) innehåller värdet av “kategori=[ID]” i länken, dvs 1 eller 2 etc. Ett sista steg är att kapsla in QueryString-värdet med funktionen Server.HTMLEncode() som som sagt gör att eventuell  HTML-kod skrivs ut i klartext. Det är nödvändigt eftersom det annars är lätt för elakartade besökare att knappra in exempelvis denna länk: default.asp?kategori=<script src=”elakt-script.js”> som vid utskrift då skriver ut och kör javascriptet “elakt-script.js”, och det är aldrig att rekommendera. Det kan ge fel personer kontroll över er webbshop.

Vi vill dock inte skriva ut värdet just nu. Vi vill bara använda oss av det i vår SQL-sträng för att sålla ut så enbart rader där intKategoriID = Request.QueryString(”kategori”) finns med. Vi förflyttar oss således till main-sektionen i default.asp och skriver följande:

<% Set Conn = Server.CreateObject(”ADODB.Connection”)
Conn.Open “Driver={MySQL ODBC 3.51 Driver};Server=” & strMySQLServer & “;port=” & strMySQLPort & “;Database=” & strMySQLDatabase & “;User=” & strMySQLUsername & “;Password=” & strMySQLPassword & “;”

Vår SQL-sträng måste vi skriva om enligt innan nämnda frågeutformning - vi vill ta fram alla rader från tabellen produkter där intKategoriID är samma som Request.QueryString(”kategori”)

SQL = “SELECT ID, intKategoriID, strProdukt, strProduktBeskrivning, intPris FROM produkter WHERE intKategoriID = ” & strip(Request.QueryString(”kategori”)) & ” ORDER BY strProdukt”

Vad är då funktionen strip() för något? När man använder sig av variabler i sina SQL-strängar är det väldigt viktigt att man först säkerställer att inte vad som helst skickas med. I detta fallet vill vi enbart ha en siffra, men om man är elakartad besökare kan man genom att manipulera Request.QueryString(”kategori”) i värsta fall rasera hela databasen. strip() är en egenutvecklad funktion som helt sonika förmildrar riskerna med att drabbas av ondsinta inputs i SQL-strängen. Detta genom att ersätta alla enkelfnuttar ‘ med ” (två enkelfnuttar). Kopiera funktionen nedanför och klistra in näst längst upp i default.asp, under inkluderingen av settings.asp:

<% Function strip(input)
retVal = replace(input, “‘”, “””)
strip = retVal
End Function %>

Åter till databaskopplingen. Vi fortsätter med att exekvera vår SQL-sträng.

Set RS = Conn.Execute(SQL)

Sen följer samma tillvägagångssätt som för kategorierna. Vi kollar ifall det hittas några produkter. Ifall så inte är fallet skrivs det ut att “Inga produkter hittas”. I annat fall skrivs produkterna ut, nu sorterade efter produktnamn (strProdukt, se SQL-strängen ovan)

If RS.EOF Then
Response.Write “Inga produkter hittades”
Else
Do Until RS.EOF %>
<a href=”default.asp?produkt=<%=Server.HTMLEncode(RS(”ID”))%>”><%=Server.HTMLEncode(RS(”strProdukt”))%></a>, <%=Server.HTMLEncode(RS(”intPris”))%> kr<br>
<% RS.MoveNext
Loop
End if
Set RS = Nothing
Set Conn = Nothing %>

Varje produkt länkas nu till default.asp?produkt=[ID] och då vill vi självklart visa produktinformationen när man klickar på länken. Detta har gjort att vi vill visa olika information på samma yta (main-sektionen) och vi behöver således kolla med en IF-sats vilken sida det är som visar för stunden. Detta görs genom att lägga in en enklare IF-sats i main-sektionen.

<% If Request.QueryString(”kategori”) <> “” Then
kod för visning av kategori

ElseIf Request.QueryString(”produkt”) <> “” Then
kod för visning av produkt

Else
kod som visas när ingen kategori eller produkt är vald

End if %>

Vi går igenom hur det funkar. Först kollas ifall Request.QueryString(”kategori”) har ett värde som är annat än “” (tom). Ifall det finns ett värde på kategori i länken (dvs. om vi har klickat på en kategorilänk) så skall koden nedanför skrivas ut. Det samma gäller för nästa steg, men här kollas ifall Request.QueryString(”produkt”) har ett värde som är annat än “” (tom). Slutligen, ifall båda dessa värden var tomma visas det som finns under Else, som är sista anhalten om inget annat villkor uppfyllts. Vad vi alltså gjort är att vi delat upp ett litet segment på sidan till att visa olika information beroende på vilken variabel i länken som har ett värde. Detta gör att det dynamiskt skapas nya sidor efter hur länkadressen ser ut, istället för att man manuellt ska sitta och skapa produkt1.html, produkt2.html och så vidare.

Denna IF-sats skall ligga precis under <div id=”main”> och bör sluta precis innan </div> för samma maindiv-tagg. Klistra sedan in den kod som vi skrivit hittills under rätt villkor för att rätt information skall visas på rätt ställe. Den kodsnutt med databashämtning för produkter under kategorisidan skall alltså ersätta “kod för visning av kategori”. Var noga med att <% och %> är rätt till antalet. <% signalerar början på ASP-kod och %> påvisar att ett block med ASP-kod avslutas. Man kan inte ha två öppna <%, utan måste alltid avsluta de öppna taggarna med %>. Låter det knepigt? Ladda hem filerna, så klarnar det säkert!

Vi går nu vidare och skapar produktinformationssidan som man kommer till när man har klickat på en produktlänk, ex. default.asp?produkt=1. Det är precis samma sätt som innan. Skapa en databaskoppling, fundera över vilken relation vi har mellan den siffra vi får med oss i länken och vad som finns angivet i databasen, skriv SQL-strängen, exekvera, kolla antal resultat och skriv ut resultat beroende på antal och stäng slutligen databasanslutningen. Så här:

<% Set Conn = Server.CreateObject(”ADODB.Connection”)
Conn.Open “Driver={MySQL ODBC 3.51 Driver};Server=” & strMySQLServer & “;port=” & strMySQLPort & “;Database=” & strMySQLDatabase & “;User=” & strMySQLUsername & “;Password=” & strMySQLPassword & “;”

SQL = “SELECT ID, intKategoriID, strProdukt, strProduktBeskrivning, intPris FROM butik_produkter WHERE ID = ” & strip(Request.QueryString(”produkt”))

Vi väljer att ta fram den information som finns i databasen om produkten som har det ID-nummer som återfinns i länken (default.asp?produkt=1). Eftersom ID var av typen auto_increment, automatiskt ökande värde för varje rad som läggs in, riskerar vi inte att få fler svar än en (1) rad från databasen. Eller noll (0) - ifall vi exempelvis manuellt skrivit in ID 1452 i länken och produkten inte existerar. Vi kommer således nu undan med mindre kod, eftersom det inte finns någon anledning att vilja loopa ut något. Antingen är det en rad eller så är det ingen, så att begära att gå till nästa rad och skriva ut denna är en situation som inte uppstår. Vi fortsätter hur som helst med att exekvera SQL-strängen och sen bör resten vara rätt självförklarande.

Set RS = Conn.Execute(SQL)
If RS.EOF Then
Response.Write “Produkten hittades inte”
Else %>
<h1><%=Server.HTMLEncode(RS(”strProdukt”))%></h1>
<p><%=Server.HTMLEncode(RS(”strProduktBeskrivning”))%></p>
<h2><%=Server.HTMLEncode(RS(”intPris”))%> kr</h2>
<a href=”default.asp?kop=<%=Server.HTMLEncode(RS(”ID”))%>”>Lägg i varukorgen</a>
<% End if
Set RS = Nothing
Set Conn = Nothing %>

Vi har nu skrivit ut produktnamn med <h1>-tagg, produktbeskrivning som textstycke, pris som <h2>-tagg och slutligen lagt in en länk som i framtiden är ämnad att lägga till varan i varukorgen. Och det är just precis vad som avhandlas i nästa steg av denna guide, så ladda hem filerna (1 kb) och dubbelkolla innan du skyndar dig vidare till nästa del.

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.

Inledning

I takt med att fler och fler vågar sig på handel på nätet - både att handla i butiker och viljan att starta egen webbshop - följer här en guide till hur man skapar sin egen webbshop från grunden. Den slutgiltiga produkten kommer bygga på ASP, MySQL, HTML och CSS och finns för nedladdning för varje steg i denna artikelserie.

Välja ett webbhotell

Detta skript kommer köras hos webbhotellet Binero. Privat- eller företagskonto på deras Windows-server fungerar lika bra, och det kan upp- eller nedgraderas när som helst.

När webbhotellet är beställt och ett domännamn är kopplat till kontot är ni redo att ansluta till FTP-servern för att ladda upp filerna. Eftersom det inte finns några filer att ladda upp ännu börjar vi istället med att sätta upp databasstrukturen.

Sätta upp MySQL-databasen

1. Skapa en databas vid namn “webshop”.

2. Gå till www.kontrollpanelen.se och logga in i det nedre formuläret med användarnamn webXXXXX och ert lösenord för anslutning till databasen. Dessa uppgifter finns i det e-postmeddelande som skickats ut av Binero till er när ni beställde webbhotellet. I phpMyAdmin, som är ett visuellt presentationsskal till de databaser som finns under ert konto, väljer ni nu till vänster under rubriken “webXXXXX” att klicka på “_webshop”.

Tabellstruktur

Vi kommer skapa en rad olika tabeller för skriptet, eftersom det är mycket information av varierande sort som ska sparas i databasen när skriptet är fullfjädrat. Man kan alltid gå tillbaks och fylla på med fler tabeller eller ta bort i efterhand. Man kan skapa hur många tabeller som helst och beror i stor grad på hur många funktioner man avser utveckla till skriptet. Vi börjar dock enkelt med två tabeller; kategorier och produkter.

I den högra delen av sidan scrollar ni nu till slutet “Skapa ny tabell i databas webXXXXX_databasnamn“. Skriv i tabellnamnet “kategorier” och välj att tabellen skall ha tre (3) fält.

På sidan som följer finns nu tre kolumner. Vi ska nu specificera vad de olika fälten ska heta och vilken typ av information som avses sparas i fältet.

I första kolumnen under “Fält” skriver ni namnet “ID”. Detta blir namnet på fältet. Varje kategori kommer således få ett eget unikt ID-nummer som enbart identifierar just precis en specifik kategori. Under “Typ” väljer ni i rullistan / drop down-boxen “INT“, vilket betyder integer och avser datatypen heltal. Slutligen måste valet “auto_increment” (automatisk ökning) göras under “Extra” och därefter kryssar ni i den radio button / runda knapp precis under “Extra” som avser “Primary” eller “Primär”. Detta har nu gjort att för varje ny kategori som läggs in i denna tabell, ökar ID-fältet upp sitt värde automatiskt, vilket gör att två kategorier aldrig kan få samma ID-nummer.

Vidare till nästa fält. Ge det namnet “intPID”. Vi kommer i denna guide använda oss av denna form av namngivning av tabellfälten för att lätt kunna avgöra vilken datatyp som lagras i fältet. I detta fall står “int” som innan för integer/heltal, men vad står då PID för? ID känner vi igen sedan innan, så vi kan gissa att det kan vara en återkoppling till föregående fält (”ID”). “P” i “PID” är tänkt att stå för “parent”, dvs. förälder eller tidigare. När man känner till vad en kategori har för Parent ID ges möjligheten att skapa en trädliknande menystruktur med underkategorier till huvudkategorierna. Vi minns att varje kategori automatiskt får ett ID-nummer och kan således i fältet PID ange detta nummer för att berätta att denna kategori är en underkategori till huvudkategorin med ID-numret PID. Det är mycket detta handlar om när man pratar om relationsdatabaser och vi har just naggat lite i kanten på detta vidsträckta område. Var dock lugn, vi kommer inte gå så mycket djupare på det. Vad är då anledningen till att första fältet döptes till ID och inte intID tänker ni då? Det är helt och hållet en smaksak. Prefixen på fältnamnen är till för att hjälpa dig och spelar inte in på funktionaliteten. I regel vet man att det löpnummer som ID utgör är alltid ett heltal och prefixet “int” blir lite overkill.

Fortsätt med att välja datatyp för fältet PID. Även här väljer vi INT i rullisten, då det rör sig om samma datatyp som i ID-fältet innan. Inga fler val skall göras, eftersom detta fält inte ska räkna upp sig självt.

Sista fältet döper vi till “strKategori”, där “str” är kort för “string”. En string är motsatsen till “int” kan man säga, även om MySQL och andra databastyper bjuder på många fler datatyper än så här. Vi kommer dock inte komma i kontakt med andra typer än “int” och strängar i denna guide. Det finns dock ingen datatyp som heter “str”, utan det syftar bara på ett samlingsnamn som förkunnar att fältet innehåller vanlig text. Som datatyp väljer vi istället “VARCHAR”, som troligtvis är förvalt alternativ. I rutan för “Längd/Värden” skall vi ange maxlängd för innehållet i fältet. Ett kategorinamn i en webbshopsmeny är oftast inte så långt, men ta till lite i överkant ändå och välj 250.

Välj nu “Spara”, så skapas tabellen och första steget är klart. Just “Kategorier” är en angenäm tabell att skapa eftersom det inte finns så mycket information att spara ihop med kategorinamnet. Man kan alltid lägga till ett fält för kategoribeskrivning eller kanske ett fält med sökvägen till en kategoriikon, men när denna guide är till ända kommer ni troligtvis kunna lista ut hur ni kan utöka skriptet med fler funktioner på egen hand.

Nästa steg är att göra om proceduren. Klicka på “webXXXXX_webshop (1)” i vänsterkanten och scrolla ner till botten. Döp tabellen till “produkter” och välj att skapa fem (5) fält. Gör om proceduren från ovan genom att lägga till följande fält i tur och ordning med nämnda egenskaper:

  • ID [typ: INT | extra: auto_increment | primär: kryssa i radioknappen ]
  • intKategoriID [typ: INT]
  • strProdukt [typ: VARCHAR | längd: 500 ]
  • strProduktBeskrivning [typ: VARCHAR | längd: 8000 ]
  • intPrice [typ: INT]

Inmatningsförfarandet kommer troligtvis ske på bredden nu eftersom antalet fält överstiger tre, men fälten är de samma, så håll bara tungan rätt i mun och glöm inte bort att välja auto_increment och kryssa i primär (första radioknappen) på ID-fältet

Tabellerna är nu uppsatta och det har blivit dags att lägga till två kategorier och två produkter. Vi börjar med att lägga till kategorierna, eftersom vi behöver veta ID-nummer som automatiskt tilldelas kategorierna innan vi kan lägga in produkterna, så att produkterna blir kopplade till rätt kategori. Det låter logiskt va? :-)

Klicka till vänster på “kategorier” för att komma till tabellen vi skapade först. Till höger väljer ni nu femte menyknappen “Lägg till” och ni kommer till ett formulär för att lägga till rader i tabellen. Troligtvis finns här möjlighet att lägga till två rader direkt. Vi väljer att göra det enligt följande agerande:

  • Lämna ID-fältet tomt. Det ges automatiskt det lägsta möjliga ID-numret.
  • Skriv 0 i intPID. Eftersom det är en huvudkategori har den inget ovanliggande menyalternativ.
  • I strKategori anger ni i klartext vad ni vill att kategorin skall heta. Det är detta som visas i butiken. Vi gör det enkelt för oss och kallar den för “Kategori 1″

Gör nu samma sak i formuläret nedanför, men döp den till “Kategori 2″. Glöm inte att lämna ID-fältet tomt. Tryck sedan på någon av de två nedre “Kör”-knapparna. Vi har nu skapat “Kategori 1″ och “Kategori 2″. Väljer vi “Visa” i menyn ser vi också att två rader har skapats och att ID-nummer för de två raderna har tilldelats; 1 och 2. Eftersom vi sköter inmatningen av data manuellt i databasen och ännu inte via vårt framtida egenutvecklade administrationssystem för webbshopen får vi hålla dessa siffror i minnet när vi nu väljer att gå över till tabellen “produkter” i vänsterkant. Tryck sedan på “Lägg till” och samma inmatningsprincip råder igen.

Nu ska vi mata in produkterna i databasen. Samtidigt vill vi göra kopplingar mellan de två tabeller som vi skapat och väljer således att lämna ID tomt, i intKategoriID skriva 1 (som avser “Kategori 1″), i strProdukt skriva det namn vi vill ha på produkten som visas för kunderna. Vi gör det enkelt även här och väljer det beskrivande namnet “Produkt 1″. i strProduktBeskrivning har vi nu spelrum att skriva en hel novell på 8000 tecken. Vi väljer dock att fatta oss kort och skriver “Produktbeskrivning 1″. I sista fältet, intPrice, kommer vi till det kittlande - vad ska vi ta i pengaväg för klenoden? Vi minns att datatypen sattes till att handska heltal, så ange 79. I framtiden kommer skriptet ha stöd för ören, men nu i början behöver vi inte krångla till det i onödan.

Fyll nu i nedanstående formulär med samma kategori-ID (1), produktnamn “Produkt 2″ och produktbeskrivning “Produktbeskrivning 2″, sätt priset till “1000″ och tryck på “Kör”-knappen. Två produkter har nu lagts till i kategorin “Kategori 1″ och “Kategori 2″ är fortfarande tom.

I nästa del lägger vi upp en enklare design för sidan och tar fram de menyalternativ vi just lagt in i databasen. Lägg gärna till denna blogg i din RSS-läsare. När ni följer feeden riskerar ni inte att missa någon del av denna artikelserie. Har ni frågor eller funderingar är ni givetvis välkomna att lämna en kommentar till denna artikel!