23. december 2009 - 18:15Der er
28 kommentarer og 1 løsning
Søgefunktion i ASP
Hej.
Jeg skal have lavet en søgefunktion til en hjemmeside. Det skal laves i asp. Jeg har domæne hos dandomain, hvor man kan hente et script. Det har jeg gjort, og virker også fint nok. Problemet er bare, at man ikke kan ændre designet på sitemappen. Se evt. her: http://ringstedtennisklub.dk/search.html. Prøv at søg på "junior". så finder den nogen ting, men designet er et helt andet.
Er der nogen der ved hvordan man laver en søge funktion? Det må meget gerne være lige så nemt, som det var at sætte dandomains kode ind.
i koden, hvor du har 'søg', dvs <div id="middle_stor"> <h2>Søg</h2> <p>Har du noget du ikke kan finde, kan du bruge denne søgefunktion, som hjælper dig med at finde det du ønsker.</p>
jeg havde tænkt noget med <div id="middle_stor"> <iframe frameborder=0 src="findit.html"></iframe> </div>
og så en ekstra side (findit.html) med søgekoden inkl javascriptet
+++ <script src="Scripts/AC_RunActiveContent.js" type="text/javascript"></script> +++ <h2>Søg</h2> <p>Har du noget du ikke kan finde, kan du bruge denne søgefunktion, som hjælper dig med at finde det du ønsker.</p>
Det ser mærkeligt ud.. Jeg kan jo på den måde ikke komme til at ændre design på sitemap siden. Den har jo bare en helt hvid baggrund, samt en anden font. Er der ikke andre måder?
Jeg har nu prøvet at hente og lave de filer man kunne hente på siden. og har rettet dem lidt til. Det virker bare ikke... Jeg får fejlmeddelsen:
Microsoft OLE DB Provider for ODBC Drivers error '80004005'
[Microsoft][ODBC Microsoft Access Driver]General error Unable to open registry key 'Temporary (volatile) Jet DSN for process 0x91c Thread 0x1820 DBC 0x1dbafbcc Jet'.
Jeg vil også gerne have den til at finde frem til noget andet end navne og adresser. Og også uden den kasse om tabellen, og med link. Hvordan gør jeg det?
<% ' Henter værdien fra soeg.htm strKeyword = Trim(Request.Form("Keyword"))
If Len(strKeyword) = 0 Then ' Hvis der ikke er skrevet i feltet Response.Clear Response.Redirect("search.html") Else ' Hvis der er skrevet i feltet strKeyword = Replace(strKeyword,"'","''") End If
' Opbygger en dynamisk SQL streng strSQL = "SELECT ID, Navn, Adresse, Bynavn, Beskrivelse FROM Kunder WHERE" strSQL = strSQL & " (Navn LIKE '%" & strKeyword & "%')" strSQL = strSQL & " OR (Adresse LIKE '%" & strKeyword & "%')" strSQL = strSQL & " OR (Bynavn LIKE '%" & strKeyword & "%')" strSQL = strSQL & " OR (Beskrivelse LIKE '%" & strKeyword & "%')"
' Skaber DSNLess forbindelse til DBen strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("search.mdb") Set myConn = Server.CreateObject("ADODB.Connection") myConn.Open strDSN
' Skaber et recordset udfra SQL strengen Set rs = myConn.Execute(strSQL) If Not (rs.BOF Or rs.EOF) Then ' Hvis der er fundet poster på søgningen Response.Write "<p>Søgeresultat</p>" Response.Write "<table border=1>" Response.Write "<tr><th>Navn</th><th>Adresse</th><th>By</th><th>Beskrivelse</th></tr>" Do While Not rs.EOF Response.Write "<tr><td>" & rs("Navn") & "</td>" Response.Write "<td>" & rs("Adresse") & "</td>" Response.Write "<td>" & rs("Bynavn") & "</td>" Response.Write "<td>" & rs("Beskrivelse") & "</td></tr>" rs.MoveNext Loop Response.Write "</table>" Else ' Hvis der ikke er fundet poster på søgningen Response.Write "<p>Der er ikke fundet noget på denne søgning</p>" End If
' Rydder op efter os myConn.Close Set myConn = Nothing %>
Og den ligger i samme mappe som alle siderne ligger i. Om det er korrekt er jeg ikke sikker på?
koden i sig selv ser fin nok ud, men du svarede ikke på mit spørgsmål. Har du en Access-database ved navn "search.mdb" liggende i samme mappe som denne pågældende ASP-fil?
Men ja, de ligger i samme mappe. men den hed search_2000.mdb. Det er nu rettet, og nu virker det...
Men jeg ved stadig ikke hvordan jeg ændre indholdet til fx at være Juniortræning og så med link til siden. Og ved heller ikke hvordan jeg fjerner borderen i tabellen.
Jeg har nu prøvet at ændre indholdet til det jeg gerne vil have. Det kommer en fejlmeddelse der hedder:
Microsoft OLE DB Provider for ODBC Drivers error '80004005'
[Microsoft][ODBC Microsoft Access Driver]General error Unable to open registry key 'Temporary (volatile) Jet DSN for process 0x91c Thread 0x1820 DBC 0x1dbafbcc Jet'.
/search.asp, line 95
Og min kode ser sådan ud:
<% ' Henter værdien fra soeg.htm strKeyword = Trim(Request.Form("Keyword"))
If Len(strKeyword) = 0 Then ' Hvis der ikke er skrevet i feltet Response.Clear Response.Redirect("search.html") Else ' Hvis der er skrevet i feltet strKeyword = Replace(strKeyword,"'","''") End If
' Opbygger en dynamisk SQL streng strSQL = "SELECT ID, Junior, Beskrivelse, Links FROM Kunder WHERE" strSQL = strSQL & " (Junior LIKE '%" & strKeyword & "%')" strSQL = strSQL & " OR (Beskrivelse LIKE '%" & strKeyword & "%')" strSQL = strSQL & " OR (Links LIKE '%" & strKeyword & "%')"
' Skaber DSNLess forbindelse til DBen strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("search.mdb") Set myConn = Server.CreateObject("ADODB.Connection") myConn.Open strDSN
' Skaber et recordset udfra SQL strengen Set rs = myConn.Execute(strSQL) If Not (rs.BOF Or rs.EOF) Then ' Hvis der er fundet poster på søgningen Response.Write "<table border=0>" Response.Write "<tr><th>Junior</th>" Do While Not rs.EOF Response.Write "<tr><td>" & rs("Junior") & "</td>" Response.Write "<td>" & rs("Beskrivelse") & "</td>" Response.Write "<td>" & rs("Links") & "</td></tr>" rs.MoveNext Loop Response.Write "</table>" Else ' Hvis der ikke er fundet poster på søgningen Response.Write "<p>Der er ikke fundet noget på denne søgning</p>" End If
' Rydder op efter os myConn.Close Set myConn = Nothing %>
du har dobbelttjekket at tabel og kolonnenavne er skrevet rigtigt? Hvilke datatyper har du forskellige kolonner? prøv evt at udskrive din sql før du executer den (response.write strsql)
<% ' Henter værdien fra soeg.htm strKeyword = Trim(Request.Form("Keyword"))
If Len(strKeyword) = 0 Then ' Hvis der ikke er skrevet i feltet Response.Clear Response.Redirect("search.html") Else ' Hvis der er skrevet i feltet strKeyword = Replace(strKeyword,"'","''") End If
' Opbygger en dynamisk SQL streng strSQL = "SELECT ID, Navn, Adresse, Bynavn, Beskrivelse FROM Kunder WHERE" strSQL = strSQL & " (Navn LIKE '%" & strKeyword & "%')" strSQL = strSQL & " OR (Adresse LIKE '%" & strKeyword & "%')" strSQL = strSQL & " OR (Bynavn LIKE '%" & strKeyword & "%')" strSQL = strSQL & " OR (Beskrivelse LIKE '%" & strKeyword & "%')"
' Skaber DSNLess forbindelse til DBen strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("search.mdb") Set myConn = Server.CreateObject("ADODB.Connection") myConn.Open strDSN
' Skaber et recordset udfra SQL strengen Set rs = myConn.Execute(strSQL) If Not (rs.BOF Or rs.EOF) Then ' Hvis der er fundet poster på søgningen Response.Write "<table border=0>" Response.Write "<tr><th>Navn</th><th>Adresse</th><th>By</th><th>Beskrivelse</th></tr>" Do While Not rs.EOF Response.Write "<tr><td>" & rs("Navn") & "</td>" Response.Write "<td>" & rs("Adresse") & "</td>" Response.Write "<td>" & rs("Bynavn") & "</td>" Response.Write "<td>" & rs("Beskrivelse") & "</td></tr>" rs.MoveNext Loop Response.Write "</table>" Else ' Hvis der ikke er fundet poster på søgningen Response.Write "<p>Der er ikke fundet noget på denne søgning</p>" End If
' Rydder op efter os myConn.Close Set myConn = Nothing %>
Og i min database er der følgende: ID, Junior, Beskrivelse, Link
det jeg søger er din database-opbygning - hvad betyder "Og i min database er der følgende: ID, Junior, Beskrivelse, Link"? Har du de tabeller eller er det kolonner? hvis det er kolonner i en tabel, hvilken datatype er de så sat op til at indeholde?
Jeg har ikke nogen databaseopbygning. Det eneste jeg har er en htmlside med søgefelt, en asp side hvor koden er som ovenstående og en microsoft access database fil.
Access databasen er bygget op som en almindeligt excel ark
Det kan ikke lade sig gøre at have en Access database opbygget som et Excel ark - enten har man en Excel fil eller også har man en Access Database. Har du en Access database består denne af en eller flere tabeller med hver en eller flere kolonner - det vigtige her er så hvad den tabel du vil søge i hedder plus navnene på de kolonner fra den pågældende tabel der skal trækkes ud samt søges i og dernæst datatyperne (tal, tekst, dato...) hver kolonne har.
Fejlen du får skyldes umiddelbart et mismatch mellem hvad der er skrevet i din SQL og hvad databasen reelt indeholder.
Det er også lavet i en Access Database. Ikke i Excel.
Databasen er opbygget således at der ude i venstre side er en som hedder kunder (det må være tabellens navn, hvis jeg har forstået det korrekt)
I selve dokumentet, og i det der må være kolonnerne heddder de ID, Junior, Beskrivelse og Links.
Og i min asp kode er den sådan:
<% ' Henter værdien fra soeg.htm strKeyword = Trim(Request.Form("Keyword"))
If Len(strKeyword) = 0 Then ' Hvis der ikke er skrevet i feltet Response.Clear Response.Redirect("search.html") Else ' Hvis der er skrevet i feltet strKeyword = Replace(strKeyword,"'","''") End If
' Opbygger en dynamisk SQL streng strSQL = "SELECT ID, Junior, Beskrivelse, Links FROM Kunder WHERE" strSQL = strSQL & " (Junior LIKE '%" & strKeyword & "%')" strSQL = strSQL & " OR (Beskrivelse LIKE '%" & strKeyword & "%')" strSQL = strSQL & " OR (Links LIKE '%" & strKeyword & "%')"
' Skaber DSNLess forbindelse til DBen strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("search.mdb") Set myConn = Server.CreateObject("ADODB.Connection") myConn.Open strDSN
' Skaber et recordset udfra SQL strengen Set rs = myConn.Execute(strSQL) If Not (rs.BOF Or rs.EOF) Then ' Hvis der er fundet poster på søgningen Response.Write "<p>Søgeresultat</p>" Response.Write "<table border=1>" Response.Write "<tr><th>Junior</th><th>Beskrivelse</th><th>Links</th></tr>" Do While Not rs.EOF Response.Write "<tr><td>" & rs("Junior") & "</td>" Response.Write "<td>" & rs("Beskrivelse") & "</td>" Response.Write "<td>" & rs("Links") & "</td></tr>" rs.MoveNext Loop Response.Write "</table>" Else ' Hvis der ikke er fundet poster på søgningen Response.Write "<p>Der er ikke fundet noget på denne søgning</p>" End If
' Rydder op efter os myConn.Close Set myConn = Nothing %>
Jeg fandt ud at det, men har nu endnu et spørgsmål.
Hvordan får jeg det til at stå pænt? Som det står nu, står det meget rodet, og det er ikke nemt at finde rundt i.
Et andet spørgsmål er, hvordan jeg får et link til at være et link (det er et link i databasen, men ikke når den kommer på nettet). Ved godt det er besvaret tidligere, men kan ikke få det til at virker, da jeg ikke er helt sikker på hvor jeg skal sætte koden ind?
Det med opsætningen kan jeg ikke helt få til at virke. Den sætter fint bredden til 200 px, men det ser stadig ikke pænt ud. Jeg har også prøvet at sætte text align til left, dog uden held. Ved ikke helt hvordan jeg får den rettet til så det ser pænt ud.
Den skriver det selv som link i databasen. Så ved ikke hvad jeg så skal.
Og hvordan kan jeg lege med min css når det ikke bruger css. Altså det der kommer frem, når man har trykket på søg knappen, er jo asp, hvilket ikke indeholder css. Eller har jeg helt misforstået det.
Resten af siden er opbygget i css, men det der bestemmer udseende på resultatsiden er vel:
ja - du har misforstået det. ASP er serverside og HTML/CSS er klientside - din serverside kan tage imod og behandle klientside information samt udsende information, bla HTML og CSS, til klientside. dit style-tag i ovenstående kode er css.
jeg kan ikke se din database - men undlad at benytte datatypen hyperlink men derimod normal tekst eller notat.
jeg vidste godt asp er en serverside og html/css er klientside, men jeg ved ikke hvor jeg ændre css, da jeg jo ikke har css i asp koden. eller hvor er det helt præcist jeg kan se hvor css koden er. Det giver ingen mening for mig. For mig er css enten et css dokument, eller css kode i head tagget på et html dokument.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.