Avatar billede kongsteddk Nybegynder
28. februar 2002 - 21:45 Der er 8 kommentarer og
1 løsning

Søgefunktion.....

Hej!

Jeg har siddet et par dage og bøvlet med det her script. Jeg startede med det i JavaScript (ASP), men er gået over til VBScript, så det kan sagtens være at der er nogle ting, som er absolut forkerte i det, men giv gerne lyd. Scriptet får data via adresselinien. Et indput kunne fx. være: http://*adresse*/musik/sog.asp?kategori=Kunstner&sog=Kim

Det er er problemte er at der ikke kommer noget output ud af databasen (jeg kan godt lave et udtræk med et simpel script som kun henter data, så det er ikke databaseadgangen der er prob. med!)

Selve ASP scriptet er herunder:
<% @language=VBScript %>
<html>
<body>
<table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber1">

Du søgte på <%=Request.QueryString("sog")%>. Der blev fundet følgende: <br>
<tr>
    <td align="center">ID<br>
    <td align="center">Titel<br></td>
    <td align="center">Kunstner</td>
</tr>

<%
set conn = Server.CreateObject("ADODB.Connection")
connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\inetpub\wwwroot\musik\musik.mdb;"
conn.open connString
    if (Request.QueryString("kategori") = "Titel") then
        sql = "SELECT Titel FROM Hovedtabel WHERE Titel ='" + Request.QueryString("sog") + "'"
    end if
    if (Request.QueryString("kategori") = "Kunstner") then
        sql = "SELECT Kunstner FROM Hovedtabel WHERE Kunstner ='" + Request.QueryString("sog") + "'"
    end if
    if (Request.QueryString("kategori") = "Aar") then
        sql = "SELECT Aar FROM Hovedtabel WHERE Aar ='" + Request.QueryString("sog") + "'"
    end if
        if (Request.QueryString("kategori") = "Genre") then
        sql = "SELECT Genre FROM Hovedtabel WHERE Genre ='" + Request.QueryString("sog") + "'"
    end if
    if (Request.QueryString("kategori") = "Texten") then
        sql = "SELECT Texten FROM Hovedtabel WHERE Texten ='" + Request.QueryString("sog") + "'"
    end if
    if (Request.QueryString("kategori") = "Rytme") then
        sql = "SELECT Rytme FROM Hovedtabel WHERE Rytme ='" + Request.QueryString("sog") + "'"
    end if
    if (Request.QueryString("kategori") = "Beat") then
    sql = "SELECT Beat FROM Hovedtabel WHERE Beat ='" + Request.QueryString("sog") + "'"
    end if
Set rs = conn.execute(sql)
Do Until rs.eof

    'For at vise de records der er i databasen sættes en løkke i gang (Do-Loop), som kører, indtil rs når til sidste post
    ' i forespørgslen (end-of-file, eof)
%>
<tr>
    <td width="38"><%=rs("ID")%>&nbsp;</td>
    <td width="125"><%=rs("Titel")%>&nbsp;</td>
    <td width="224"><%=rs("Kunstner")%>&nbsp;</td>
    <td width="57"><%=rs("Aar")%>&nbsp;</td>
    <td width="226"><%=rs("Texten")%>&nbsp;</td>
  </tr>
<%
      ' Vi viser nu de udtrukne informationer i form af en række links, der alle peger på en redirect-side, hvor
    ' hits på de enkelte links registreres og skrives i databasen.
    ' Ved at sende det enkelte links Id med til redirect-siden, kan vi på sidstnævnte hente den korrekte record ind,
    ' som linket refererer til, og hvis hitantal skal forøges.
    ' Endeligt vises antallet af gange siden er vist i en parentes efter linket.

rs.MoveNext

    ' når det enkelte link er sat ind på siden, flytter vi markøren til næste record i foresprøgslen med rs.MoveNext
Loop

conn.close
    ' Alt der ligger mellem Do og Loop gennemføres som før nævnt indtil vi når slutningen af de udtrukne records,
    ' dvs. til eof.
%>
</table>
</body>
</html>

Håber at der er nogen der hurtigt kan/vil hjælpe!

På forhånd tak
Kongsted
Avatar billede coltau Juniormester
28. februar 2002 - 21:53 #1
I første omgang skal dine + laves om til & i disse linier:

sql = "SELECT Titel FROM Hovedtabel WHERE Titel ='" & Request.QueryString("sog") & "'"

i ASP anvendes &-tegnet til at sammensætte strings
Avatar billede grunken Nybegynder
28. februar 2002 - 21:55 #2
if (Request.QueryString("kategori") = "Texten") then
        sql = "SELECT Texten FROM Hovedtabel WHERE Texten ='" & Request.QueryString("sog") & "'"

fjern alle dine + med &, så tror jeg det holder vand :)
Avatar billede coltau Juniormester
28. februar 2002 - 21:56 #3
Så vil jeg anbefale at du laver en linie som denne:

if (Request.QueryString("sog") <> "") then
  ' Ellers vis det du gør
else
  Response.Write("Angiv søgeord. !")
end if
Avatar billede kongsteddk Nybegynder
28. februar 2002 - 22:08 #4
Det virkede ikke. Og mht. det sidste script, så er det ikke så nødvendigt. Det er til intern brug.
Avatar billede coltau Juniormester
01. marts 2002 - 10:01 #5
Hvor i ligger fejlen. Jeg har oprettet en tabel med indholdet og testet din kode den virker fint når + ændres til &.
Avatar billede kongsteddk Nybegynder
03. marts 2002 - 14:09 #6
Der kommer ikke noget output ud fra tabellen.
Avatar billede coltau Juniormester
04. marts 2002 - 14:59 #7
Så skal man jo se på hvad der er i databasen. jeg oprettede alle felter som tekst-felter og så virkede det.
Avatar billede kongsteddk Nybegynder
04. marts 2002 - 18:42 #8
Har fundet ud af det. Scriptet kræver at kan skriver hele søgeordet. Har du et script som ikke kræver hele ordet for at finde resultater. Fx. hvis man skriver Kim, så finder den de poster med Kim Larsen (m. flere).
Avatar billede coltau Juniormester
05. marts 2002 - 06:24 #9
Hvis du kun vil søge på en del af ordet så kan du anvende SQL-kommandoen LIKE som i dit tilfælde skal se således ud.

if (Request.QueryString("kategori") = "Kunstner") then
  sql = "SELECT Kunstner FROM Hovedtabel WHERE Kunstner LIKE '%" +  Request.QueryString("sog") + "%'"
end if

Læg mærke til at LIKE anvender %-tegn som wildcards - hvis man skriver:

1. kunstner like 'kim%' så får du alle dem der starter med ordet kim
2. kunstner like '%kim%' så får du alle dem der indeholder ordet kim
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

IT-JOB