Avatar billede sapworld Nybegynder
06. oktober 2004 - 09:32 Der er 12 kommentarer og
2 løsninger

Baggrundfarve på den tekst der er søgt på

Jeg bruger nedenstående script til at søge i en Access database. Jeg har et par stedet set at man kan gøre sådan at det ord der er søgt på har en baggrundsfarve, eller er en anden farve, så det er nemt at genkende, når resultatet på søgningen listes. Er det muligt at tilføje på dette script??

Script:
<%
' 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_form_user.asp")
    Else
    ' Hvis der er skrevet i feltet
    strKeyword = Replace(strKeyword,"'","''")
End If

' Opbygger en dynamisk SQL streng
strSQL = "SELECT ID, module, tc, subject, description, initials, catagory FROM tricks WHERE"
strSQL = strSQL & " (module LIKE '%" & strKeyword & "%')"
strSQL = strSQL & " OR (tc LIKE '%" & strKeyword & "%')"
strSQL = strSQL & " OR (subject LIKE '%" & strKeyword & "%')"
strSQL = strSQL & " OR (description LIKE '%" & strKeyword & "%')"
strSQL = strSQL & " OR (initials LIKE '%" & strKeyword & "%')"

' åbner DBen
Set myConn = Server.CreateObject("ADODB.Connection")
myConn.Open "database"

' Skaber DSNLess forbindelse til DBen
DBQ="&Server.MapPath("search.mdb")

' 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><b>Search Result</b></p>"
    Response.Write "<table border=1>"
    Response.Write "<tr><td><b>Module</b></td><td><b>Transaction Code</b></td><td><b>Subject</b></td><td><b>Description</b></td><td><b>Initials</b></td></tr>"
    Do While Not rs.EOF
        Response.Write "<tr><td>" & rs("module") & "</td>"
        Response.Write "<td>" & rs("tc") & "</td>"
        Response.Write "<td>" & rs("subject") & "</td>"
        Response.Write "<td>" & rs("description") & "</td>"
        Response.Write "<td>" & rs("initials") & "</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
%>

Hilsen

Kim
Avatar billede steen_hansen Forsker
06. oktober 2004 - 09:40 #1
Kigger med
Avatar billede eagleeye Praktikant
06. oktober 2004 - 09:42 #2
Ja du kan jo lave en replace som sætte nogle tags omkring ord enten <font> tages eller <span> så man kan give dem en class hvor formatet er. Eks:

Response.Write "<td>" & replace(rs("description"),strKeyword,"<font color=""red""><i>" & strKeyword & "</i></font>") & "</td>"
Avatar billede eagleeye Praktikant
06. oktober 2004 - 09:44 #3
Du kan gøre det for hver linje. Hvis det er det samme du vil gøre flere gange kan du jo lave en lille funktion som indeholder koden så du kun skal rette teksten et sted:

function highlight(strtxt,ord)
  highlight=place(strtxt,ord,"<font color=""red""><i>" & ord & "</i></font>")
end function


og kalde funktionen sådan her:

Response.Write "<td>" & highlight(rs("description"),strKeyword) & "</td>"
Avatar billede eagleeye Praktikant
06. oktober 2004 - 09:45 #4
hmm:  place i funktionen skal være replace :)
Avatar billede glen5000 Nybegynder
06. oktober 2004 - 09:46 #5
Tror det kan gøres således

Response.Write "<tr><td>" & replace (rs("module"),strKeyword,"<font color='red'>"& strKeyword &"</font>") & "</td>"
Response.Write "<tr><td>" & replace (rs("tc"),strKeyword,"<font color='red'>"& strKeyword &"</font>") & "</td>"
Response.Write "<tr><td>" & replace (rs("subject"),strKeyword,"<font color='red'>"& strKeyword &"</font>") & "</td>"
Response.Write "<tr><td>" & replace (rs("description"),strKeyword,"<font color='red'>"& strKeyword &"</font>") & "</td>"
Response.Write "<tr><td>" & replace (rs("initials"),strKeyword,"<font color='red'>"& strKeyword &"</font>") & "</td>"

Hilsen Glen
Avatar billede sapworld Nybegynder
06. oktober 2004 - 10:38 #6
Begge løsninger virker fint, men jeg vælger nok at lave en function (kode nemmere at overskue), så pointfordelingen er lagt lidt "skævt". Håber det er ok
Tak for hjælpen begge :)
/Kim
Avatar billede sapworld Nybegynder
06. oktober 2004 - 10:48 #7
Søgningen er ikke case sensitive, men det er "farvelægningen" - kan det ændres så "farvelægningen" ikke er case sensitive?
Avatar billede hiks Nybegynder
06. oktober 2004 - 11:21 #8
du laver dem bare samme format i funktionen...

function highlight(strtxt,ord)
  highlight=place(LCASE(strtxt),LCASE(ord),"<font color=""red""><i>" & ord & "</i></font>")
end function

/hiks
Avatar billede sapworld Nybegynder
06. oktober 2004 - 11:33 #9
Takker - Virker fint. Alt ændres dog til det man har indtastet. Dvs. Hvis man søger på INFORM, så fanges alt, men f.eks. inform ændres til INFORM.
/Kim
Avatar billede hiks Nybegynder
06. oktober 2004 - 11:33 #10
det var så lige re-place! :o)

function highlight(strtxt,ord)
  highlight = replace(LCASE(strtxt),LCASE(ord),"<font color=""red""><i>" & ord & "</i></font>")
end function
Avatar billede hiks Nybegynder
06. oktober 2004 - 11:35 #11
det kommer an på hvor du har indsat din LCase gør det ikke? Hvis du nøjes med at sætte det ind der hvor jeg gjorde det burde den ikke erstatte 'ord' med det store men hvis du gør det inden du kalder funktionen så har du "balladen" - eller hur?

/hiks
Avatar billede sapworld Nybegynder
06. oktober 2004 - 11:38 #12
Jeg har sat det ind, som du har vist, og den ændrer alt til det der er søgt på.
/Kim
Avatar billede eagleeye Praktikant
06. oktober 2004 - 12:13 #13
Lad være med at bruge lcase. Den ødelægger hele strengen.

den lave alle store bogstaver om til små. det er træls at se på. specielt når man læser noget tekst. hvis man for forkortelser er det ofte med stort som eof og bof!

Fortæl derimod replace den skal ignore case:
highlight=replace(strtxt,ord,"<font color=""red""><i>" & ord & "</i></font>",1,-1,1)

men problmeet med replace er den søger efter en streng og udskrifter den med en anden streng. Hvis du har skrever InFoRm som søgeord vil det komme ind de steder hvor "inform" findes i teksten, vil du beholde teksten med den case den har i forvejen kan du bruge regular expression til det. Så funktion bliver i stil med:


Function highlight(strInput,findStr)
  Set objReg = New RegExp
  objReg.Global = true
  objReg.IgnoreCase = True
  objReg.Pattern = "("&findStr&")"
  highlight = objReg.Replace(strInput, "<font color=""red"">$1</font>")
  Set objReg = Nothing
End Function


Alternativ skal man med streng fønktioner søge efter søgeordet klikke det ud insætte det ord man fandt med <font> tags omkring og klik det ind i strengen igen.
Avatar billede sapworld Nybegynder
07. oktober 2004 - 11:55 #14
Din function virker perfekt - tak for det :)

/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