Avatar billede jonas-i Nybegynder
28. august 2002 - 10:31 Der er 26 kommentarer og
2 løsninger

Search! Keyword skal deles hvis f.eks. det er to ord!

Hey!
Jeg har lavet dette simple search script!
Den henter keyword fra en form i en search.html Mit problem er så bare at når den søger i databasen efter keyword så tager den det man har skrevet i formen som et "ord/keyword" f.eks. "engelsk hest" Det søger den efter i databasen som et ord! Jeg vil gerne have at den søger efter det som to forskellige ord!

Mit script ses her!

<% Response.Buffer = True %>

<%
strKeyword = Trim(Request.Form("Keyword"))

If Len(strKeyword) = 0 Then

Response.Clear
Response.Redirect("rightmain.asp")

Else

strKeyword = Replace(strKeyword,"'","''")

End If


strSQL = "SELECT Id, Emne, Link, Besk, Titel, Karakter, Fag, Name, Email FROM link2 WHERE"
strSQL = strSQL & " (Emne LIKE '%" & strKeyword & "%')"
strSQL = strSQL & " OR (Link LIKE '%" & strKeyword & "%')"
strSQL = strSQL & " OR (Besk LIKE '%" & strKeyword & "%')"
strSQL = strSQL & " OR (Titel LIKE '%" & strKeyword & "%')"
strSQL = strSQL & " OR (Karakter LIKE '%" & strKeyword & "%')"
strSQL = strSQL & " OR (Fag LIKE '%" & strKeyword & "%')"

Set Conn = Server.CreateObject("ADODB.Connection")
Conn.connectionstring = "Provider=SQLOLEDB;Data Source=xxx.xxx.xxx.xxx;Initial Catalog=xxxxxx.dk; User ID=xxxxxx.dk;Password=xxxxx;"

Conn.Open

Set rs = Conn.Execute(strSQL)

If Not (rs.BOF Or rs.EOF) Then

Do While Not rs.EOF

URL = rs("Link")
Besked = rs("Besk")
Titel = rs("Titel")
ID = rs("ID")
Karakter = rs("Karakter")
Fag = rs("Fag")

Link = "<b><a href=answer.asp?nummer=" & ID & " target='blank'>" & Titel & "</a></b>"

Response.Write "<li>" & Link & "</li>" & " <br> Fag: " & Fag & " - Karakter: " & Karakter & " - Tryk på link for beskrivelse :)"

rs.MoveNext
Loop
Else

Response.Write "<li>Desværre din søgning gav intet resultat :("

End If

Conn.Close
Set Conn = Nothing
%>

Pointsne bliver kun givet for et svar der virker! Ellers er jeg lidt ligeglad hvordan i løser mit problem bare det virker :)
Håber på at i har en løsning på forhånd tak :)
Avatar billede nightwitness Nybegynder
28. august 2002 - 11:06 #1
Brug:

split(request("keyword), " ")

og do while loop i mellem dem.
Avatar billede jonas-i Nybegynder
28. august 2002 - 11:09 #2
Vil gerne have at du sætter det ind i koden ellers fatter jeg ikke helt hvad mener bare et eksempel :)
Avatar billede justdoit Nybegynder
28. august 2002 - 11:13 #3
Kigger lige med

:-)
Avatar billede jonas-i Nybegynder
28. august 2002 - 11:25 #4
Har selv prøvet med spilt men kan ikke få det til at virke :/ Hjælp en eller anden :)
Avatar billede eagleeye Praktikant
28. august 2002 - 20:45 #5
Skal alle ord være i en kolonne for at komme med eller skal bare et af dem være der ??
Avatar billede eagleeye Praktikant
28. august 2002 - 21:03 #6
Her er din koden tilrettet så den med OR mellem det alle ord..:


<% Response.Buffer = True %>

<%
strKeyword = Trim(Request.Form("Keyword"))


If Len(strKeyword) = 0 Then

  Response.Clear
  Response.Redirect("rightmain.asp")

Else

  strKeyword = Replace(strKeyword,"'","''")

End If

ordArray = Split(strKeyword, " ")
strSQLWhere = ""
strSQL = "SELECT Id, Emne, Link, Besk, Titel, Karakter, Fag, Name, Email FROM link2 WHERE "
for i = lbound(ordArray) to ubound(ordArray)
  if strSQLWhere <> "" then strSQLWhere = strSQLWhere & " OR "
  strSQLWhere = strSQLWhere & "(Emne LIKE '%" & ordArray(i) & "%')"
next
for i = lbound(ordArray) to ubound(ordArray)
  if strSQLWhere <> "" then strSQLWhere = strSQLWhere & " OR "
  strSQLWhere = strSQLWhere & "(Link LIKE '%" & ordArray(i) & "%')"
next
for i = lbound(ordArray) to ubound(ordArray)
  if strSQLWhere <> "" then strSQLWhere = strSQLWhere & " OR "
  strSQLWhere = strSQLWhere & "(Besk LIKE '%" & ordArray(i) & "%')"
next
for i = lbound(ordArray) to ubound(ordArray)
  if strSQLWhere <> "" then strSQLWhere = strSQLWhere & " OR "
  strSQLWhere = strSQLWhere & "(Title LIKE '%" & ordArray(i) & "%')"
next
for i = lbound(ordArray) to ubound(ordArray)
  if strSQLWhere <> "" then strSQLWhere = strSQLWhere & " OR "
  strSQLWhere = strSQLWhere & "(Karakter LIKE '%" & ordArray(i) & "%')"
next
for i = lbound(ordArray) to ubound(ordArray)
  if strSQLWhere <> "" then strSQLWhere = strSQLWhere & " OR "
  strSQLWhere = strSQLWhere & "(Fag LIKE '%" & ordArray(i) & "%')"
next

Set Conn = Server.CreateObject("ADODB.Connection")
Conn.connectionstring = "Provider=SQLOLEDB;Data Source=xxx.xxx.xxx.xxx;Initial Catalog=xxxxxx.dk; User ID=xxxxxx.dk;Password=xxxxx;"

Conn.Open

Set rs = Conn.Execute(strSQL)

If Not (rs.BOF Or rs.EOF) Then

Do While Not rs.EOF

URL = rs("Link")
Besked = rs("Besk")
Titel = rs("Titel")
ID = rs("ID")
Karakter = rs("Karakter")
Fag = rs("Fag")

Link = "<b><a href=answer.asp?nummer=" & ID & " target='blank'>" & Titel & "</a></b>"

Response.Write "<li>" & Link & "</li>" & " <br> Fag: " & Fag & " - Karakter: " & Karakter & " - Tryk på link for beskrivelse :)"

rs.MoveNext
Loop
Else

Response.Write "<li>Desværre din søgning gav intet resultat :("

End If

Conn.Close
Set Conn = Nothing
%>
Avatar billede justdoit Nybegynder
28. august 2002 - 22:34 #7
Hej, jeg har lige prøvet at bruge det på noget jeg har gang i, men den søger ikke på to ord???

Her er koderne:

<%
strKeyword = Trim(Request.Form("soeg"))


If Len(strKeyword) = 0 Then

  Response.Clear
  Response.Redirect("default.asp")

Else

  strKeyword = Replace(strKeyword,"'","''")

End If

ordArray = Split(strKeyword, " ")
strSQLWhere = ""
strSQL = "SELECT Catalogs.catalogName as UdskrivNavn, Products.ProductID, products.productDesc, Products.ProductName, Products.CatalogID FROM Products, catalogs where Catalogs.catalogNameID = Products.CatalogID"
    strSQL = strSQL & " AND (products.productName LIKE '%" & strKeyword & "%')"
    strSQL = strSQL & " OR (products.productDesc LIKE '%" & strKeyword & "%')"
   
for i = lbound(ordArray) to ubound(ordArray)
  if strSQLWhere <> "" then strSQLWhere = strSQLWhere & " OR "
  strSQLWhere = strSQLWhere & "(Products.ProductName LIKE '%" & ordArray(i) & "%')"
next
for i = lbound(ordArray) to ubound(ordArray)
  if strSQLWhere <> "" then strSQLWhere = strSQLWhere & " OR "
  strSQLWhere = strSQLWhere & "(products.productDesc LIKE '%" & ordArray(i) & "%')"
next

Set con = server.CreateObject("ADODB.Connection")
      Con.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.MapPath("../e-handel/db/database.mdb")

Set rs = Con.Execute(strSQL)
Avatar billede jonas-i Nybegynder
29. august 2002 - 10:46 #8
Tak for dit svar :)
Det ser fint ud men der kommer en fejl jeg ikke kan gennemskue :/
her er den:

Microsoft OLE DB Provider for SQL Server error '80040e14'

Line 1: Incorrect syntax near 'Where'.

/search.asp, line 60

Den kommer når jeg sætter det ind som du har skrevet det!
Plz hjælp så skal du nok få dine points :)
Avatar billede jonas-i Nybegynder
29. august 2002 - 10:51 #9
Hov du skal jo lige have hvad line det er i dit script line 60 denne:

Set rs = Conn.Execute(strSQL)

:)
Avatar billede eagleeye Praktikant
29. august 2002 - 20:56 #10
Doh jeg har stavet et af dine kolonne navne forkert ... Dein kolonne hedder titel og ikke som jeg har skevet title, så prøv at rette denne linie:
  strSQLWhere = strSQLWhere & "(Title LIKE '%" & ordArray(i) & "%')"

Til:
  strSQLWhere = strSQLWhere & "(Titel LIKE '%" & ordArray(i) & "%')"
Avatar billede jonas-i Nybegynder
29. august 2002 - 23:07 #11
Har jeg rettet nu men fejlen er der stadig! HULK :( fatter det ikke :/
Avatar billede eagleeye Praktikant
29. august 2002 - 23:10 #12
Jeg har prøvet din kode på min maskine og det virker fint.. Hvis man ikke angivet et søgeord bliver WHERE tom så prøv at ændre denne linie:

strSQL = "SELECT Id, Emne, Link, Besk, Titel, Karakter, Fag, Name, Email FROM link2 WHERE "

Til disse to:

strSQL = "SELECT Id, Emne, Link, Besk, Titel, Karakter, Fag, Name, Email FROM link2"
if ubound(ordArray) > 0 then strSQL = strSQL & " WHERE "
Avatar billede eagleeye Praktikant
29. august 2002 - 23:13 #13
Er alle kolonner defineret som tekst i databasen ?
Avatar billede jonas-i Nybegynder
30. august 2002 - 10:05 #14
ARGH!!!!!!!!!
Når jeg søger på et ord viser den alle enteries i databasen.... når jeg søger på to ord kommer samme fejl som før :/
Ja ID og Karakter i min database er ikke tekst!
Avatar billede eagleeye Praktikant
03. september 2002 - 14:50 #15
Prøv at ændre:

strSQL = "SELECT Id, Emne, Link, Besk, Titel, Karakter, Fag, Name, Email FROM link2"
if ubound(ordArray) > 0 then strSQL = strSQL & " WHERE "


Til bage igen
strSQL = "SELECT Id, Emne, Link, Besk, Titel, Karakter, Fag, Name, Email FROM link2 WHERE "
Avatar billede eagleeye Praktikant
03. september 2002 - 15:45 #16
prøv også at fjern karakter fra WHERE delen for at se om det evt er den kolonne som giver fejl:

for i = lbound(ordArray) to ubound(ordArray)
'  if strSQLWhere <> "" then strSQLWhere = strSQLWhere & " OR "
'  strSQLWhere = strSQLWhere & "(Karakter LIKE '%" & ordArray(i) & "%')"
next
Avatar billede eagleeye Praktikant
03. september 2002 - 17:25 #17
Du må tjekke på at alle kolonne navne er stavet rigtigt for jeg kan ikke få fejlen frem når jeg bruger koden.
Avatar billede jonas-i Nybegynder
03. september 2002 - 21:02 #18
Har tjekket de foskellige ting nu med intet hjalp :/
Det er godt nok mystisk!
Nu får jeg fjlen lige gyldig hvad jeg søger på! Hvis du vil kan du prøve selv på www.paniktimen.dk
Avatar billede jonas-i Nybegynder
03. september 2002 - 21:04 #19
Hvad system tester du den på?
Den server jeg har siden på kører men win 2000 og microsoft SQL server! Ved ikke om det gør nogen forskel...
Avatar billede eagleeye Praktikant
03. september 2002 - 21:08 #20
Jeg bruger Access database...
Avatar billede eagleeye Praktikant
03. september 2002 - 21:08 #21
Da du havde dette virkede det så uden fejl??

strSQL = "SELECT Id, Emne, Link, Besk, Titel, Karakter, Fag, Name, Email FROM link2 WHERE"
strSQL = strSQL & " (Emne LIKE '%" & strKeyword & "%')"
strSQL = strSQL & " OR (Link LIKE '%" & strKeyword & "%')"
strSQL = strSQL & " OR (Besk LIKE '%" & strKeyword & "%')"
strSQL = strSQL & " OR (Titel LIKE '%" & strKeyword & "%')"
strSQL = strSQL & " OR (Karakter LIKE '%" & strKeyword & "%')"
strSQL = strSQL & " OR (Fag LIKE '%" & strKeyword & "%')"
Avatar billede eagleeye Praktikant
03. september 2002 - 21:17 #22
Ellers kan du prøve at tilføje en kolonne af gang starte med dette:

strSQL = "SELECT Id, Emne, Link, Besk, Titel, Karakter, Fag, Name, Email FROM link2 WHERE "
for i = lbound(ordArray) to ubound(ordArray)
  if strSQLWhere <> "" then strSQLWhere = strSQLWhere & " OR "
  strSQLWhere = strSQLWhere & "(Emne LIKE '%" & ordArray(i) & "%')"
next


og derefter:
strSQL = "SELECT Id, Emne, Link, Besk, Titel, Karakter, Fag, Name, Email FROM link2 WHERE "
for i = lbound(ordArray) to ubound(ordArray)
  if strSQLWhere <> "" then strSQLWhere = strSQLWhere & " OR "
  strSQLWhere = strSQLWhere & "(Emne LIKE '%" & ordArray(i) & "%')"
next
for i = lbound(ordArray) to ubound(ordArray)
  if strSQLWhere <> "" then strSQLWhere = strSQLWhere & " OR "
  strSQLWhere = strSQLWhere & "(Link LIKE '%" & ordArray(i) & "%')"
next
Avatar billede jonas-i Nybegynder
04. september 2002 - 08:16 #23
Da jeg kørte med det gamle virkede det fint :)
Bortset fra at den søgte på det som et ord jo :) men den kom med de rigtige resultater og det hele :)
Men nu prøver jeg lige det du forslog :)
Avatar billede jonas-i Nybegynder
04. september 2002 - 08:24 #24
Selvom jeg prøver med f.eks. kun "Emne" så kommer den med samme fejl :(
Avatar billede nightwitness Nybegynder
04. september 2002 - 10:55 #25
Haha, n00bs :>

Brug det her:

<form method="POST" action="index.asp?mode=submit">
  <p><input type="text" name="Ord" size="20"><input type="submit" value="Søg"></p>
</form>

<%

Set Conn = Server.CreateObject("ADODB.Connection")
Conn.connectionstring = "Provider=SQLOLEDB;Data Source=xxx.xxx.xxx.xxx;Initial Catalog=xxxxxx.dk; User ID=xxxxxx.dk;Password=xxxxx;"

Conn.Open

mode=Request("mode")
If mode="submit" Then


newstring = Request.Form("Ord")

if len(newstring) = 0 Then
Response.Clear
Response.Redirect("index.asp")

Else

newstring = Replace(newstring,"'","''")

End if

newsplit = split(newstring)

for i = lbound(newsplit) to ubound(newsplit)
SQL = "SELECT * FROM link2 WHERE Emne LIKE '%" & newsplit(i) & "%'"
strSQL = strSQL & " OR (Link LIKE '%" & strKeyword & "%')"
strSQL = strSQL & " OR (Besk LIKE '%" & strKeyword & "%')"
strSQL = strSQL & " OR (Titel LIKE '%" & strKeyword & "%')"
strSQL = strSQL & " OR (Karakter LIKE '%" & strKeyword & "%')"
strSQL = strSQL & " OR (Fag LIKE '%" & strKeyword & "%')"

next

Set rs = conn.Execute(SQL)

If not (rs.BOF or rs.EOF) Then

Do while not rs.EOF

URL = rs("Link")
Besked = rs("Besk")
Titel = rs("Titel")
ID = rs("ID")
Karakter = rs("Karakter")
Fag = rs("Fag")

Link = "<b><a href=answer.asp?nummer=" & ID & " target='blank'>" & Titel & "</a></b>"

Response.Write "<li>" & Link & "</li>" & " <br> Fag: " & Fag & " - Karakter: " & Karakter & " - Tryk på link for beskrivelse :)"


rs.movenext
loop

Else
Response.write "Desværre!"
End if

End if
%>
Avatar billede jonas-i Nybegynder
04. september 2002 - 12:18 #26
Weee kanon det virker efter lidt justering! :)
Sorry eagle men pointsne går næsten kun til Nightwitness! Men giver dig 10 for din flittighed :D
TAKKER NightWitness! :D
Avatar billede eagleeye Praktikant
04. september 2002 - 16:40 #27
LOL magen til ***** kode skal man lede længe efter.

Den søger jo efter strKeyword som ikke er defineret for de fleste kolonner.
Den enste kolonne som søges i er Emne og så det enda kun det sidste ord som der blvier søgt efter ......
Avatar billede jonas-i Nybegynder
04. september 2002 - 20:58 #28
Hehe ja det ved jeg godt men har rettet den og nu virker den :) Ham der lavede den var vist lidt doven :)
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