Jag har hittat ett litet fint script för en sökmotor, men det finns en del buggar som jag gärna skulle vilja ha hjälp med.
if LEN(request("keyword"))>=3 then
if request("srch") = "yes" then
dim count, nWord, spWord, andWord, orWord
' set up variables
word=replace(trim(request("keyword")),"'", "''")
' trim spaces and replace the single quote
if instr(word, "and") then
' check Boolean of and
andW = true
Word = split(word,"and")
'now get all the words separated by and into an array
for i = 0 to ubound(andWord)
if i <> ubound(andWord) then
kW = "'%" & andWord(i) & "%'"
'set up sql statement
elseif i = ubound(andWord) then
' when it hits the end
kW = kW &"'%" & andWord(i) & "%' and "
' add the last sql statement
end if
next
elseif instr(word,"or") then
orW = true
orWord = split(word,"or")
for i = 0 to ubound(orWord)
if i <> ubound(orWord) then
kW = "'%" & orWord(i) & "%' and "
elseif i = ubound(orWord) then
kW = kW & "'%" & orWord(i) & "%'"
end if
next
elseif instr(word," ") then
spW = true
spWord = split(word," ")
for i = 0 to ubound(spWord)
if i <> ubound(spWord) then
kW = "'%" & spWord(i) & "%' or "
elseif i = ubound(spWord) then
kW = kW & "'%" & spWord(i) & "%'"
end if
next
else
'There is no Boolean value or Blank in the search word<br>
kW = "'%" & word & "%'"
end if
Problem:
Om jag försöker att använda mig av and då kommer detta medellande:
Körningsfel i Microsoft VBScript (0x800A000D)
Inkompatibla typer: 'ubound'
/Hemsidor/Idrottsportalen/Idrottsportalen_filer/Forum/template.asp, line 52
rad 53 är for i = 0 to ubound(andWord)
Man skall också kunna skriva text rakt in t ex "fotboll är kul", men då blir det ett annat fel, den visar allt som finns i databasen.
Några tips?
andWord = split(word,"and")
for i = 0 to ubound(andWord)
...men då uppstod nästa fel.
Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[Microsoft][Drivrutin för ODBC Microsoft Access] Syntaxfel
(operator saknas) i frågeuttrycket 'rubrik like '%boll %''% rund%'
and or inlagg like '%boll %''% rund%' and'.
/Hemsidor/Idrottsportalen/Idrottsportalen_filer/Forum/template.asp, line 97
'SQLEN
sql = "select * from t_forum where rubrik like " & kW & " or inlagg like " & kW
Ursäkta, jag missförstod.
Jag hittade lite fel i 'and'functionen så den sql:en blir
select * from t_forum where rubrik like '%boll %' and '% rund%' or inlagg like '%boll %' and '% rund%'
..och den ser ju rätt ut nu och ger rätt antal träffar.
när det gäller 'or' functionen:
select * from t_forum where rubrik like '%boll %' or '% rund%' or inlagg like '%boll %' or '% rund%'
..så ser den också rätt ut, men den tar fram allt i databasen.
När det gäller den sista, om jag söker på 'boll hand rund'
select * from t_forum where rubrik like '%boll h%' and '% rund%' or inlagg like '%boll h%' and '% rund%'
..då ser man att den hugger av andra ordet.
Frågan är väll också om det skall vara operatorn 'and', det kanske skulle byttas mot 'or'?
Om jag bara söker på ett ord 'handboll'
else
'There is no Boolean value or Blank in the search word<br>
kW = "'%" & word & "%'"
end if
'SQL
select * from t_forum where rubrik like '%h%' and '%boll%' or inlagg like '%h%' and '%boll%'ORDER BY rubrik
och här ser det lustigt ut.
[REDIGERAT]
Om jag använder sokördet 'fotboll and mål' visas allt i databasen
Om jag använder sokördet 'fotboll or mål' visas allt i databasen
Om jag använder sokördet 'fotboll mål' visas två poster, vilket torde vara korrekt.
Någonting lustigt gör att ifallen and/or så tas allting fram.
Jag ger mig inte på koden, men har du uppmärksammat vad det står i ... like '%boll h%' and '% rund%' or...?
När du söker på "boll hand rund" delas det "boll h and rund", och det vill du säkert inte. Då innebär säkert det extra and att du får med alla poster på något sätt.
I fallet "handboll", lättare se där, ger alla poster med "h och boll eller med h", dvs du får säkert inte alla, men många.
Du har säkert rätt, men jag har kommit på felet, men vet inte hur jag skall fixa det.
Titta här:
if instr(word, "and") then
Om jag nu skriver handboll, så hittar den ju 'and' och därför
så måste ju resultatet bli '%h%' AND '% AND boll%'
osv.
Det är vad jag förstår det stora problemet.
Hur bör jag lösa det?
Jag minns inte var jag hittade scriptet, det var för något år sedan.
Det jag har bekymmer med är ju att bygga upp strängen, då har kanske någon url där jag kan kolla om det passar?
Tack för att du inte ger upp @nders.
Kodsnutten ser ut:
if instr(word, " and ") then
andW = true
andWord = split(word," and ")
for i = 0 to ubound(andWord)
if i <> ubound(andWord) then
kW = "'%" & andWord(i) & "%' and "
elseif i = ubound(andWord) then
kW = kW &"'%" & andWord(i) & "%'"
end if
next
Om jag nu söker på handboll och fotboll så blir sql:en
select * from t_forum where rubrik like '%boll %' and '% fotboll%' or inlagg like '%boll %' and '% fotboll%'ORDER BY rubrik
Som du ser så klipper den av hand (ibland så finns h:et med)
Den klipper tydligen ord som innehåller 'and' bol och kul går bra.
Hurra , jag har lyckats nu, jag utgick ifrån vad @nders påpekade, och petade lite, sen har jag fått det mesta att fungera.
Vad som inte fungerar är om man har dessa sökord:
fotboll and handboll or kulspel
Då blir SQL:en
select * from t_forum where rubrik like '%fotboll%' and '%
handboll or kulspel%' or inlagg like '%fotboll%' and '%handboll or
kulspel%' ORDER BY rubrik DESC
...men det är kanske att begära för mycket?
273 ms totalt · 4 externa anrop · v20260731065814-full.e96017d9