Sök i databaser med ASP

av Kjell Andersson

För att få ASP-sidor att fungera på hemmadatorn måste du ha någon typ av server. I Windows 98 använde man Personal Web Server (PWS). I Windows XP Pro kan man utnyttja Internet Information Server (IIS). I Windows XP Home är man mer eller mindre hänvisad till att hitta någon annan lösning. Eftersom en sådan lösning ofta är betydligt enklare att både installera och ställa in än PWS och IIS, kan man använda den även om man har Windows 98 eller XP Pro.

Så vi börjar med att installera en server. När detta är gjort får du lära dig att göra en ASP-sida från vilken du kan söka i en databas.

Interaktiva webbsidor ger stora möjligheter att öka intresset och antalet besökare på webbplatsen. Webbsidan blir mer levande om den själv kan skapa sitt innehåll utifrån de önskemål som besökarna har. Man kan till exempel göra en egen gästbok eller ett diskussionsforum.

En väg att gå är att skapa ASP-sidor. Man kan säga att dessa är en kombination av HTML och till exempel VB-skript eller JavaScript. Skall man ha en databas i till exempel Access, blir det även en del SQL i koden.

Att det är så många olika delar låter svårt, men det är det inte om man kan programmera sedan tidigare samt kan grunderna i HTML. Det finns skolor om VB, HTML och SQL på vår webbplats.

Den enkla sida vi här skall göra, klarar du emellertid utan större förkunskaper. Förhoppningsvis kommer den att locka till en fortsättning.

Baby Web Server

För att ASP-sidan skall fungera måste den server som webbsidorna ligger på ha stöd för ASP. Innan man lägger upp sidorna, kan man testa funktionen på sin hemmadator. Jag skall berätta hur man använder gratisprogrammet Baby Web Server så att datorn hemma kommer att fungera som en webbserver med ASP-stöd.

Börja med att hämta Baby Web Server på programmets hemsida. Packa upp den nedladdade ZIP-filen i valfri mapp – programmet kräver ingen installation.

Starta programmet genom att dubbelklicka på babyweb.exe. I fönstret som öppnas finns knappen Settings. Klicka på den.

Raden "Listen on port" är som standard ifylld med värdet 80. Detta är standardporten för webbsidor.

I nästa rad bläddrar du fram sökvägen till mappen där din startsida finns.

I raden "Default Page" anger du namnet på din startsida. Som standard används index.html.

Klicka på OK.

I programfönstret klickar du nu på "Start". Om allt fungerar som det skall kommer programfönstret att se ut så här. Det innebär att webbservern är startad och att du kan öppna dina HTML- och ASP-sidor i webbläsaren, utan att först skicka dem till internetservern.

Du behöver faktiskt inte ens vara uppkopplad till Internet för att köra dem.

Port 80 är blockerad?

Det kan dock hända att det i stället står "Web Server failed to start on port 80" i programfönstret. Det beror troligen på att port 80 är blockerad. I stället för att låsa upp porten, väljer du en annan port i webbservern. Gå tillbaka till "Settings" och ange till exempel port 81, och försök sedan starta servern på nytt. Nu fungerar det troligen.

Öppna webbsidorna i webbläsaren

Öppna webbläsaren. I adressfönstret skriver du http://localhost/. Om du har valt en annan port än port 80, till exempel port 81 som ovan, skriver du i stället http://localhost:81/.

I Baby Web Server kan det nu se ut så här. Du är uppkopplad mot servern och kan använda funktionerna i dina ASP-sidor.

Baby Web Server klarar många ASP-funktioner. I betalversionen av samma program, Quick ‘n Easy Web Server Professional som kostar 30 dollar, finns fler.

Ett tips

Baby Web Server är portabelt på så sätt att det inte installeras och kan köras direkt från en minnespinne. Däremot skriver det en del till registret, så det fungerar inte spårlöst om du använder minnespinnen på främmande datorer. Ändå kan det vara praktiskt att ha både server och hemsidor på minnespinnen, eftersom det gör att du kan flytta alltsammans mellan dina datorer utan att behöva bekymra dig för att synkronisera innehållet.

Men eftersom du flyttar minnespinnen kommer den att få olika enhetsbeteckningar beroende på vilken dator du har stoppat in den i. Det som kallas K:\ på den stationära datorn kan mycket väl heta D:\ på den bärbara.

Det här löser du enklast genom att placera Baby Web Server i en egen mapp på minnespinnen, och sedan lägga hela hemsidesmappen som en undermapp till servermappen. Låt oss säga att du har servern i mappen "Baby Web Server" och hemsidorna i mappen "Hemsidor", som ligger i "Baby Web Server". I inställningarna till Baby Web Server behöver du då bara ange Hemsidor som sökväg till hemsidesmappen. Då kommer det att fungera oavsett var minnespinnen är inkopplad.

Använd textredigeraren!

Nu har vi en webbserver och kan börja göra en ASP-sida.Jag använder en textredigerare för att skriva ASP-sidor. FrontPage och liknande krånglar bara till det, eftersom det skapas kod som inte behövs och det blir svårare att få kontroll över programmet. Man kan använda Windows Anteckningar, men själv använder jag sedan många år det helt överlägsna NoteTab, som finns både som gratisprogram och som betalprogram. NoteTab kan för övrigt köras portabelt på minnespinne.

Sökning i databaser

Vi skall göra en sida där användaren får skriva in ett sökord. Därefter skall en databas letas igenom och en lista visas med alla poster som innehåller sökordet.

Databasen gör du i Access eller motsvarande databasprogram efter eget tycke. Spara den i rotkatalogen för dina hemsidor.

Min databas heter SDN.mbd och har en tabell som heter Kompisar. Tabellen Kompisar innehåller kolumnerna Namn, Adress och Telefon.

Börja med sökformuläret

Vi börjar med att skapa en vanlig webbsida med HTML-taggarna:

<HTML>
<%@ LANGUAGE="VBSCRIPT" %>
</HTML>

VB-skript är defaultskript så det behöver man egentligen inte ange. ASP-kompilatorn utgår från att det är VB-skript om inget annat anges. Lägg märke till taggarna <% och %>. Servern uppfattar detta som att koden mellan dessa taggar skall gå genom ASP-kompilatorn.

Efter deklarationen av VB-skript skriver vi:

<FORM METHOD="POST" ACTION="sok.asp">

sok.asp är en annan ASP-sida, som vi skall göra senare. Det är till den sidan som sökordet skall skickas till och det är där själva sökkoden skrivs. 

I nästa rad skapar vi en textruta att skriva vårt sökord i:

<INPUT TYPE="text" SIZE="30" NAME="sokord">

Det viktiga med ASP är de namn man sätter på sådana här textrutor. Denna heter sokord. Nu skall vi också ha en klickbar knapp som skickar iväg ordet till sidan sok.asp:

<INPUT TYPE="submit" VALUE="Sök">

Observera att TYPE inte är button utan submit. Value är texten som skall att stå på knappen.

Nu skall vi bara avsluta FORM-taggen:

</FORM>

Hela koden till default.asp

<HTML>
<%@ LANGUAGE="VBSCRIPT" %>
<FORM METHOD="POST" ACTION="sok.asp">
Ange sökord <br>
<INPUT TYPE="text" SIZE="30" NAME="sokord">
<INPUT TYPE="submit" VALUE="Sök">
</FORM>
</HTML>

Spara filen som default.asp i den rotkatalog vi tidigare angav.

Söksidan

Nu skall vi göra söksidan sok.asp. Börja som förut med huvudtaggarna, som skall finnas med på alla sidor:

<HTML>
<%@ LANGUAGE="VBSCRIPT" %>
</HTML>

Nu lägger vi in kopplingen till databasen (hela koden läggs i en rad utan radbrytning):

<%
Set Connect = Server.CreateObject("ADODB.Connection")Connect.Open"driver={MicrosoftAccessDriver(*.mdb)};dbq=d:\inetpub\wwwroot\SDN.mdb"

Observara att nu övergår vi från HTML till VBSkript och markerar detta i koden med <%. När sidan senare skall upp på Internet, måste vi byta ut sökvägen till databasen mot den rotbeteckning som används på internetservern där vi lägger våra sidor. Om databasen ligger i samma katalog som den anropande ASP-sidan, ser sökvägen förmodligen ut så här:

conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("databas.mdb")

Nu måste vi ta till våra SQL-kunskaper för att göra sökningen:

SQL = "Select * from Kompisar Where Namn LIKE '%" & Request.Form("sokord")& "%'"

Allt skall skrivas på samma rad, alltså inget Enter efter &-tecknen. Det som sker här är att koden i satsen Request.Form("sokord") tar emot det sökord som skickades från default.asp. Sokord är alltså namnet på den textruta där sökordet skrevs in.

Alla konstiga tecken måste tas med – sökordet blir en variabel i satsen med jokertecken på båda sidor om sökordet. Söker man på Erik, får man alltså träff på både Sven-Erik och Erik-Petter. Det som koden betyder är: "Välj ut alla poster från tabellen Kompisar där kolumnen Namn innehåller sökordet."

Nu exekverar vi SQL-satsen och tilldelar ett RecordSet, RS, till de poster som sökningen hittar.

Set RS=Connect.Execute (SQL)

Sedan är sökningen klar och vi vill se resultatet genom att skriva ut det som finns i RS.

Do Until RS.EOF

Vilket betyder: "Gör följande till slutet av RecordSetet (EOF = End Of File)."

<%=RS("Namn")%><br>
<%=RS("Adress")%><br>
<%=RS("Telefon")%><br><br><br>

Här skrivs det som finns i första posten, samtidigt som nya rader skapas med <br>

RS.MoveNext
LOOP

Här flyttar vi till nästa post i RS, går tillbaka i koden till Do och skriver ut nästa Post. 

RS.Close
Connect.Close
%>

När vi nått slutet (EOF) på RS, stänger vi RS och kontakten med databasen, samt markerar med %> att VB-skriptet är slut.

Snygga till utskriften

Vi vill kanske ha en liten ram runt varje utskriven post. Den kan vi låta programmet skapa i loopen, så att det blir lika många ramar som sökträffar. Det är det här som är det fina med dynamiska sidor: programmet skapar sidorna själv utifrån de förutsättningar som för tillfället gäller.

Do Until RS.EOF
%>
<TABLE border='2' width='500'><tr><td>
<%=RS("Namn")%><br>
<%=RS("Adress")%><br>
<%=RS("Telefon")%><br><br><br>
</td></tr>
</TABLE>
<%

Lägg märke till att vi före TABLE markerar med %> att här slutar VB-skript och övergår till vanlig HTML. När vi sedan skall fortsätta med VB-skriptet måste vi markera detta med <%.

<%
RS.MoveNext
LOOP
RS.Close
Connect.Close
%>

Söksidans hela kod:

<HTML>
<%@ LANGUAGE="VBSCRIPT" %>
<%
Set Connect = Server.CreateObject("ADODB.Connection")

Connect.Open"driver={MicrosoftAccessDriver(*.mdb)};dbq=d:\inetpub\wwwroot\SDN.mdb"

SQL = "Select * from Tabellnamn Where Kolumnnamn LIKE '%" & 
Request.Form("sokord")& "%'"

Set RS=Connect.Execute (SQL)

Do Until RS.EOF
%>

<TABLE border='2' width='500'><tr><td>
<%=RS("Namn")%><br>
<%=RS("Adress")%><br>
<%=RS("Telefon")%><br><br><br>
</td></tr>
</TABLE>

<%
RS.MoveNext
LOOP
RS.Close
Connect.Close
%>

</HTML>

Döp sidan till sok.asp och lägg den i roten tillsammans med default.asp och databasfilen.

Pröva i webbläsaren

Sedan kan vi pröva om det fungerar. Starta webbservern och ange default.asp som startsida. Starta webbläsaren. I adressraden skriver vi http://localhost/. I och med att vår default.asp ligger i rotkatalogen som vi tidigare definierade, kommer webbläsaren att hitta sidan. Klicka på Enter och sedan på Anslut i fönstret som visas.

Nu kommer vår textruta upp med en knapp som det står Sök på. Skriv ett ord som du vet finns i kolumnen Namn, gärna ett ord som finns i flera poster, och klicka på Sök.

Om du har gjort rätt får du fram ramar som visar dina sökresultat!