Bygg en egen sökmotor #1
Förord
Som du sett på flera av hemsidorna så används dessa flitigt för att presentera information på ett snabbt och överskådligt sätt. Det första man börjar med är att konstruera en sida som ser ut som det hade varit resultatet av en sökning som gjorts i databasen. Personligen tycker jag om att använda Microsoft FrontPage 2000 för att göra layouten med. Det spelar ingen roll vilken typ editor du har, även notepad är känt som en editor för de riktiga proffsen.Innehåll
Relaterade artiklar
» Bygg en egen sökmotor #2» Bygg en egen sökmotor #3
» Bygg en egen sökmotor #4
En söksida bör innehålla några komponenter för att vara överskådlig. Först måste du givetvis ha textrutor, listboxar och knappar eller det som behövs för att mata in den sökning man önskar, men det finns mer. Du behöver även hantera flera sidor, presentera antalet träffar och även lägga ut länkar på alla dina träffar så de pekar till något. Alla dessa komponenter bidrar till att du kommer få en bra och intressant sökmotor för din hemsida.
För att börja med något så har jag gjort en databas som innehåller lite information som används för denna kurs. Databasen innehåller endast en tabell som heter kontakter. Tabellen innehåller information såsom förnamn, efternamn, ort och telefonnumer. I denna tabell så behövs inget index eftersom det rör sig om så små mängder datainformation. Börjar du komma över 100-tals poster eller flera tabeller som står i relation till varandra så börjar du tjäna tid. Tänk alltid på att de index du skapar medför att databasen blir större och större så använd inte för många index om du måste. Längst ner hittar du hela projektet och exempelfiler för att göra din egna sökmotor med ASP.
Tabellen som används är 'customers' från Nwind.mdb
Denna informationen skall vi nu försöka göra sökbar. Genom att börja med att göra en design på både sökningstyperna och själva söktexten kan vi få en översikt om hur programmet skall se ut sedan. Vi börjar nu med att göra en listbox som innehåller fem alternativ: Företag, namn samt fritextsökning (dvs ur flera fält).
Ovanstående html-kod visar en listbox som innehåller tre alternativ och fritext alternativet är förvalt. Det är lika bra att starta igång själva programmeringen på en gång. Om du tänker dig att vi presenterar denna text när man kör reload på din browser så kommer fritext att vara markerad varje gång. Genom att hålla reda på vad det var innan omladdningen görs- kan vi med ganska enkla medel ändra alternativet så det valda alternativet kvarstår efter varje omladdning.
Genom att använda request.form() så kan vi läsa av vad en variabel var på den sida som kallade på den nya. Detta kanske låter konstigt- men jag skall illustrera detta med en bild. Som ni ser här så körs först program.asp (1) och du klickar på exempelvis sök-knappen som laddar samma program igen (2). När du startart (2) kan du läsa av innehållet av dokumentet från (1). På detta sätt kan du sedan hålla på och trycka reload hela tiden och det som sist ställdes in (1)- kommer också att visas när (2) visas. Request.form(variabelnamn) används genom att du i detta exempel tittar på name=soktyp. Vi fångar upp soktyp varje gång sidan laddas om och därigenom bygger en html-kod där selected kommer att ställas in beroende på vad som valdes i (1).
På detta sätt kommer selItem första gången inte att innehålla något värde för du kommer troligtvis inte från denna sida utan någon annan stans ifrån. Därför innehåller selItem inget första gången och vi sätter värdet default till 1, därefter kommer den innehålla det värde som sist var valt av användaren när sidan laddats om.
På samma sätt skall vi nu bygga upp en textbox där man kan skriva sin söktext. Om du vill att din söktext skall ligga kvar efter att sidan har laddats om kan man göra detta genom att i textboxens value lägga in värdet av det som stod i name på föregående sida. Här ser du att vi hämtar ut värdet ur name (som innehåller den skrivna texten) och återanvänder det genom att placera det i value- observera att du måste ha med = tecknet för annars visas inte din text upp.
Nu har vi kommit så långt att vi vet vad som skall sökas genom att få tillgång till 'selItem' och den text 'soktext' som vi skall leta efter. Eftersom vi skall använda oss av nwind.mdb så finns den redan upplagd med en DSN adress i ditt register, men jag föreslår att du använder en DNS-less anslutning genom att peka ut vart din databas ligger. Anledningen är att du i ditt program får bättre överblick på 'hela' systemet då, som i detta fall både databas och asp-scriptfilen.
Först börjar vi med att starta igång vårt gränssnitt ADO för att kommunicera med vår databasmotor. Detta görs genom att deklarera en connection och ett recordset enligt följande:
Efter att ha deklarerat en connection, berättar vi att vi vill ansluta mot en Access databas och den finns placerad i c-rooten och heter nwind.mdb. Svårare än så är det faktiskt inte att sätta upp en anslutning till en accessdatabas. Efter att anslutningssträngen har satts upp så öppnar/ansluter vi oss till databasen genom att skriva con.open.
Tips! Om du nu vill se vad som egentligen har angivits kan du faktiskt printa ut con.connectionstring och ser därmed exakt vad för inställningar som finns i din connectionstring. Skriv då response.write con.connectionstring efter con.open.
Men: Nu finns det dock flera saker som säger att man inte bör göra på detta sätt utan istället använda en variabel som heter request.servervariables("MAP_PATH") som kommer att innehålla den korrekta sökvägen som ditt program körs ifrån, men för detta exempel så använder vi den 'hårdkodade varianten'.
Obs! Se till att du pekar ut rätt sökväg till din databas och att ditt program placeras i en katalog på din webbserver som tillåter körning av program. Om du är osäker så är alltid \scripts katalogen på din IIS server körbar. Om du använder ett webbhotell som stödjer asp så brukar alla kataloger tillåta körning av asp-program.
Testa gärna din anslutning genom att kontrollera om det går att hämta ut någon datainformation från någon tabell. Genom att köra en sql-sats mot denna anslutning så kan du snabbt se om det fungerar eller inte och på detta sätt säkerställa att din anslutning fungerar korrekt. Nedanstående exempel bör ge 91 poster som svar om nwind.mdb är daterad 98-04-24.
För att börja med något så har jag gjort en databas som innehåller lite information som används för denna kurs. Databasen innehåller endast en tabell som heter kontakter. Tabellen innehåller information såsom förnamn, efternamn, ort och telefonnumer. I denna tabell så behövs inget index eftersom det rör sig om så små mängder datainformation. Börjar du komma över 100-tals poster eller flera tabeller som står i relation till varandra så börjar du tjäna tid. Tänk alltid på att de index du skapar medför att databasen blir större och större så använd inte för många index om du måste. Längst ner hittar du hela projektet och exempelfiler för att göra din egna sökmotor med ASP.
Tabellen som används är 'customers' från Nwind.mdb
Denna informationen skall vi nu försöka göra sökbar. Genom att börja med att göra en design på både sökningstyperna och själva söktexten kan vi få en översikt om hur programmet skall se ut sedan. Vi börjar nu med att göra en listbox som innehåller fem alternativ: Företag, namn samt fritextsökning (dvs ur flera fält).
Ovanstående html-kod visar en listbox som innehåller tre alternativ och fritext alternativet är förvalt. Det är lika bra att starta igång själva programmeringen på en gång. Om du tänker dig att vi presenterar denna text när man kör reload på din browser så kommer fritext att vara markerad varje gång. Genom att hålla reda på vad det var innan omladdningen görs- kan vi med ganska enkla medel ändra alternativet så det valda alternativet kvarstår efter varje omladdning.
Genom att använda request.form() så kan vi läsa av vad en variabel var på den sida som kallade på den nya. Detta kanske låter konstigt- men jag skall illustrera detta med en bild. Som ni ser här så körs först program.asp (1) och du klickar på exempelvis sök-knappen som laddar samma program igen (2). När du startart (2) kan du läsa av innehållet av dokumentet från (1). På detta sätt kan du sedan hålla på och trycka reload hela tiden och det som sist ställdes in (1)- kommer också att visas när (2) visas. Request.form(variabelnamn) används genom att du i detta exempel tittar på name=soktyp. Vi fångar upp soktyp varje gång sidan laddas om och därigenom bygger en html-kod där selected kommer att ställas in beroende på vad som valdes i (1).
<%
SelItem = request(soktyp)
if SelItem = "" then SelItem = 1
%>
På detta sätt kommer selItem första gången inte att innehålla något värde för du kommer troligtvis inte från denna sida utan någon annan stans ifrån. Därför innehåller selItem inget första gången och vi sätter värdet default till 1, därefter kommer den innehålla det värde som sist var valt av användaren när sidan laddats om.
På samma sätt skall vi nu bygga upp en textbox där man kan skriva sin söktext. Om du vill att din söktext skall ligga kvar efter att sidan har laddats om kan man göra detta genom att i textboxens value lägga in värdet av det som stod i name på föregående sida. Här ser du att vi hämtar ut värdet ur name (som innehåller den skrivna texten) och återanvänder det genom att placera det i value- observera att du måste ha med = tecknet för annars visas inte din text upp.
<%
SelItem = request(soktyp)
if SelItem = "" then SelItem = 1
sokText = request("soktext")
%>
Nu har vi kommit så långt att vi vet vad som skall sökas genom att få tillgång till 'selItem' och den text 'soktext' som vi skall leta efter. Eftersom vi skall använda oss av nwind.mdb så finns den redan upplagd med en DSN adress i ditt register, men jag föreslår att du använder en DNS-less anslutning genom att peka ut vart din databas ligger. Anledningen är att du i ditt program får bättre överblick på 'hela' systemet då, som i detta fall både databas och asp-scriptfilen.
Först börjar vi med att starta igång vårt gränssnitt ADO för att kommunicera med vår databasmotor. Detta görs genom att deklarera en connection och ett recordset enligt följande:
<%
set con = server.createobject("ADODB.Connection")
set rst = server.createobject("ADODB.Recordset")
con.connectionstring = "{Microsoft Access Driver (*.mdb)};DBQ=c:\nwind.mdb"
con.open
%>
Efter att ha deklarerat en connection, berättar vi att vi vill ansluta mot en Access databas och den finns placerad i c-rooten och heter nwind.mdb. Svårare än så är det faktiskt inte att sätta upp en anslutning till en accessdatabas. Efter att anslutningssträngen har satts upp så öppnar/ansluter vi oss till databasen genom att skriva con.open.
Tips! Om du nu vill se vad som egentligen har angivits kan du faktiskt printa ut con.connectionstring och ser därmed exakt vad för inställningar som finns i din connectionstring. Skriv då response.write con.connectionstring efter con.open.
Men: Nu finns det dock flera saker som säger att man inte bör göra på detta sätt utan istället använda en variabel som heter request.servervariables("MAP_PATH") som kommer att innehålla den korrekta sökvägen som ditt program körs ifrån, men för detta exempel så använder vi den 'hårdkodade varianten'.
Obs! Se till att du pekar ut rätt sökväg till din databas och att ditt program placeras i en katalog på din webbserver som tillåter körning av program. Om du är osäker så är alltid \scripts katalogen på din IIS server körbar. Om du använder ett webbhotell som stödjer asp så brukar alla kataloger tillåta körning av asp-program.
Testa gärna din anslutning genom att kontrollera om det går att hämta ut någon datainformation från någon tabell. Genom att köra en sql-sats mot denna anslutning så kan du snabbt se om det fungerar eller inte och på detta sätt säkerställa att din anslutning fungerar korrekt. Nedanstående exempel bör ge 91 poster som svar om nwind.mdb är daterad 98-04-24.
<%
set rst = con.execute("select count(*) from customers")
if not (rst.eof or rst.bof) then
response.write "antal poster: " & rst(0)
else
response.write "inga poster finns"
end if
%>
0 Kommentarer