totalpc
(4.948 point. Point ude: 230)
Parameterisering af databasekald med ASP og ADO - igen
Jeg prøver at benytte mig af ovenstående, men kan ikke få det til at virke med mit søgescript.
1. hjælp til at få det til at virke
2. Når det virker, er ting som
txtSearch = request("search")
txtSearch = Replace(txtSearch,"'","")
så nødvendige?
Jeg har nok rodet lidt meget rundt i connectionstring kaldet, så ret mig endelig.
<!-- METADATA TYPE="typelib" uuid="00000205-0000-0010-8000-00AA006D2EA4" -->
<table>
<tr>
<td>
Indtast et eller flere søgeord adskilt af mellemrum. Husk at vælge om du vil søge efter et eller alle ord.
</td>
<tr>
</table>
<%
checkbox=Request("checkbox")
radiotype=Request("radiotype")
%>
<table border="0" width="400" cellpadding="0" style="border-collapse: collapse">
<tr>
<td class="broed">
<form method="POST" action="?page=search" style="padding: 0; float:left; height: 0; text-align:left">
<input value="<%=request.form("search")%>" type="text" name="search" size="18"><br>
<input type="radio" name="radiotype" value="typeOR" <% if (radiotype="typeOR" AND request.form("search") = "") OR (radiotype="" AND request.form("search") = "") OR radiotype="typeOR" then %> checked <% else %><% end if %>> søg efter et af ordene <br>
<input type="radio" name="radiotype" value="typeAND" <% if (radiotype="typeAND" AND request.form("search") = "") OR (radiotype="typeAND") then %> checked <% else %><% end if %>> resultatet skal indeholde samtlige ord <br>
<br>Vælg kategorier der skal søges i:<br>
<input type="checkbox" name="checkbox" value="3" <% if contains(checkbox,"3") or request.form("search") ="" then %> checked<% end if %>> Jeg <br>
<input type="checkbox" name="checkbox" value="4" <% if contains(checkbox,"4") or request.form("search") ="" then %> checked<% end if %>> Jeg <br>
<input type="checkbox" name="checkbox" value="5" <% if contains(checkbox,"5") or request.form("search") ="" then %> checked<% end if %>> Jeg <br>
<input type="checkbox" name="checkbox" value="8" <% if contains(checkbox,"8") or request.form("search") ="" then %> checked<% end if %>> len <br>
<input type="checkbox" name="checkbox" value="21" <% if contains(checkbox,"21") or request.form("search") ="" then %> checked<% end if %>> åde <br>
<input type="checkbox" name="checkbox" value="22" <% if contains(checkbox,"22") or request.form("search") ="" then %> checked<% end if %>> ronik <br>
<input type="checkbox" name="checkbox" value="23" <% if contains(checkbox,"23") or request.form("search") ="" then %> checked<% end if %>> rer <br>
<input type="checkbox" name="checkbox" value="24" <% if contains(checkbox,"24") or request.form("search") ="" then %> checked<% end if %>> ng <br>
<input type="checkbox" name="checkbox" value="26" <% if contains(checkbox,"26") or request.form("search") ="" then %> checked<% end if %>> g <br>
<input type="checkbox" name="checkbox" value="27" <% if contains(checkbox,"27") or request.form("search") ="" then %> checked<% end if %>> ere <br>
<input type="checkbox" name="checkbox" value="28" <% if contains(checkbox,"28") or request.form("search") ="" then %> checked<% end if %>> et <br>
<input type="checkbox" name="checkbox" value="29" <% if contains(checkbox,"29") or request.form("search") ="" then %> checked<% end if %>> søges <br>
<input type="checkbox" name="checkbox" value="30" <% if contains(checkbox,"30") or request.form("search") ="" then %> checked<% end if %>> olm <br>
<input type="checkbox" name="checkbox" value="31" <% if contains(checkbox,"31") or request.form("search") ="" then %> checked<% end if %>> lyst <br><br>
<input name="send" align="top" type="submit" vale="Søg">
</form>
</td>
</tr>
</table>
<%
'Funktion til at finde ud f om en checkbox findes
function contains(str, substr)
contains = instr("," & replace(str," ","") & ",", "," & substr & ",") > 0
end function
if checkbox ="" and request.form("search") <> "" then
response.write "<p align=center><FONT size=1 face=verdana color=red><b>Der skal søges i mindst en kategori</b></font></p>"
else
If request.form("search") <> "" Then
'Er dette nødvendigt ?
txtSearch = request("search")
txtSearch = Replace(txtSearch,"'","")
'Opbyg where parametre for hvert søgeord
searchtext = split(txtsearch, " ")
for each item in searchtext
if trim(item) <> "" then
if request("radiotype") = "typeOR" then
sql1 = sql1 & "m.GuestBookID = g.ID AND ( (GuestBookID IN ( "& checkbox &" ) AND PATINDEX('%" & item& "%',Message)>0 )) OR "
sql2 = sql2 & "s.MessagesID = m.ID AND m.GuestBookID = g.ID AND ( ( m.GuestBookID IN( "& checkbox &" ) AND PATINDEX('%" & item & "%',s.svar)>0)) OR "
elseif request("radiotype") = "typeAND" then
sql1 = sql1 & "m.GuestBookID = g.ID AND ( (GuestBookID IN ( "& checkbox &" ) AND PATINDEX('%" & item& "%',Message)>0 )) AND "
sql2 = sql2 & "s.MessagesID = m.ID AND m.GuestBookID = g.ID AND ( ( m.GuestBookID IN( "& checkbox &" ) AND PATINDEX('%" & item & "%',s.svar)>0)) AND "
End if
end if
next
'Fjern OR eller AND i slutningen
if request("radiotype") = "typeOR" then
sql1 = left(sql1,len(sql1)-len(" OR "))
sql2 = left(sql2,len(sql2)-len(" OR "))
elseif request("radiotype") = "typeAND" then
sql1 = left(sql1,len(sql1)-len(" AND "))
sql2 = left(sql2,len(sql2)-len(" AND "))
End If
SQL = "SELECT 'MESSAGE' AS [Kategori], m.ID, m.ID AS [MessageID], m.Message AS [tekst], m.GuestBookID AS [MainID], m.Name AS [Navn], m.PostedTime, g.GuestBookName FROM [dbo].[TblMessages] m, [dbo].[TblGuestBooks] g WHERE ? UNION SELECT 'SVAR' AS [Kategori], s.svarID AS [ID], m.ID AS [MessageID], svar as [tekst], s.MessagesID AS [MainID], s.navn AS [Navn], s.PostedTime, g.GuestBookName FROM [dbo].[T_Svar] s, [dbo].[TblMessages] m, [dbo].[TblGuestBooks] g WHERE s.MessagesID = m.ID AND m.GuestBookID = g.ID AND ? ORDER BY 3, PostedTime ASC"
Set CString = Server.CreateObject("ADODB.Connection")
cString.open "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
function GetCommand(sql)
dim cmd
set cmd = Server.CreateObject("ADODB.Command")
set cmd.ActiveConnection = cString
cmd.CommandText = sql
cmd.CommandType = adCmdText
set GetCommand = cmd
end function
Set cmd = GetCommand(sql)
set rs = cmd.Execute(, array(sql1,sql2))
if rs.eof then
response.write "<p align=center><FONT size=1 face=verdana><b>Ingen resultat af søgningen</b></font></p>"
else
%>
<br>
<table width="100%">
<tr>
<TD>Søgeresultat herunder. Pt kun til test. Når testen er færdig skal man kunne klikke på teksten og komme til det indlægget/svaret!</td>
</tr>
</table>
<br>
<table width="100%">
<tr>
<TD width="10%">Type</td><TD width="10%">Kategori</td><TD width="45%">Tekst</td><TD width="15%">Dato</td><TD width="20%">Navn</td>
</tr>
</table>
<%
Do While not rs.EOF
%>
<table width="100%">
<tr>
<%
if rs("kategori") = "SVAR" then
kategori="Svar til indlæg"
elseif rs("kategori") = "MESSAGE" then
kategori="Indlæg"
End If
response.write "<td width=""10%"">" & Kategori &"</TD>"
response.write "<td width=""10%"">" & rs("guestbookname") &"</TD>"
response.write "<td width=""45%"">" & rs("tekst") &"</a></TD>"
'response.write "<td width=""45%""><a href=""#"" >" & Replace(Left(rs("tekst"),80), "<br>", " ") &"</a></TD>"
response.write "<td width=""15%"">" & FormatDateTime(rs("PostedTime"), vbShortDate) &"</TD>"
response.write "<td width=""20%"">" & rs("navn") &"</TD>"
response.write "<HR>"
rs.MoveNext
Loop
%>
</TR>
</table>
<%
End If
RS.Close
Set RS = Nothing
End if
End If
%>
Skrevet tir. d. 12. juli 2011 kl. 20:47:32| #1
PT står der stadig ? når jeg laver en response.write sql
Skrevet tir. d. 12. juli 2011 kl. 21:08:29| #2
replace af quotes er ikke noedvendigt og vil resultere i forkerte data naar man bruger parameters
Skrevet tir. d. 12. juli 2011 kl. 21:09:01| #3
koden er lidt stor at gennemskue
Skrevet tir. d. 12. juli 2011 kl. 21:24:49| #4
Jeg har fjernet replace af quotes.
Skal jeg prøve at rydde lidt ud i det urelevante for spørgsmålet?
Skrevet tir. d. 12. juli 2011 kl. 21:43:40| #5
Du har fået vendt rundt på koncpetet med parametre. Du kan ikke indsætte en del-SQL-sætning som en parameter til en SQL-sætning og din måde at opbygge del-SQL-sætningerne på er umiddelbart åben for SQL-injections.
Jeg ved ikke hvad PATINDEX SQL-kommandoen gør (det kan være du lige kan forklare det kort?), men du skal i det mindste benytte ADO Command-parametre som input til den funktion.
Dine checklister et andet angrebspunkt i din SQL-sætningsopbygning. Optimalt set (fra et sikkerhedsmæssigt synspunkt) opbygger du en parameter-streng og en tilhørende liste af værdier til dine IN SQL-opslag. Eksempelvis skal en checklist med værdierne 1,4,6,7 omdannes til en streng ("?,?,?,?") som sammensættes med SQL-sætningen, samt et array med værdierne (dvs. array(1,4,6,7)), hvor arrayets værdier tilføjes den samlede parameterliste i KRONOLOGISK orden...
Spørgsmålet er, om du ikke ville få lettere ved at overskue tingene, hvis du splittede opslagene lidt op, og lavede subqueries ud af noget af det (jeg kan dog ikke helt gennemskue om og hvordan pt.)...?
Skrevet tir. d. 12. juli 2011 kl. 22:11:41| #6
Puha....tror lige jeg læser din guide igen i morgen tidlig og kigger det hele igen med friske øjne.
Pathindex finder blot startpositionen for en string og så bruger jeg den bare sådan at hvis den er større end 0 har den fundet søgeordet!
Skrevet tir. d. 12. juli 2011 kl. 22:23:04| #7
Jeg har prøvet at tilpasse din kode (men ikke testet det!), så den forsøger at tage højde for de ting jeg nævner. Se om du kan bruge det til noget:
<!-- METADATA TYPE="typelib" uuid="00000205-0000-0010-8000-00AA006D2EA4" -->
<table>
<tr>
<td>
Indtast et eller flere søgeord adskilt af mellemrum. Husk at vælge om du vil søge efter et eller alle ord.
</td>
<tr>
</table>
<%
checkbox=Request("checkbox")
radiotype=Request("radiotype")
%>
<table border="0" width="400" cellpadding="0" style="border-collapse: collapse">
<tr>
<td class="broed">
<form method="POST" action="?page=search" style="padding: 0; float:left; height: 0; text-align:left">
<input value="<%=request.form("search")%>" type="text" name="search" size="18"><br>
<input type="radio" name="radiotype" value="typeOR" <% if (radiotype="typeOR" AND request.form("search") = "") OR (radiotype="" AND request.form("search") = "") OR radiotype="typeOR" then %> checked <% else %><% end if %>> søg efter et af ordene <br>
<input type="radio" name="radiotype" value="typeAND" <% if (radiotype="typeAND" AND request.form("search") = "") OR (radiotype="typeAND") then %> checked <% else %><% end if %>> resultatet skal indeholde samtlige ord <br>
<br>Vælg kategorier der skal søges i:<br>
<input type="checkbox" name="checkbox" value="3" <% if contains(checkbox,"3") or request.form("search") ="" then %> checked<% end if %>> Jeg <br>
<input type="checkbox" name="checkbox" value="4" <% if contains(checkbox,"4") or request.form("search") ="" then %> checked<% end if %>> Jeg <br>
<input type="checkbox" name="checkbox" value="5" <% if contains(checkbox,"5") or request.form("search") ="" then %> checked<% end if %>> Jeg <br>
<input type="checkbox" name="checkbox" value="8" <% if contains(checkbox,"8") or request.form("search") ="" then %> checked<% end if %>> len <br>
<input type="checkbox" name="checkbox" value="21" <% if contains(checkbox,"21") or request.form("search") ="" then %> checked<% end if %>> åde <br>
<input type="checkbox" name="checkbox" value="22" <% if contains(checkbox,"22") or request.form("search") ="" then %> checked<% end if %>> ronik <br>
<input type="checkbox" name="checkbox" value="23" <% if contains(checkbox,"23") or request.form("search") ="" then %> checked<% end if %>> rer <br>
<input type="checkbox" name="checkbox" value="24" <% if contains(checkbox,"24") or request.form("search") ="" then %> checked<% end if %>> ng <br>
<input type="checkbox" name="checkbox" value="26" <% if contains(checkbox,"26") or request.form("search") ="" then %> checked<% end if %>> g <br>
<input type="checkbox" name="checkbox" value="27" <% if contains(checkbox,"27") or request.form("search") ="" then %> checked<% end if %>> ere <br>
<input type="checkbox" name="checkbox" value="28" <% if contains(checkbox,"28") or request.form("search") ="" then %> checked<% end if %>> et <br>
<input type="checkbox" name="checkbox" value="29" <% if contains(checkbox,"29") or request.form("search") ="" then %> checked<% end if %>> søges <br>
<input type="checkbox" name="checkbox" value="30" <% if contains(checkbox,"30") or request.form("search") ="" then %> checked<% end if %>> olm <br>
<input type="checkbox" name="checkbox" value="31" <% if contains(checkbox,"31") or request.form("search") ="" then %> checked<% end if %>> lyst <br><br>
<input name="send" align="top" type="submit" vale="Søg">
</form>
</td>
</tr>
</table>
<%
'Funktion til at finde ud f om en checkbox findes
function contains(str, substr)
contains = instr("," & replace(str," ","") & ",", "," & substr & ",") > 0
end function
function GetCommand(sql)
dim cmd
set cmd = Server.CreateObject("ADODB.Command")
set cmd.ActiveConnection = cString
cmd.CommandText = sql
cmd.CommandType = adCmdText
set GetCommand = cmd
end function
function checkboxParamString(checkbox)
dim u,i,tmp
tmp = ""
u = ubound(split(checkbox,","))
for i = 0 to u
if len(tmp) > 0 then tmp = tmp & ","
tmp = tmp & "?"
next
checkboxParamString = tmp
end function
' Tilføj data i slutningen af arrayet arr.
' Hvis appendData er et array, tilføjes alle værdier i
' appendData til arr.
sub appendParams(byref arr, appendData)
dim lenNewArr
dim idx, uba
if isArray(appendData) then
lenNewArr = ubound(appendData) + 1
if lenNewArr > 0 then
uba = ubound(arr)
redim preserve arr(uba + lenNewArr)
for idx = 1 to lenNewArr
arr(uba + idx) = appendData(idx - 1)
next
end if
else
redim preserve arr(ubound(arr) + 1)
arr(ubound(arr) + 1) = appendData(idx-1)
end if
end sub
if checkbox ="" and request.form("search") <> "" then
response.write "<p align=center><FONT size=1 face=verdana color=red><b>Der skal søges i mindst en kategori</b></font></p>"
else
If request.form("search") <> "" Then
'Er dette nødvendigt ?
txtSearch = request("search")
txtSearch = Replace(txtSearch,"'","")
'Opbyg where parametre for hvert søgeord
if request("radiotype") = "typeOR" then
SearchTypeKeyword = " OR "
else
SearchTypeKeyword = " AND "
end if
params1 = array()
params2 = array()
searchtext = split(txtsearch, " ")
for each item in searchtext
if trim(item) <> "" then
if len(sql1) > 0 then sql1 = sql1 & SearchTypeKeyword
sql1 = sql1 & _
"m.GuestBookID = g.ID " & _
"AND ((GuestBookID IN ("& checkboxParamString(checkbox) &") " & _
"AND PATINDEX('%' + ? + '%',Message)>0 ))"
call appendParams(params1, split(checkbox,","))
call appendParams(params1, item)
if len(sql1) > 0 then sql2 = sql2 & SearchTypeKeyword
sql2 = sql2 & _
"s.MessagesID = m.ID " & _
"AND m.GuestBookID = g.ID " & _
"AND ((m.GuestBookID IN("& checkboxParamString(checkbox) &") " & _
"AND PATINDEX('%' + ? + '%',s.svar)>0))"
call appendParams(params2, split(checkbox,","))
call appendParams(params2, item)
end if
next
SQL = "SELECT " & _
"'MESSAGE' AS [Kategori], " & _
"m.ID, m.ID AS [MessageID], " & _
"m.Message AS [tekst], " & _
"m.GuestBookID AS [MainID], " & _
"m.Name AS [Navn], " & _
"m.PostedTime, " & _
"g.GuestBookName " & _
"FROM " & _
"[dbo].[TblMessages] m, " & _
"[dbo].[TblGuestBooks] g " & _
"WHERE " & _
sql1 & " " & _
"UNION " & _
"SELECT " & _
"'SVAR' AS [Kategori], " & _
"s.svarID AS [ID], " & _
"m.ID AS [MessageID], " & _
"svar as [tekst], " & _
"s.MessagesID AS [MainID], " & _
"s.navn AS [Navn], " & _
"s.PostedTime, " & _
"g.GuestBookName " & _
"FROM " & _
"[dbo].[T_Svar] s, " & _
"[dbo].[TblMessages] m, " & _
"[dbo].[TblGuestBooks] g " & _
"WHERE " & _
"s.MessagesID = m.ID " & _
"AND m.GuestBookID = g.ID " & _
"AND " & _
sql2 & " " & _
"ORDER BY " & _
"3, " & _
"PostedTime ASC"
Set CString = Server.CreateObject("ADODB.Connection")
cString.open "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
params = array()
call appendParams(params, params1)
call appendParams(params, params2)
Set cmd = GetCommand(sql)
set rs = cmd.Execute(, params)
if rs.eof then
response.write "<p align=center><FONT size=1 face=verdana><b>Ingen resultat af søgningen</b></font></p>"
else
%>
<br>
<table width="100%">
<tr>
<TD>Søgeresultat herunder. Pt kun til test. Når testen er færdig skal man kunne klikke på teksten og komme til det indlægget/svaret!</td>
</tr>
</table>
<br>
<table width="100%">
<tr>
<TD width="10%">Type</td><TD width="10%">Kategori</td><TD width="45%">Tekst</td><TD width="15%">Dato</td><TD width="20%">Navn</td>
</tr>
</table>
<%
Do While not rs.EOF
%>
<table width="100%">
<tr>
<%
if rs("kategori") = "SVAR" then
kategori="Svar til indlæg"
elseif rs("kategori") = "MESSAGE" then
kategori="Indlæg"
End If
response.write "<td width=""10%"">" & Kategori &"</TD>"
response.write "<td width=""10%"">" & rs("guestbookname") &"</TD>"
response.write "<td width=""45%"">" & rs("tekst") &"</a></TD>"
'response.write "<td width=""45%""><a href=""#"" >" & Replace(Left(rs("tekst"),80), "<br>", " ") &"</a></TD>"
response.write "<td width=""15%"">" & FormatDateTime(rs("PostedTime"), vbShortDate) &"</TD>"
response.write "<td width=""20%"">" & rs("navn") &"</TD>"
response.write "<HR>"
rs.MoveNext
Loop
%>
</TR>
</table>
<%
End If
RS.Close
Set RS = Nothing
End if
End If
%>
Der kan helt sikkert stadig justeres på nogle ting for at gøre det mere overskueligt, men betragt dette som et beta foreslag ;-)
Skrevet ons. d. 13. juli 2011 kl. 17:40:52| #8
Altså jeg ved ikke om du gider hjælpe mig færdig, men jeg er langt ude over mine evner føler jeg :)
Ovenstående giver denne fejl:
ADODB.Command error '800a0bb9'
Arguments are of the wrong type, are out of acceptable range, or are in conflict with one another.
/sql/test/test.asp, line 181
Men der mangler jo også noget af where claus'en
SELECT 'MESSAGE' AS [Kategori], m.ID, m.ID AS [MessageID], m.Message AS [tekst], m.GuestBookID AS [MainID], m.Name AS [Navn], m.PostedTime, g.GuestBookName FROM [dbo].[TblMessages] m, [dbo].[TblGuestBooks] g WHERE UNION SELECT 'SVAR' AS [Kategori], s.svarID AS [ID], m.ID AS [MessageID], svar as [tekst], s.MessagesID AS [MainID], s.navn AS [Navn], s.PostedTime, g.GuestBookName FROM [dbo].[T_Svar] s, [dbo].[TblMessages] m, [dbo].[TblGuestBooks] g WHERE s.MessagesID = m.ID AND m.GuestBookID = g.ID AND ORDER BY 3, PostedTime ASC
Jeg går udfra at det slet ikke kan sammenlignes sikkerhedsmæssig replace funktionen og så det at bruge command objektet? For det andet forstår jeg...det her er lidt langhåret :)
Skrevet ons. d. 13. juli 2011 kl. 17:54:02| #9
Det skal jeg nok hjælpe med. Jeg skal lige have koden opdelt i nogle flere funktioner som jeg kan teste særskilt og så vender jeg tilbage...
Umiddelbart ser det ud til at der ikke er blevet indtastet nogle søgekriterier (eller aflæsning af søgetekst-feltet ikke er gået godt).
Udfordringen ved at bruge replace på input er, at det er svært at gardere sig mod alle de idéer ondsindede brugere af dit site kan finde på at kaste efter din kode. Command-objektet håndterer alle disse problemer for dig, så det ville jo være fjollet ikke at tage imod dét tilbud! :-)
Skrevet ons. d. 13. juli 2011 kl. 18:34:04| #10
Jeg har fedtet lidt med koden og jeg er kommet frem til flg. kode. Prøv om det fungerer for dig og giv mig en melding:
<!-- METADATA TYPE="typelib" uuid="00000205-0000-0010-8000-00AA006D2EA4" -->
<%
'Funktion til at finde ud f om en checkbox findes
function contains(str, substr)
contains = instr("," & replace(str," ","") & ",", "," & substr & ",") > 0
end function
function GetCommand(sql)
dim cmd
set cmd = Server.CreateObject("ADODB.Command")
set cmd.ActiveConnection = cString
cmd.CommandText = sql
cmd.CommandType = adCmdText
set GetCommand = cmd
end function
function checkboxParamString(arr)
dim u,i,tmp
tmp = ""
u = ubound(arr)
for i = 0 to u
if len(tmp) > 0 then tmp = tmp & ","
tmp = tmp & "?"
next
checkboxParamString = tmp
end function
' Tilføj data i slutningen af arrayet arr.
' Hvis appendData er et array, tilføjes alle værdier i
' appendData til arr.
sub appendParams(byref arr, appendData)
dim lenNewArr
dim idx, uba
if isArray(appendData) then
lenNewArr = ubound(appendData) + 1
if lenNewArr > 0 then
uba = ubound(arr)
redim preserve arr(uba + lenNewArr)
for idx = 1 to lenNewArr
arr(uba + idx) = appendData(idx - 1)
next
end if
else
redim preserve arr(ubound(arr) + 1)
arr(ubound(arr)) = appendData
end if
end sub
sub buildSQLAndParams(searchText, checkboxChoices, radioType, byref sql, byref params)
dim params1, params2
dim word, searchWords, checkChoices, searchTypeKeyword
dim sql1, sql2
params1 = array()
params2 = array()
checkChoices = split(checkboxChoices,",")
searchWords = split(searchText, " ")
if radiotype = "typeOR" then
searchTypeKeyword = " OR "
else
searchTypeKeyword = " AND "
end if
for each word in searchWords
if trim(word) <> "" then
if len(sql1) > 0 then sql1 = sql1 & searchTypeKeyword
sql1 = sql1 & _
"m.GuestBookID = g.ID " & _
"AND ((GuestBookID IN ("& checkboxParamString(checkChoices) &") " & _
"AND PATINDEX('%' + ? + '%',Message)>0 ))"
call appendParams(params1, checkChoices)
call appendParams(params1, word)
if len(sql1) > 0 then sql2 = sql2 & searchTypeKeyword
sql2 = sql2 & _
"s.MessagesID = m.ID " & _
"AND m.GuestBookID = g.ID " & _
"AND ((m.GuestBookID IN("& checkboxParamString(checkChoices) &") " & _
"AND PATINDEX('%' + ? + '%',s.svar)>0))"
call appendParams(params2, checkChoices)
call appendParams(params2, word)
end if
next
sql = "SELECT " & _
"'MESSAGE' AS [Kategori], " & _
"m.ID, m.ID AS [MessageID], " & _
"m.Message AS [tekst], " & _
"m.GuestBookID AS [MainID], " & _
"m.Name AS [Navn], " & _
"m.PostedTime, " & _
"g.GuestBookName " & _
"FROM " & _
"[dbo].[TblMessages] m, " & _
"[dbo].[TblGuestBooks] g " & _
"WHERE " & _
sql1 & " " & _
"UNION " & _
"SELECT " & _
"'SVAR' AS [Kategori], " & _
"s.svarID AS [ID], " & _
"m.ID AS [MessageID], " & _
"svar as [tekst], " & _
"s.MessagesID AS [MainID], " & _
"s.navn AS [Navn], " & _
"s.PostedTime, " & _
"g.GuestBookName " & _
"FROM " & _
"[dbo].[T_Svar] s, " & _
"[dbo].[TblMessages] m, " & _
"[dbo].[TblGuestBooks] g " & _
"WHERE " & _
"s.MessagesID = m.ID " & _
"AND m.GuestBookID = g.ID " & _
"AND " & _
sql2 & " " & _
"ORDER BY " & _
"3, " & _
"PostedTime ASC"
params = array()
call appendParams(params, params1)
call appendParams(params, params2)
end sub
sub visResultat(sql, params)
dim conn
set conn = Server.CreateObject("ADODB.Connection")
conn.open "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
set cmd = GetCommand(sql, conn)
set rs = cmd.Execute(, params)
if rs.eof then
response.write "<p align=center><FONT size=1 face=verdana><b>Ingen resultat af søgningen</b></font></p>"
else
%>
<br>
<table width="100%">
<tr>
<TD>Søgeresultat herunder. Pt kun til test. Når testen er færdig skal man kunne klikke på teksten og komme til det indlægget/svaret!</td>
</tr>
</table>
<br>
<table width="100%">
<tr>
<TD width="10%">Type</td><TD width="10%">Kategori</td><TD width="45%">Tekst</td><TD width="15%">Dato</td><TD width="20%">Navn</td>
</tr>
</table>
<%
do while not rs.EOF
%>
<table width="100%">
<tr>
<%
if rs("kategori") = "SVAR" then
kategori="Svar til indlæg"
elseif rs("kategori") = "MESSAGE" then
kategori="Indlæg"
end if
response.write "<td width=""10%"">" & Kategori &"</TD>"
response.write "<td width=""10%"">" & rs("guestbookname") &"</TD>"
response.write "<td width=""45%"">" & rs("tekst") &"</a></TD>"
'response.write "<td width=""45%""><a href=""#"" >" & Replace(Left(rs("tekst"),80), "<br>", " ") &"</a></TD>"
response.write "<td width=""15%"">" & FormatDateTime(rs("PostedTime"), vbShortDate) &"</TD>"
response.write "<td width=""20%"">" & rs("navn") &"</TD>"
response.write "<HR>"
rs.MoveNext
loop
%>
</TR>
</table>
<%
end if
RS.Close
Set RS = Nothing
conn.close
set conn = nothing
end sub
dim params
dim sql
dim search
dim checkbox
dim radiotype
checkbox = Request("checkbox") & ""
radiotype = Request("radiotype") & ""
search = request("search") & ""
%>
<table>
<tr>
<td>
Indtast et eller flere søgeord adskilt af mellemrum. Husk at vælge om du vil søge efter et eller alle ord.
</td>
<tr>
</table>
<table border="0" width="400" cellpadding="0" style="border-collapse: collapse">
<tr>
<td class="broed">
<form method="POST" action="?page=search" style="padding: 0; float:left; height: 0; text-align:left">
<input value="<%=request.form("search")%>" type="text" name="search" size="18"><br>
<input type="radio" name="radiotype" value="typeOR" <% if (radiotype="typeOR" AND request.form("search") = "") OR (radiotype="" AND request.form("search") = "") OR radiotype="typeOR" then %> checked <% else %><% end if %>> søg efter et af ordene <br>
<input type="radio" name="radiotype" value="typeAND" <% if (radiotype="typeAND" AND request.form("search") = "") OR (radiotype="typeAND") then %> checked <% else %><% end if %>> resultatet skal indeholde samtlige ord <br>
<br>Vælg kategorier der skal søges i:<br>
<input type="checkbox" name="checkbox" value="3" <% if contains(checkbox,"3") or request.form("search") ="" then %> checked<% end if %>> Jeg <br>
<input type="checkbox" name="checkbox" value="4" <% if contains(checkbox,"4") or request.form("search") ="" then %> checked<% end if %>> Jeg <br>
<input type="checkbox" name="checkbox" value="5" <% if contains(checkbox,"5") or request.form("search") ="" then %> checked<% end if %>> Jeg <br>
<input type="checkbox" name="checkbox" value="8" <% if contains(checkbox,"8") or request.form("search") ="" then %> checked<% end if %>> len <br>
<input type="checkbox" name="checkbox" value="21" <% if contains(checkbox,"21") or request.form("search") ="" then %> checked<% end if %>> åde <br>
<input type="checkbox" name="checkbox" value="22" <% if contains(checkbox,"22") or request.form("search") ="" then %> checked<% end if %>> ronik <br>
<input type="checkbox" name="checkbox" value="23" <% if contains(checkbox,"23") or request.form("search") ="" then %> checked<% end if %>> rer <br>
<input type="checkbox" name="checkbox" value="24" <% if contains(checkbox,"24") or request.form("search") ="" then %> checked<% end if %>> ng <br>
<input type="checkbox" name="checkbox" value="26" <% if contains(checkbox,"26") or request.form("search") ="" then %> checked<% end if %>> g <br>
<input type="checkbox" name="checkbox" value="27" <% if contains(checkbox,"27") or request.form("search") ="" then %> checked<% end if %>> ere <br>
<input type="checkbox" name="checkbox" value="28" <% if contains(checkbox,"28") or request.form("search") ="" then %> checked<% end if %>> et <br>
<input type="checkbox" name="checkbox" value="29" <% if contains(checkbox,"29") or request.form("search") ="" then %> checked<% end if %>> søges <br>
<input type="checkbox" name="checkbox" value="30" <% if contains(checkbox,"30") or request.form("search") ="" then %> checked<% end if %>> olm <br>
<input type="checkbox" name="checkbox" value="31" <% if contains(checkbox,"31") or request.form("search") ="" then %> checked<% end if %>> lyst <br><br>
<input name="send" align="top" type="submit" vale="Søg">
</form>
</td>
</tr>
</table>
<%
if checkbox = "" and search <> "" then
response.write "<p align=center><FONT size=1 face=verdana color=red><b>Der skal søges i mindst en kategori</b></font></p>"
else
if request.form("search") <> "" then
call buildSQLAndParams(search, checkbox, radiotype, sql, params)
call visResultat(sql, params)
'response.Write "SQL: <br>" & replace(sql, vbCrLf, "<br>")
'response.Write "Parametre: <br>" & join(params, ", ")
end if
end if
%>
Skrevet ons. d. 13. juli 2011 kl. 19:56:25| #11
Microsoft VBScript runtime error '800a01c2'
Wrong number of arguments or invalid property assignment: 'GetCommand'
/sql/test/test.asp, line 140
Og så bliver jeg også lige nød til at have en ekstra parameter med. En radiobutton så jeg kan vælge om der skal sorteres ASC eller DESC i SQL sætningen :)
Skrevet ons. d. 13. juli 2011 kl. 20:14:51| #12
Ups! Jeg fik ikke lige rettet GetCommand til (jeg har tilføjet en parameter til connectionobjektet). Udskift den eksisterende med denne:
function GetCommand(sql, conn)
dim cmd
set cmd = Server.CreateObject("ADODB.Command")
set cmd.ActiveConnection = conn
cmd.CommandText = sql
cmd.CommandType = adCmdText
set GetCommand = cmd
end function
Det med sorteringsordenen tager vi lige når det her fungerer... :-)
Skrevet ons. d. 13. juli 2011 kl. 22:00:21| #13
Der er søgt på 2 ord
SELECT 'MESSAGE' AS [Kategori], m.ID, m.ID AS [MessageID], m.Message AS [tekst], m.GuestBookID AS [MainID], m.Name AS [Navn], m.PostedTime, g.GuestBookName FROM [dbo].[TblMessages] m, [dbo].[TblGuestBooks] g WHERE m.GuestBookID = g.ID AND ((GuestBookID IN (?,?,?,?,?,?,?,?,?,?,?,?,?,?) AND PATINDEX('%' + ? + '%',Message)>0 )) OR m.GuestBookID = g.ID AND ((GuestBookID IN (?,?,?,?,?,?,?,?,?,?,?,?,?,?) AND PATINDEX('%' + ? + '%',Message)>0 )) UNION SELECT 'SVAR' AS [Kategori], s.svarID AS [ID], m.ID AS [MessageID], svar as [tekst], s.MessagesID AS [MainID], s.navn AS [Navn], s.PostedTime, g.GuestBookName FROM [dbo].[T_Svar] s, [dbo].[TblMessages] m, [dbo].[TblGuestBooks] g WHERE s.MessagesID = m.ID AND m.GuestBookID = g.ID AND OR s.MessagesID = m.ID AND m.GuestBookID = g.ID AND ((m.GuestBookID IN(?,?,?,?,?,?,?,?,?,?,?,?,?,?) AND PATINDEX('%' + ? + '%',s.svar)>0)) OR s.MessagesID = m.ID AND m.GuestBookID = g.ID AND ((m.GuestBookID IN(?,?,?,?,?,?,?,?,?,?,?,?,?,?) AND PATINDEX('%' + ? + '%',s.svar)>0)) ORDER BY 3, PostedTime ASC
Microsoft OLE DB Provider for SQL Server error '80040e14'
Incorrect syntax near the keyword 'OR'.
/sql/test/test.asp, line 143
Skrevet ons. d. 13. juli 2011 kl. 22:25:22| #14
Prøv at udskifte SQL-sætningen med denne version:
sql = "SELECT " & _
"'MESSAGE' AS [Kategori], " & _
"m.ID, m.ID AS [MessageID], " & _
"m.Message AS [tekst], " & _
"m.GuestBookID AS [MainID], " & _
"m.Name AS [Navn], " & _
"m.PostedTime, " & _
"g.GuestBookName " & _
"FROM " & _
"[dbo].[TblMessages] m, " & _
"[dbo].[TblGuestBooks] g " & _
"WHERE " & _
sql1 & " " & _
"UNION " & _
"SELECT " & _
"'SVAR' AS [Kategori], " & _
"s.svarID AS [ID], " & _
"m.ID AS [MessageID], " & _
"svar as [tekst], " & _
"s.MessagesID AS [MainID], " & _
"s.navn AS [Navn], " & _
"s.PostedTime, " & _
"g.GuestBookName " & _
"FROM " & _
"[dbo].[T_Svar] s, " & _
"[dbo].[TblMessages] m, " & _
"[dbo].[TblGuestBooks] g " & _
"WHERE " & _
"s.MessagesID = m.ID " & _
"AND m.GuestBookID = g.ID " & _
sql2 & " " & _
"ORDER BY " & _
"3, " & _
"PostedTime ASC"
Bort set fra det, så synes jeg da du må få nogle problemer med grupperingen af dine AND og OR-sammenligningsoperatorer (eller så har du bare HELT styr på præcedensregler i SQL!!! :D)...
Skrevet tor. d. 14. juli 2011 kl. 08:07:15| #15
Tja, altså SQL sætningen har været testet i et godt stykke tid og giver de rigtige resultater. Søgningen virkede jo fint før jeg begyndte på command tingen. Der kommer rigtig nok ingen fejl når jeg bruger SQL sætningen fra dit forslag, men til gengæld bliver søgeresultatet ikke rigtigt. Den finder alt for meget i OR søgningen.
Skrevet tor. d. 14. juli 2011 kl. 08:48:39| #16
Jeg ville jo også forvente at sql1 og sql2 skulle se ud som nedenstående for at grupperingen af logikken i betingelserne kom til at fungere.
Dvs.
sql1 = sql1 & _
"(m.GuestBookID = g.ID " & _
"AND ((GuestBookID IN ("& checkboxParamString(checkChoices) &") " & _
"AND PATINDEX('%' + ? + '%',Message)>0 )))"
hhv.
sql2 = sql2 & _
"(s.MessagesID = m.ID " & _
"AND m.GuestBookID = g.ID " & _
"AND ((m.GuestBookID IN("& checkboxParamString(checkChoices) &") " & _
"AND PATINDEX('%' + ? + '%',s.svar)>0)))"
Altså paranteser omkring hver delbetingelse i SQL-sætningen.
Jeg ved ikke hvad der er ændret fra den oprindelige udgave til den der benyttes sammen med command. Jeg har, efter min bedste overbevisning, taget udgangspunkt i den SQL du selv har præsenteret her i tråden.
Skrevet tor. d. 14. juli 2011 kl. 09:55:52| #17
Her er den oprindelige udgave som virker.
SQL = "SELECT 'MESSAGE' AS [Kategori], m.ID, m.ID AS [MessageID], m.Message AS [tekst], m.GuestBookID AS [MainID], m.Name AS [Navn], m.PostedTime, g.GuestBookName FROM [dbo].[TblMessages] m, [dbo].[TblGuestBooks] g WHERE " & SQL1 & " UNION SELECT 'SVAR' AS [Kategori], s.svarID AS [ID], m.ID AS [MessageID], svar as [tekst], s.MessagesID AS [MainID], s.navn AS [Navn], s.PostedTime, g.GuestBookName FROM [dbo].[T_Svar] s, [dbo].[TblMessages] m, [dbo].[TblGuestBooks] g WHERE s.MessagesID = m.ID AND m.GuestBookID = g.ID AND " & sql2 & " ORDER BY 3, PostedTime ASC"
Afhængig af om det er OR eller AND søgning, skal sql1 og 2 se således ud.
if trim(item) <> "" then
if request("radiotype") = "typeOR" then
sql1 = sql1 & "m.GuestBookID = g.ID AND ( (GuestBookID IN ( "& checkbox &" ) AND PATINDEX('%" & item& "%',Message)>0 )) OR "
sql2 = sql2 & "s.MessagesID = m.ID AND m.GuestBookID = g.ID AND ( ( m.GuestBookID IN( "& checkbox &" ) AND PATINDEX('%" & item & "%',s.svar)>0)) OR "
elseif request("radiotype") = "typeAND" then
sql1 = sql1 & "m.GuestBookID = g.ID AND ( (GuestBookID IN ( "& checkbox &" ) AND PATINDEX('%" & item& "%',Message)>0 )) AND "
sql2 = sql2 & "s.MessagesID = m.ID AND m.GuestBookID = g.ID AND ( ( m.GuestBookID IN( "& checkbox &" ) AND PATINDEX('%" & item & "%',s.svar)>0)) AND "
End if
end if
Hjælper det dig?
Skrevet tor. d. 14. juli 2011 kl. 10:11:18| #18
Næh, ikke rigtig. ret mig hvis jeg tager fejl, men er det ikke korrekt at den eneste forskel på sql1 hvis det er typeOR og typeAND er om der står OR eller AND til sidst i linjen? Det samme gør sig vel gældende for sql2...?
Det jeg har gjort er bare at sammenlægge disse to betingelsesforgreninger og opbevare AND eller OR i en variabel som jeg efterstiller sql1 og sql2 med, så det burde give samme resultat.
Har du prøvet at implementere de ændringer jeg foreslog i indlæg #16?
Har du prøvet at gennemgå den endelige SQL-sætning for at se om den ser ud som den skal (den der kommer tilbage fra funktionen buildSQLAndParams)? Du kan evt. prøve at aktivere de to response.writes jeg har lavet efter kaldet til visResultat for at se den faktiske SQL-sætning og de parametre der sendes med.
Skrevet tor. d. 14. juli 2011 kl. 10:24:16| #19
Jeg fandt lige en fejl i koden til generering af SQL-sætningen.
Denne linje:
if len(sql1) > 0 then sql2 = sql2 & searchTypeKeyword
skal rettes til:
if len(sql2) > 0 then sql2 = sql2 & searchTypeKeyword
Skrevet tor. d. 14. juli 2011 kl. 12:17:03| #20
Jamen så ser det ud til at det virker ...sørme.
Jeg får det rigtige antal søgeresultateter og det var med den oprindelige SQL og så med din rettelse i #19
Så mangler vi bare at kunne vælge DESC eller ASC
:)
Jeg vil gerne smide flere point i puljen hvis du er interesseret?
Skrevet tor. d. 14. juli 2011 kl. 13:02:50| #21
Jeg er ikke helt med på hvad du mener med "...og det var med den oprindelige SQL...", men jeg antager du gør brug af den kode jeg har illustreret for dig. Med dette udgangspunkt har jeg rettet den kode til jeg har udarbejdet tidligere, således jeg kommer frem til flg.:
<!-- METADATA TYPE="typelib" uuid="00000205-0000-0010-8000-00AA006D2EA4" -->
<%
'Funktion til at finde ud f om en checkbox findes
function contains(str, substr)
contains = instr("," & replace(str," ","") & ",", "," & substr & ",") > 0
end function
function GetCommand(sql, conn)
dim cmd
set cmd = Server.CreateObject("ADODB.Command")
set cmd.ActiveConnection = conn
cmd.CommandText = sql
cmd.CommandType = adCmdText
set GetCommand = cmd
end function
function checkboxParamString(arr)
dim u,i,tmp
tmp = ""
u = ubound(arr)
for i = 0 to u
if len(tmp) > 0 then tmp = tmp & ","
tmp = tmp & "?"
next
checkboxParamString = tmp
end function
' Tilføj data i slutningen af arrayet arr.
' Hvis appendData er et array, tilføjes alle værdier i
' appendData til arr.
sub appendParams(byref arr, appendData)
dim lenNewArr
dim idx, uba
if isArray(appendData) then
lenNewArr = ubound(appendData) + 1
if lenNewArr > 0 then
uba = ubound(arr)
redim preserve arr(uba + lenNewArr)
for idx = 1 to lenNewArr
arr(uba + idx) = appendData(idx - 1)
next
end if
else
redim preserve arr(ubound(arr) + 1)
arr(ubound(arr)) = appendData
end if
end sub
sub buildSQLAndParams( _
searchText, _
checkboxChoices, _
radioType, _
sortOrder, _
byref sql, _
byref params)
dim params1, params2
dim word, searchWords, checkChoices
dim searchTypeKeyword, sortOrderKeyword
dim sql1, sql2
params1 = array()
params2 = array()
checkChoices = split(checkboxChoices,",")
searchWords = split(searchText, " ")
if radiotype = "typeOR" then
searchTypeKeyword = " OR "
else
searchTypeKeyword = " AND "
end if
for each word in searchWords
if trim(word) <> "" then
if len(sql1) > 0 then sql1 = sql1 & searchTypeKeyword
sql1 = sql1 & _
"(m.GuestBookID = g.ID " & _
"AND ((GuestBookID IN ("& checkboxParamString(checkChoices) &") " & _
"AND PATINDEX('%' + ? + '%',Message)>0 )))"
call appendParams(params1, checkChoices)
call appendParams(params1, word)
if len(sql2) > 0 then sql2 = sql2 & searchTypeKeyword
sql2 = sql2 & _
"(s.MessagesID = m.ID " & _
"AND m.GuestBookID = g.ID " & _
"AND ((m.GuestBookID IN("& checkboxParamString(checkChoices) &") " & _
"AND PATINDEX('%' + ? + '%',s.svar)>0)))"
call appendParams(params2, checkChoices)
call appendParams(params2, word)
end if
next
if sortOrder = "DESC" then
sortOrderKeyword = "DESC"
else
sortOrderKeyword = "ASC"
end if
sql = "SELECT " & _
"'MESSAGE' AS [Kategori], " & _
"m.ID, " & _
"m.ID AS [MessageID], " & _
"m.Message AS [tekst], " & _
"m.GuestBookID AS [MainID], " & _
"m.Name AS [Navn], " & _
"m.PostedTime, " & _
"g.GuestBookName " & _
"FROM " & _
"[dbo].[TblMessages] m, " & _
"[dbo].[TblGuestBooks] g " & _
"WHERE " & _
sql1 & " " & _
"UNION " & _
"SELECT " & _
"'SVAR' AS [Kategori], " & _
"s.svarID AS [ID], " & _
"m.ID AS [MessageID], " & _
"svar as [tekst], " & _
"s.MessagesID AS [MainID], " & _
"s.navn AS [Navn], " & _
"s.PostedTime, " & _
"g.GuestBookName " & _
"FROM " & _
"[dbo].[T_Svar] s, " & _
"[dbo].[TblMessages] m, " & _
"[dbo].[TblGuestBooks] g " & _
"WHERE " & _
"s.MessagesID = m.ID " & _
"AND m.GuestBookID = g.ID " & _
sql2 & " " & _
"ORDER BY " & _
"3, " & _
"PostedTime " & _
sortOrderKeyword
params = array()
call appendParams(params, params1)
call appendParams(params, params2)
end sub
sub visResultat(sql, params)
dim conn
set conn = Server.CreateObject("ADODB.Connection")
conn.open "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
set cmd = GetCommand(sql, conn)
set rs = cmd.Execute(, params)
if rs.eof then
response.write "<p align=center><FONT size=1 face=verdana><b>Ingen resultat af søgningen</b></font></p>"
else
%>
<br>
<table width="100%">
<tr>
<TD>Søgeresultat herunder. Pt kun til test. Når testen er færdig skal man kunne klikke på teksten og komme til det indlægget/svaret!</td>
</tr>
</table>
<br>
<table width="100%">
<tr>
<TD width="10%">Type</td><TD width="10%">Kategori</td><TD width="45%">Tekst</td><TD width="15%">Dato</td><TD width="20%">Navn</td>
</tr>
</table>
<%
do while not rs.EOF
%>
<table width="100%">
<tr>
<%
if rs("kategori") = "SVAR" then
kategori="Svar til indlæg"
elseif rs("kategori") = "MESSAGE" then
kategori="Indlæg"
end if
response.write "<td width=""10%"">" & Kategori &"</TD>"
response.write "<td width=""10%"">" & rs("guestbookname") &"</TD>"
response.write "<td width=""45%"">" & rs("tekst") &"</a></TD>"
'response.write "<td width=""45%""><a href=""#"" >" & Replace(Left(rs("tekst"),80), "<br>", " ") &"</a></TD>"
response.write "<td width=""15%"">" & FormatDateTime(rs("PostedTime"), vbShortDate) &"</TD>"
response.write "<td width=""20%"">" & rs("navn") &"</TD>"
response.write "<HR>"
rs.MoveNext
loop
%>
</TR>
</table>
<%
end if
RS.Close
Set RS = Nothing
conn.close
set conn = nothing
end sub
dim params
dim sql
dim search
dim checkbox
dim radiotype
dim sortorder
checkbox = Request("checkbox") & ""
radiotype = Request("radiotype") & ""
search = request("search") & ""
sortorder = request("sortorder") & ""
%>
<table>
<tr>
<td>
Indtast et eller flere søgeord adskilt af mellemrum. Husk at vælge om du vil søge efter et eller alle ord.
</td>
<tr>
</table>
<table border="0" width="400" cellpadding="0" style="border-collapse: collapse">
<tr>
<td class="broed">
<form method="POST" action="?page=search" style="padding: 0; float:left; height: 0; text-align:left">
<input value="<%=request.form("search")%>" type="text" name="search" size="18"><br>
<input type="radio" name="radiotype" value="typeOR" <% if (radiotype="typeOR" AND request.form("search") = "") OR (radiotype="" AND request.form("search") = "") OR radiotype="typeOR" then %> checked <% else %><% end if %>> søg efter et af ordene <br>
<input type="radio" name="radiotype" value="typeAND" <% if (radiotype="typeAND" AND request.form("search") = "") OR (radiotype="typeAND") then %> checked <% else %><% end if %>> resultatet skal indeholde samtlige ord <br>
<input type="radio" name="sortorder" value="ASC" <% if sortorder="ASC" OR sortorder="" then %> checked<% end if %>> sorter resultat i stigende orden<br>
<input type="radio" name="sortorder" value="DESC" <% if sortorder="DESC" then %> checked<% end if %>> sorter resultat i faldende orden<br>
<br>Vælg kategorier der skal søges i:<br>
<input type="checkbox" name="checkbox" value="3" <% if contains(checkbox,"3") or request.form("search") ="" then %> checked<% end if %>> Jeg <br>
<input type="checkbox" name="checkbox" value="4" <% if contains(checkbox,"4") or request.form("search") ="" then %> checked<% end if %>> Jeg <br>
<input type="checkbox" name="checkbox" value="5" <% if contains(checkbox,"5") or request.form("search") ="" then %> checked<% end if %>> Jeg <br>
<input type="checkbox" name="checkbox" value="8" <% if contains(checkbox,"8") or request.form("search") ="" then %> checked<% end if %>> len <br>
<input type="checkbox" name="checkbox" value="21" <% if contains(checkbox,"21") or request.form("search") ="" then %> checked<% end if %>> åde <br>
<input type="checkbox" name="checkbox" value="22" <% if contains(checkbox,"22") or request.form("search") ="" then %> checked<% end if %>> ronik <br>
<input type="checkbox" name="checkbox" value="23" <% if contains(checkbox,"23") or request.form("search") ="" then %> checked<% end if %>> rer <br>
<input type="checkbox" name="checkbox" value="24" <% if contains(checkbox,"24") or request.form("search") ="" then %> checked<% end if %>> ng <br>
<input type="checkbox" name="checkbox" value="26" <% if contains(checkbox,"26") or request.form("search") ="" then %> checked<% end if %>> g <br>
<input type="checkbox" name="checkbox" value="27" <% if contains(checkbox,"27") or request.form("search") ="" then %> checked<% end if %>> ere <br>
<input type="checkbox" name="checkbox" value="28" <% if contains(checkbox,"28") or request.form("search") ="" then %> checked<% end if %>> et <br>
<input type="checkbox" name="checkbox" value="29" <% if contains(checkbox,"29") or request.form("search") ="" then %> checked<% end if %>> søges <br>
<input type="checkbox" name="checkbox" value="30" <% if contains(checkbox,"30") or request.form("search") ="" then %> checked<% end if %>> olm <br>
<input type="checkbox" name="checkbox" value="31" <% if contains(checkbox,"31") or request.form("search") ="" then %> checked<% end if %>> lyst <br><br>
<input name="send" align="top" type="submit" vale="Søg">
</form>
</td>
</tr>
</table>
<%
if checkbox = "" and search <> "" then
response.write "<p align=center><FONT size=1 face=verdana color=red><b>Der skal søges i mindst en kategori</b></font></p>"
else
if request.form("search") <> "" then
call buildSQLAndParams(search, checkbox, radiotype, sortorder, sql, params)
call visResultat(sql, params)
'response.Write "SQL: <br>" & replace(sql, vbCrLf, "<br>")
'response.Write "Parametre: <br>" & join(params, ", ")
end if
end if
%>
Jeg har, efter bedste evne, fremhævet de linjer jeg har ændret eller tilføjet i koden...
Skrevet tor. d. 14. juli 2011 kl. 13:46:44| #22
#10 + #19 virker
Det var det jeg mente.
Jeg har ikke brugt #10 og #14
:)
Jeg prøver lige den sidste du har postet
Skrevet tor. d. 14. juli 2011 kl. 13:50:53| #23
Den sidste du har posted giver mig:
SELECT 'MESSAGE' AS [Kategori], m.ID, m.ID AS [MessageID], m.Message AS [tekst], m.GuestBookID AS [MainID], m.Name AS [Navn], m.PostedTime, g.GuestBookName FROM [dbo].[TblMessages] m, [dbo].[TblGuestBooks] g WHERE (m.GuestBookID = g.ID AND ((GuestBookID IN (?,?,?,?,?,?,?,?,?,?,?,?,?,?) AND PATINDEX('%' + ? + '%',Message)>0 ))) OR (m.GuestBookID = g.ID AND ((GuestBookID IN (?,?,?,?,?,?,?,?,?,?,?,?,?,?) AND PATINDEX('%' + ? + '%',Message)>0 ))) UNION SELECT 'SVAR' AS [Kategori], s.svarID AS [ID], m.ID AS [MessageID], svar as [tekst], s.MessagesID AS [MainID], s.navn AS [Navn], s.PostedTime, g.GuestBookName FROM [dbo].[T_Svar] s, [dbo].[TblMessages] m, [dbo].[TblGuestBooks] g WHERE s.MessagesID = m.ID AND m.GuestBookID = g.ID (s.MessagesID = m.ID AND m.GuestBookID = g.ID AND ((m.GuestBookID IN(?,?,?,?,?,?,?,?,?,?,?,?,?,?) AND PATINDEX('%' + ? + '%',s.svar)>0))) OR (s.MessagesID = m.ID AND m.GuestBookID = g.ID AND ((m.GuestBookID IN(?,?,?,?,?,?,?,?,?,?,?,?,?,?) AND PATINDEX('%' + ? + '%',s.svar)>0))) ORDER BY 3, PostedTime DESC
Microsoft SQL Server Native Client 10.0 error '80040e14'
Incorrect syntax near '='.
/sql/test/test-softspot.asp, line 156
Skrevet tor. d. 14. juli 2011 kl. 15:44:49| #24
Se nu har jeg smækket lidt af det der virkede sammen med det sidste du lavede og nu virker det næsten. Der kommer de rigtige søgeresultater, men uanset hvad jeg vælger kommer der til at stå ASC og aldrig DESC. Måske du kan gennemskue det?
<!-- METADATA TYPE="typelib" uuid="00000205-0000-0010-8000-00AA006D2EA4" -->
<%Response.Buffer = False%>
<%
'Funktion til at finde ud f om en checkbox findes
function contains(str, substr)
contains = instr("," & replace(str," ","") & ",", "," & substr & ",") > 0
end function
function GetCommand(sql, conn)
dim cmd
set cmd = Server.CreateObject("ADODB.Command")
set cmd.ActiveConnection = conn
cmd.CommandText = sql
cmd.CommandType = adCmdText
set GetCommand = cmd
end function
function checkboxParamString(arr)
dim u,i,tmp
tmp = ""
u = ubound(arr)
for i = 0 to u
if len(tmp) > 0 then tmp = tmp & ","
tmp = tmp & "?"
next
checkboxParamString = tmp
end function
' Tilføj data i slutningen af arrayet arr.
' Hvis appendData er et array, tilføjes alle værdier i
' appendData til arr.
sub appendParams(byref arr, appendData)
dim lenNewArr
dim idx, uba
if isArray(appendData) then
lenNewArr = ubound(appendData) + 1
if lenNewArr > 0 then
uba = ubound(arr)
redim preserve arr(uba + lenNewArr)
for idx = 1 to lenNewArr
arr(uba + idx) = appendData(idx - 1)
next
end if
else
redim preserve arr(ubound(arr) + 1)
arr(ubound(arr)) = appendData
end if
end sub
sub buildSQLAndParams(searchText, checkboxChoices, radioType, sortOrder, byref sql, byref params)
dim params1, params2
dim word, searchWords, checkChoices, searchTypeKeyword, sortorderKeyword
dim sql1, sql2
params1 = array()
params2 = array()
checkChoices = split(checkboxChoices,",")
searchWords = split(searchText, " ")
if radiotype = "typeOR" then
searchTypeKeyword = " OR "
else
searchTypeKeyword = " AND "
end if
for each word in searchWords
if trim(word) <> "" then
if len(sql1) > 0 then sql1 = sql1 & searchTypeKeyword
sql1 = sql1 & _
"m.GuestBookID = g.ID " & _
"AND ((GuestBookID IN ("& checkboxParamString(checkChoices) &") " & _
"AND PATINDEX('%' + ? + '%',Message)>0 ))"
call appendParams(params1, checkChoices)
call appendParams(params1, word)
if len(sql2) > 0 then sql2 = sql2 & searchTypeKeyword
sql2 = sql2 & _
"s.MessagesID = m.ID " & _
"AND m.GuestBookID = g.ID " & _
"AND ((m.GuestBookID IN("& checkboxParamString(checkChoices) &") " & _
"AND PATINDEX('%' + ? + '%',s.svar)>0))"
call appendParams(params2, checkChoices)
call appendParams(params2, word)
end if
next
if sortOrder = "DESC" then
sortOrderKeyword = "DESC"
else
sortOrderKeyword = "ASC"
end if
sql = "SELECT " & _
"'MESSAGE' AS [Kategori], " & _
"m.ID, m.ID AS [MessageID], " & _
"m.Message AS [tekst], " & _
"m.GuestBookID AS [MainID], " & _
"m.Name AS [Navn], " & _
"m.PostedTime, " & _
"g.GuestBookName " & _
"FROM " & _
"[dbo].[TblMessages] m, " & _
"[dbo].[TblGuestBooks] g " & _
"WHERE " & _
sql1 & " " & _
"UNION " & _
"SELECT " & _
"'SVAR' AS [Kategori], " & _
"s.svarID AS [ID], " & _
"m.ID AS [MessageID], " & _
"svar as [tekst], " & _
"s.MessagesID AS [MainID], " & _
"s.navn AS [Navn], " & _
"s.PostedTime, " & _
"g.GuestBookName " & _
"FROM " & _
"[dbo].[T_Svar] s, " & _
"[dbo].[TblMessages] m, " & _
"[dbo].[TblGuestBooks] g " & _
"WHERE " & _
"s.MessagesID = m.ID " & _
"AND m.GuestBookID = g.ID " & _
"AND " & _
sql2 & " " & _
"ORDER BY " & _
"3, " & _
"PostedTime " & _
sortOrderKeyword
params = array()
call appendParams(params, params1)
call appendParams(params, params2)
end sub
sub visResultat(sql, params)
dim conn
set conn = Server.CreateObject("ADODB.Connection")
conn.open "xxxxxxxxx"
set cmd = GetCommand(sql, conn)
response.write sql
set rs = cmd.Execute(, params)
if rs.eof then
response.write "<p align=center><FONT size=1 face=verdana><b>Ingen resultat af søgningen</b></font></p>"
else
%>
<br>
<table width="100%">
<tr>
<TD>Søgeresultat herunder. Pt kun til test. Når testen er færdig skal man kunne klikke på teksten og komme til det indlægget/svaret!</td>
</tr>
</table>
<br>
<table width="100%">
<tr>
<TD width="10%">Type</td><TD width="10%">Kategori</td><TD width="45%">Tekst</td><TD width="15%">Dato</td><TD width="20%">Navn</td>
</tr>
</table>
<%
do while not rs.EOF
%>
<table width="100%">
<tr>
<%
if rs("kategori") = "SVAR" then
kategori="Svar til indlæg"
elseif rs("kategori") = "MESSAGE" then
kategori="Indlæg"
end if
response.write "<td width=""10%"">" & Kategori &"</TD>"
response.write "<td width=""10%"">" & rs("guestbookname") &"</TD>"
response.write "<td width=""45%"">" & rs("tekst") &"</a></TD>"
'response.write "<td width=""45%""><a href=""#"" >" & Replace(Left(rs("tekst"),80), "<br>", " ") &"</a></TD>"
response.write "<td width=""15%"">" & FormatDateTime(rs("PostedTime"), vbShortDate) &"</TD>"
response.write "<td width=""20%"">" & rs("navn") &"</TD>"
response.write "<HR>"
rs.MoveNext
loop
%>
</TR>
</table>
<%
end if
RS.Close
Set RS = Nothing
conn.close
set conn = nothing
end sub
dim params
dim sql
dim search
dim checkbox
dim radiotype
checkbox = Request("checkbox") & ""
radiotype = Request("radiotype") & ""
search = request("search") & ""
%>
<table>
<tr>
<td>
Indtast et eller flere søgeord adskilt af mellemrum. Husk at vælge om du vil søge efter et eller alle ord.
</td>
<tr>
</table>
<table border="0" width="400" cellpadding="0" style="border-collapse: collapse">
<tr>
<td class="broed">
<form method="POST" action="?page=search" style="padding: 0; float:left; height: 0; text-align:left">
<input value="<%=request.form("search")%>" type="text" name="search" size="18"><br>
<input type="radio" name="radiotype" value="typeOR" <% if (radiotype="typeOR" AND request.form("search") = "") OR (radiotype="" AND request.form("search") = "") OR radiotype="typeOR" then %> checked <% else %><% end if %>> søg efter et af ordene <br>
<input type="radio" name="radiotype" value="typeAND" <% if (radiotype="typeAND" AND request.form("search") = "") OR (radiotype="typeAND") then %> checked <% else %><% end if %>> resultatet skal indeholde samtlige ord <br>
<input type="radio" name="sortorder" value="ASC" <% if sortorder="ASC" OR sortorder="" then %> checked<% end if %>> sorter resultat i stigende orden<br>
<input type="radio" name="sortorder" value="DESC" <% if sortorder="DESC" then %> checked<% end if %>> sorter resultat i faldende orden<br>
<br>Vælg kategorier der skal søges i:<br>
<input type="checkbox" name="checkbox" value="3" <% if contains(checkbox,"3") or request.form("search") ="" then %> checked<% end if %>> Jeg <br>
<input type="checkbox" name="checkbox" value="4" <% if contains(checkbox,"4") or request.form("search") ="" then %> checked<% end if %>> Jeg <br>
<input type="checkbox" name="checkbox" value="5" <% if contains(checkbox,"5") or request.form("search") ="" then %> checked<% end if %>> Jeg <br>
<input type="checkbox" name="checkbox" value="8" <% if contains(checkbox,"8") or request.form("search") ="" then %> checked<% end if %>> len <br>
<input type="checkbox" name="checkbox" value="21" <% if contains(checkbox,"21") or request.form("search") ="" then %> checked<% end if %>> åde <br>
<input type="checkbox" name="checkbox" value="22" <% if contains(checkbox,"22") or request.form("search") ="" then %> checked<% end if %>> ronik <br>
<input type="checkbox" name="checkbox" value="23" <% if contains(checkbox,"23") or request.form("search") ="" then %> checked<% end if %>> rer <br>
<input type="checkbox" name="checkbox" value="24" <% if contains(checkbox,"24") or request.form("search") ="" then %> checked<% end if %>> ng <br>
<input type="checkbox" name="checkbox" value="26" <% if contains(checkbox,"26") or request.form("search") ="" then %> checked<% end if %>> g <br>
<input type="checkbox" name="checkbox" value="27" <% if contains(checkbox,"27") or request.form("search") ="" then %> checked<% end if %>> ere <br>
<input type="checkbox" name="checkbox" value="28" <% if contains(checkbox,"28") or request.form("search") ="" then %> checked<% end if %>> et <br>
<input type="checkbox" name="checkbox" value="29" <% if contains(checkbox,"29") or request.form("search") ="" then %> checked<% end if %>> søges <br>
<input type="checkbox" name="checkbox" value="30" <% if contains(checkbox,"30") or request.form("search") ="" then %> checked<% end if %>> olm <br>
<input type="checkbox" name="checkbox" value="31" <% if contains(checkbox,"31") or request.form("search") ="" then %> checked<% end if %>> lyst <br><br>
<input name="send" align="top" type="submit" vale="Søg">
</form>
</td>
</tr>
</table>
<%
if checkbox = "" and search <> "" then
response.write "<p align=center><FONT size=1 face=verdana color=red><b>Der skal søges i mindst en kategori</b></font></p>"
else
if request.form("search") <> "" then
call buildSQLAndParams(search, checkbox, radiotype, sortOrder, sql, params)
call visResultat(sql, params)
'response.Write "SQL: <br>" & replace(sql, vbCrLf, "<br>")
'response.Write "Parametre: <br>" & join(params, ", ")
end if
end if
%>
Skrevet fre. d. 15. juli 2011 kl. 10:43:58| #25
<!-- METADATA TYPE="typelib" uuid="00000205-0000-0010-8000-00AA006D2EA4" -->
<%Response.Buffer = False%>
<%
'Funktion til at finde ud f om en checkbox findes
function contains(str, substr)
contains = instr("," & replace(str," ","") & ",", "," & substr & ",") > 0
end function
function GetCommand(sql, conn)
dim cmd
set cmd = Server.CreateObject("ADODB.Command")
set cmd.ActiveConnection = conn
cmd.CommandText = sql
cmd.CommandType = adCmdText
set GetCommand = cmd
end function
function checkboxParamString(arr)
dim u,i,tmp
tmp = ""
u = ubound(arr)
for i = 0 to u
if len(tmp) > 0 then tmp = tmp & ","
tmp = tmp & "?"
next
checkboxParamString = tmp
end function
' Tilføj data i slutningen af arrayet arr.
' Hvis appendData er et array, tilføjes alle værdier i
' appendData til arr.
sub appendParams(byref arr, appendData)
dim lenNewArr
dim idx, uba
if isArray(appendData) then
lenNewArr = ubound(appendData) + 1
if lenNewArr > 0 then
uba = ubound(arr)
redim preserve arr(uba + lenNewArr)
for idx = 1 to lenNewArr
arr(uba + idx) = appendData(idx - 1)
next
end if
else
redim preserve arr(ubound(arr) + 1)
arr(ubound(arr)) = appendData
end if
end sub
sub buildSQLAndParams(searchText, checkboxChoices, radioType, sortOrder, byref sql, byref params)
dim params1, params2
dim word, searchWords, checkChoices, searchTypeKeyword, sortorderKeyword
dim sql1, sql2
params1 = array()
params2 = array()
checkChoices = split(checkboxChoices,",")
searchWords = split(searchText, " ")
if radiotype = "typeOR" then
searchTypeKeyword = " OR "
else
searchTypeKeyword = " AND "
end if
for each word in searchWords
if trim(word) <> "" then
if len(sql1) > 0 then sql1 = sql1 & searchTypeKeyword
sql1 = sql1 & _
"m.GuestBookID = g.ID " & _
"AND ((GuestBookID IN ("& checkboxParamString(checkChoices) &") " & _
"AND PATINDEX('%' + ? + '%',Message)>0 ))"
call appendParams(params1, checkChoices)
call appendParams(params1, word)
if len(sql2) > 0 then sql2 = sql2 & searchTypeKeyword
sql2 = sql2 & _
"s.MessagesID = m.ID " & _
"AND m.GuestBookID = g.ID " & _
"AND ((m.GuestBookID IN("& checkboxParamString(checkChoices) &") " & _
"AND PATINDEX('%' + ? + '%',s.svar)>0))"
call appendParams(params2, checkChoices)
call appendParams(params2, word)
end if
next
if request("sortOrder") = "DESC" then
sortOrderKeyword = "DESC"
else
sortOrderKeyword = "ASC"
end if
sql = "SELECT " & _
"'MESSAGE' AS [Kategori], " & _
"m.ID, m.ID AS [MessageID], " & _
"m.Message AS [tekst], " & _
"m.GuestBookID AS [MainID], " & _
"m.Name AS [Navn], " & _
"m.PostedTime, " & _
"g.GuestBookName " & _
"FROM " & _
"[dbo].[TblMessages] m, " & _
"[dbo].[TblGuestBooks] g " & _
"WHERE " & _
sql1 & " " & _
"UNION " & _
"SELECT " & _
"'SVAR' AS [Kategori], " & _
"s.svarID AS [ID], " & _
"m.ID AS [MessageID], " & _
"svar as [tekst], " & _
"s.MessagesID AS [MainID], " & _
"s.navn AS [Navn], " & _
"s.PostedTime, " & _
"g.GuestBookName " & _
"FROM " & _
"[dbo].[T_Svar] s, " & _
"[dbo].[TblMessages] m, " & _
"[dbo].[TblGuestBooks] g " & _
"WHERE " & _
"s.MessagesID = m.ID " & _
"AND m.GuestBookID = g.ID " & _
"AND " & _
sql2 & " " & _
"ORDER BY " & _
"3, " & _
"PostedTime " & _
sortOrderKeyword
params = array()
call appendParams(params, params1)
call appendParams(params, params2)
end sub
sub visResultat(sql, params)
dim conn
set conn = Server.CreateObject("ADODB.Connection")
conn.open ""
set cmd = GetCommand(sql, conn)
response.write sql
set rs = cmd.Execute(, params)
if rs.eof then
response.write "<p align=center><FONT size=1 face=verdana><b>Ingen resultat af søgningen</b></font></p>"
else
%>
<br>
<table width="100%">
<tr>
<TD>Søgeresultat herunder. Pt kun til test. Når testen er færdig skal man kunne klikke på teksten og komme til det indlægget/svaret!</td>
</tr>
</table>
<br>
<table width="100%">
<tr>
<TD width="10%">Type</td><TD width="10%">Kategori</td><TD width="45%">Tekst</td><TD width="15%">Dato</td><TD width="20%">Navn</td>
</tr>
</table>
<%
do while not rs.EOF
%>
<table width="100%">
<tr>
<%
if rs("kategori") = "SVAR" then
kategori="Svar til indlæg"
elseif rs("kategori") = "MESSAGE" then
kategori="Indlæg"
end if
response.write "<td width=""10%"">" & Kategori &"</TD>"
response.write "<td width=""10%"">" & rs("guestbookname") &"</TD>"
response.write "<td width=""45%"">" & rs("tekst") &"</a></TD>"
'response.write "<td width=""45%""><a href=""#"" >" & Replace(Left(rs("tekst"),80), "<br>", " ") &"</a></TD>"
response.write "<td width=""15%"">" & FormatDateTime(rs("PostedTime"), vbShortDate) &"</TD>"
response.write "<td width=""20%"">" & rs("navn") &"</TD>"
response.write "<HR>"
rs.MoveNext
loop
%>
</TR>
</table>
<%
end if
RS.Close
Set RS = Nothing
conn.close
set conn = nothing
end sub
dim params
dim sql
dim search
dim checkbox
dim radiotype
checkbox = Request("checkbox") & ""
radiotype = Request("radiotype") & ""
search = request("search") & ""
%>
<table>
<tr>
<td>
Indtast et eller flere søgeord adskilt af mellemrum. Husk at vælge om du vil søge efter et eller alle ord.
</td>
<tr>
</table>
<table border="0" width="400" cellpadding="0" style="border-collapse: collapse">
<tr>
<td class="broed">
<form method="POST" action="?page=search" style="padding: 0; float:left; height: 0; text-align:left">
<input value="<%=request.form("search")%>" type="text" name="search" size="18"><br>
<input type="radio" name="radiotype" value="typeOR" <% if (radiotype="typeOR" AND request.form("search") = "") OR (radiotype="" AND request.form("search") = "") OR radiotype="typeOR" then %> checked <% else %><% end if %>> søg efter et af ordene <br>
<input type="radio" name="radiotype" value="typeAND" <% if (radiotype="typeAND" AND request.form("search") = "") OR (radiotype="typeAND") then %> checked <% else %><% end if %>> resultatet skal indeholde samtlige ord <br>
<input type="radio" name="sortorder" value="ASC" <% if sortorder="ASC" OR sortorder="" then %> checked<% end if %>> sorter resultat i stigende orden<br>
<input type="radio" name="sortorder" value="DESC" <% if sortorder="DESC" then %> checked<% end if %>> sorter resultat i faldende orden<br>
<br>Vælg kategorier der skal søges i:<br>
<input type="checkbox" name="checkbox" value="3" <% if contains(checkbox,"3") or request.form("search") ="" then %> checked<% end if %>> Jeg <br>
<input type="checkbox" name="checkbox" value="4" <% if contains(checkbox,"4") or request.form("search") ="" then %> checked<% end if %>> Jeg <br>
<input type="checkbox" name="checkbox" value="5" <% if contains(checkbox,"5") or request.form("search") ="" then %> checked<% end if %>> Jeg <br>
<input type="checkbox" name="checkbox" value="8" <% if contains(checkbox,"8") or request.form("search") ="" then %> checked<% end if %>> len <br>
<input type="checkbox" name="checkbox" value="21" <% if contains(checkbox,"21") or request.form("search") ="" then %> checked<% end if %>> åde <br>
<input type="checkbox" name="checkbox" value="22" <% if contains(checkbox,"22") or request.form("search") ="" then %> checked<% end if %>> ronik <br>
<input type="checkbox" name="checkbox" value="23" <% if contains(checkbox,"23") or request.form("search") ="" then %> checked<% end if %>> rer <br>
<input type="checkbox" name="checkbox" value="24" <% if contains(checkbox,"24") or request.form("search") ="" then %> checked<% end if %>> ng <br>
<input type="checkbox" name="checkbox" value="26" <% if contains(checkbox,"26") or request.form("search") ="" then %> checked<% end if %>> g <br>
<input type="checkbox" name="checkbox" value="27" <% if contains(checkbox,"27") or request.form("search") ="" then %> checked<% end if %>> ere <br>
<input type="checkbox" name="checkbox" value="28" <% if contains(checkbox,"28") or request.form("search") ="" then %> checked<% end if %>> et <br>
<input type="checkbox" name="checkbox" value="29" <% if contains(checkbox,"29") or request.form("search") ="" then %> checked<% end if %>> søges <br>
<input type="checkbox" name="checkbox" value="30" <% if contains(checkbox,"30") or request.form("search") ="" then %> checked<% end if %>> olm <br>
<input type="checkbox" name="checkbox" value="31" <% if contains(checkbox,"31") or request.form("search") ="" then %> checked<% end if %>> lyst <br><br>
<input name="send" align="top" type="submit" vale="Søg">
</form>
</td>
</tr>
</table>
<%
if checkbox = "" and search <> "" then
response.write "<p align=center><FONT size=1 face=verdana color=red><b>Der skal søges i mindst en kategori</b></font></p>"
else
if request.form("search") <> "" then
call buildSQLAndParams(search, checkbox, radiotype, sortOrder, sql, params)
call visResultat(sql, params)
'response.Write "SQL: <br>" & replace(sql, vbCrLf, "<br>")
'response.Write "Parametre: <br>" & join(params, ", ")
end if
end if
%>
Jeg rettede
if sortOrder = "DESC" then
til
if request("sortOrder") = "DESC" then
Så virker det.
Ser det hele fornuftigt ud, synes du?
Skrevet man. d. 25. juli 2011 kl. 17:26:26| #26
Nej, jeg ville da beholde den version af if-sætningen som tjekker på sortOrder-variablen, da den sendes med ind som parametere til funktionen - det betyder én mindre afhængighed af "omverdenen", hvilket er en god ting :-)
Jeg forstår heller ikke helt din komplicerede betingelse for at bestemme om OR-inputfeltet skal være checked eller ej. Jeg ville blot gøre således:
<input type="radio" name="radiotype" value="typeOR" <% if radiotype="typeOR" OR radiotype="" then %> checked<% end if %>> søg efter et af ordene <br>
Dvs. tjekke om radiotype er typeOR eller tom, hvilket sørger for at vælge OR-søgningen som standard og hvis den er valgt i forvejen.
Skrevet fre. d. 09. september 2011 kl. 11:38:43| #27
Puha...gik helt kold i det her, men du mangler at smide et svar SoftSpot..
En anden ting, er at nu har jeg den udfordring at der gerne skulle kunne skrives et indlægs eller svar ID ind i søgefeltet og så hopper den direkte til det i stedet for at søge i teksten. Det kan jeg simpelthen ikke wrappe mit hoved om... :)
Skrevet fre. d. 09. september 2011 kl. 12:07:50| #28
Du kan da lige starte med at få et svar... :-)
Jeg har pt. ikke lige tid til at kigge på en konkret løsning, men kan du ikke starte med at tjekke på, om indholdet af søgefeltet er numerisk (med isnumeric) og så springe direkte til resultatet, hvis det er?
Umiddelbart burde du kunne udskifte hele where-delen af din SQL med et tjek på om det indtastede id er lig med messageid eller id. Faktisk bør du vel foretage dette kald først og i det tilfælde det ikke giver noget resultat, så skal du foretage den store søgning efterfølgende...
Skrevet fre. d. 09. september 2011 kl. 12:14:58| #29
Jo tak for input..det vil jeg arbejde videre med.
Jeg vil gerne takke dig rigtig mange gange for hjælpen. Du har brugt meget tid på min udfordring. Tak for tålmodigheden :)
God weekend