Avatar billede j-roar-h Nybegynder
23. december 2009 - 18:15 Der 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.

Mvh Jacob
Avatar billede claes57 Ekspert
23. december 2009 - 18:30 #1
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>

    <form action="http://scripts.dandomain.dk/search.asp" method="post">
    <input type="hidden" name="SiteMapURL" value="http://www.ringstedtennisklub.dk/sitemap.html">
   
    <input type="text" name="SearchWord" size="20">
    <input type="image" src="Images/Search.png" alt="Submit button" align="middle">
    </form>
    </p>
  </div>

laver du den om til en iframe (kun ved søg) - så vil svaret komme i samme areal.
Avatar billede j-roar-h Nybegynder
23. december 2009 - 18:40 #2
Det virkede ikke. Ellers har jeg gjort det forkert. Den ser jo heller ikke godt ud med den store hvide kasse.. Hvad andet kan jeg gøre?
Avatar billede claes57 Ekspert
23. december 2009 - 18:58 #3
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>

    <form action="http://scripts.dandomain.dk/search.asp" method="post">
    <input type="hidden" name="SiteMapURL" value="http://www.ringstedtennisklub.dk/sitemap.html">
   
    <input type="text" name="SearchWord" size="20">
    <input type="image" src="Images/Search.png" alt="Submit button" align="middle">
    </form>
    </p>
+++
Avatar billede j-roar-h Nybegynder
23. december 2009 - 19:14 #4
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?
Avatar billede keysersoze Guru
23. december 2009 - 20:22 #5
Avatar billede j-roar-h Nybegynder
24. december 2009 - 14:06 #6
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'.

/search.asp, line 92

Hvordan får jeg den til at virke? se evt eksempel her: http://ringstedtennisklub.dk/search.html

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?
Avatar billede keysersoze Guru
24. december 2009 - 14:21 #7
Henviser du korrekt til databasen? Udseendet og resultatet er kun et spørgsmål om at slå op i den/de rigtige tabeller og sætte HTML'en op efter ønske.
Avatar billede j-roar-h Nybegynder
25. december 2009 - 21:09 #8
Min kode er følgende:

<%
' 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å?
Avatar billede keysersoze Guru
26. december 2009 - 11:01 #9
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?
Avatar billede j-roar-h Nybegynder
26. december 2009 - 12:46 #10
nå undskyld... misforstod spørgsmålet..

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.
Avatar billede keysersoze Guru
26. december 2009 - 20:09 #11
Response.Write "<td><a href=""dinside.asp?id=" & rs("dinkolonne") & """>" & rs("dinkolonne") & "</a></td>"

Response.Write "<table border=""0"">"
Avatar billede j-roar-h Nybegynder
27. december 2009 - 14:21 #12
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
%>
Avatar billede keysersoze Guru
28. december 2009 - 18:15 #13
hvad er linje 95?
Avatar billede j-roar-h Nybegynder
30. december 2009 - 18:27 #14
det er linjen hvor der står:

Set rs = myConn.Execute(strSQL)
Avatar billede keysersoze Guru
30. december 2009 - 19:59 #15
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)
Avatar billede j-roar-h Nybegynder
31. december 2009 - 13:40 #16
Jeg er ikke helt med på hvad du mener.

Altså i min asp kode står der følgende:

    <%
' 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
Avatar billede keysersoze Guru
31. december 2009 - 16:32 #17
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?
Avatar billede j-roar-h Nybegynder
31. december 2009 - 16:50 #18
Jeg er stadig ikke helt med.

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
Avatar billede keysersoze Guru
31. december 2009 - 17:05 #19
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.
Avatar billede j-roar-h Nybegynder
07. januar 2010 - 15:17 #20
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
%>
Avatar billede j-roar-h Nybegynder
07. januar 2010 - 16:37 #21
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?

Prøv at søg på www.ringstedtennisklub.dk efter junior. Så kan i se hvordan det ser ud.
Avatar billede keysersoze Guru
07. januar 2010 - 18:27 #22
Hvis du skal have det til at stå pænere skal du sætte HTML'en anderledes/pænere op, fx ved at sætte en style med bredde på hver th;

Response.Write "<tr><th style=""width: 200px;"">Junior</th><th>Beskrivelse</th><th>Links</th></tr>"

for at få links skriver i stedet for fx

Response.Write "<td>" & rs("Links") & "</td></tr>"

dette

Response.Write "<td><a href=""" & rs("Links") & """>klik her</a></td></tr>"
Avatar billede j-roar-h Nybegynder
08. januar 2010 - 12:52 #23
Det med link virker fint. Og så alligevel ikke... Den åbner følgende link: http://www.ringstedtennisklub.dk/www.ringstedtennisklub.dk/junior_inde_alm.html#http://www.ringstedtennisklub.dk/junior_inde_alm.html%23

Hvor det er meningen den kun skal åbne http://www.ringstedtennisklub.dk/junior_inde_alm.html

Og i databasen har jeg sat følgende link ind: www.ringstedtennisklub.dk/junior_inde_alm.html

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.
Avatar billede keysersoze Guru
08. januar 2010 - 13:11 #24
lad være med at benytte et link i databasen - så løser problemet med linket sig selv.

Der er ikke noget i vejen med koden for at få det til at se pænt ud - hvad pænt så end er - så det kræver nok bare at du leger noget mere med din css.
Avatar billede j-roar-h Nybegynder
09. januar 2010 - 19:26 #25
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:

    Response.Write "<table border=0>"
    Response.Write "<tr><th style=""margin-right:10px;""""width: 200px;"">Gruppe</th><th>Indhold</th><th>Beskrivelse</th><th>Link</th></tr>"
    Do While Not rs.EOF
        Response.Write "<tr><td>" & rs("Gruppe") & "</td>"
        Response.Write "<td>" & rs("Indhold") & "</td>"
        Response.Write "<td>" & rs("Beskrivelse") & "</td>"
        Response.Write "<td><a href=""" & rs("Link") & """>klik her</a></td></tr>"
        rs.MoveNext
    Loop
    Response.Write "</table>"


Jeg har lagt min database ud så du kan se hvordan den er opbygget. du kan hente den her: http://www.ringstedtennisklub.dk/database.html
Avatar billede keysersoze Guru
09. januar 2010 - 20:24 #26
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.
Avatar billede j-roar-h Nybegynder
09. januar 2010 - 22:53 #27
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.
Avatar billede keysersoze Guru
09. januar 2010 - 23:26 #28
vi kommer godt nok rundt om ret meget her...

CSS kan ligge i 3 niveauer; de to du har nævnt og det tredje som jeg skriver i #26, altså inline vha style-attributten på et HTML-tag.
Avatar billede keysersoze Guru
05. april 2010 - 11:36 #29
lukketid?
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester