hittade denna, kan det va nått! :)
https://www.webforum.nu/showthread.php?s=&threadid=54475&highlight=s�kmotor
Håller på med en söktjänst men hur gör man för att kunna skriva som ni har på eran söksida.
Ex sökord1 And sökord2 eller sökord1 +sökord2
16 svar · 441 visningar · startad av Asa
Håller på med en söktjänst men hur gör man för att kunna skriva som ni har på eran söksida.
Ex sökord1 And sökord2 eller sökord1 +sökord2
hittade denna, kan det va nått! :)
https://www.webforum.nu/showthread.php?s=&threadid=54475&highlight=s�kmotor
Jadu! Var svårt å fatta nåt av det :/ Min kod ser ut så här!
<table cellspacing="0" cellpadding="0" width="450" border="0" align="center">
<tr>
<form name="sok" method="post" action="index.asp?do=sok" onSubmit="return SokOrd()">
<td>
<input type="text" name="sok" size="30" maxlength="30">
<input type="submit" name="Submit" value="Sök">
<select name="falt">
<option value="titel" name="falt">Titel
<option value="forf" name="falt">Författare
<option value="info" name="falt">Heltext
<option value="artikeltyp" name="falt">Artikeltyp
<option value="ref" name="falt">Ref/litteraturfört.
</select></td>
</form>
</tr>
</table>
Och sen lite där den hämtar från databasen beroende på vad jag skrivit
Falt = Trim(Request.Form("falt"))
Sokordet = Request.Form("sok")
Set RecSet = Server.CreateObject("ADODB.Recordset")
SQL = "Select * From filer Where " & Falt & " Like '%" & Sokordet & "%' Order By id Desc"
RecSet.Open SQL, Conn
Jag förstår inte vad som är så svårt med den.
Den loopar igenom alla items i ditt formulär. Placerar värdet av denn input/element i variabeln 'strValue'. I loopen ersätts sedan ' med '' och * med %. Det sista för att kunna använda wildcards (*). Om 'strValue' innehåller % så vet vi att vi måste använda SQL-parametern LIKE, eftersom det skall vara wildcards, så variabeln: 'strLogOp' blir LIKE. Om % inte finns, blir 'strLogOp' givetvis =. Sedan körs en ifråga som kollar ifall inputnamnet innehåller "get_" eller inte. Om den gör det läggs namnet, variabeln 'strLogOp' och värdet till efter varandra så att vi får typ namn =/LIKE värde.
Och sedan börjar det om med nästa formulärelement. :)
OveRRidE skrev:
Alla formular som skall inkluderas i sökningen måste heta get_formularnamn, där formularnamn är vad form-elementet heter.
Forumlarnamnet måste vara samma som kolumnen som skall sökas i. Skall du t.ex. inkludera kolumnen user i din sökning, måste det formularelementet heta get_user.
* (stjärna) är wildcard, och konverteras till % under körningen.
Jag får det dock ej å funka :/
Kod? Felmeddelande? På vilken rad?
Det den gör är att det visar allt ifrån databasen! Alltså alla innehåller det man skriver!
Hur får man det sen att göra sökorden fetstilta i resultaten?
Det verka skriva ut samma info på alla
Hrm.
Använder du något av det som jag skrev i den andra tråden, koden alltså?
Kan du posta hela koden?
Här är koden. Vet ju inte riktigt var jag ska ändra och om man skulle ändra nåt:
<%Response.Buffer=True
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("db/databas.mdb")%>
<html>
<head>
<title>Artikelsök</title>
<link rel="stylesheet" href="stil.css" type="text/css">
<script src="js.js"></script>
</head>
<body>
<table cellspacing="0" cellpadding="0" width="450" border="0" align="center">
<tr>
<form name="sok" method="post" action="index.asp?do=sok" onSubmit="return SokOrd()">
<td>
<input type="text" name="sok" size="30" maxlength="30" onChange="javascript:while(''+this.value.charAt(0)==' ')this.value=this.value.substring(1,this.value.length);">
<input type="submit" name="Submit" value="Sök">
<select name="falt">
<option value="titel" name="falt">Titel
<option value="forf" name="falt">Författare
<option value="info" name="falt">Heltext
<option value="artikeltyp" name="falt">Artikeltyp
<option value="ref" name="falt">Ref/litteraturfört.
</select></td>
</form>
</tr>
<%If Request.QueryString("do") = "sok" Then%>
<tr>
<td height="14" colspan="3"><hr size="1" color="#000000" noshade></td>
</tr>
<tr>
<td colspan="3"><b>Sökresultat</b></td>
</tr>
<tr>
<td height="14" colspan="3"><hr size="1" color="#000000" noshade></td>
</tr>
<%Falt = Trim(Request.Form("falt"))
Sokordet = Request.Form("sok")
If Sokordet = "" Then
Response.Redirect "index.asp"
End If
Set RecSet = Server.CreateObject("ADODB.Recordset")
SQL = "SELECT * FROM filer WHERE 1=1 "
for each item in request.form
strValue = trim(request.form(item))
strValue = replace(strValue,"'","''")
strValue = replace(strValue,"*","%")
if instr(strValue,"%") > 0 then
strLogOp = "LIKE"
else
strLogOp = "="
end if
'SQL = SQL & "AND "
if cstr(left(item,4)) = "get_" AND len(request.form(item)) > 0 then
SQL = SQL & "AND "
'generera kolumnnamnet
SQL = SQL & right(item,len(item)-4)
'generera värdet
SQL = SQL & " " & strLogOp & " '" & strValue & "' "
end if
next
RecSet.Open SQL, Conn
If RecSet.EOF Then%>
<tr>
<td colspan="3">Det fanns inga träffar</td>
</tr>
<tr>
<td colspan="3"><hr size="1" color="#000000" noshade></td>
</tr>
<%Else
I=1
Do Until RecSet.EOF
Info = replace(RecSet("info"),Sokordet,"<b>" & Sokordet & "</b>",1,-1,1)
Titel = replace(RecSet("titel"),Sokordet,"<b>" & Sokordet & "</b>",1,-1,1)
Forf = replace(RecSet("forf"),Sokordet,"<b>" & Sokordet & "</b>",1,-1,1)
%>
<tr>
<td colspan="3">
<table width="100%">
<tr>
<td width="20" rowspan="2" valign="top"><span class="rub"><b><%=I%>.</b></span></td>
<td><span class="rub"><a href="articel.asp?id=<%=RecSet("id")%>" target="_blank"><%=Titel%></a></span></td>
</tr>
<tr>
<td><%=Left(Info,200)%><br><font COLOR="#cc6600"><i>Författare: <%=Forf%></i></font></td>
</tr>
<tr>
<td colspan="2"> </td>
</tr>
</table>
</td>
</tr>
<%I=I+1
RecSet.MoveNext
Loop
RecSet.Close
Set RecSet = Nothing
End If
End If%>
</table>
</body>
</html>
<%Conn.Close
Set Conn = Nothing%>
<%Response.Buffer=True
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("db/databas.mdb")%>
<html>
<head>
<title>Artikelsök</title>
<link rel="stylesheet" href="stil.css" type="text/css">
<script src="js.js"></script>
</head>
<body>
<table cellspacing="0" cellpadding="0" width="450" border="0" align="center">
<tr>
<form name="sok" method="post" action="index.asp?do=sok" onSubmit="return SokOrd()">
<td>
<input type="text" name="sok" size="30" maxlength="30" onChange="java script:while(''+this.value.charAt(0)==' ')this.value=this.value.substring(1,this.value.length);">
<input type="submit" name="Submit" value="Sök">
<select name="falt">
<option value="titel" name="falt">Titel
<option value="forf" name="falt">Författare
<option value="info" name="falt">Heltext
<option value="artikeltyp" name="falt">Artikeltyp
<option value="ref" name="falt">Ref/litteraturfört.
</select></td>
</form>
</tr>
<%If Request.QueryString("do") = "sok" Then%>
<tr>
<td height="14" colspan="3"><hr size="1" color="#000000" noshade></td>
</tr>
<tr>
<td colspan="3"><b>Sökresultat</b></td>
</tr>
<tr>
<td height="14" colspan="3"><hr size="1" color="#000000" noshade></td>
</tr>
<%Falt = Trim(Request.Form("falt"))
Sokordet = Request.Form("sok")
If Sokordet = "" Then
Response.Redirect "index.asp"
End If
Set RecSet = Server.CreateObject("ADODB.Recordset")
SQL = "SELECT * FROM filer WHERE 1=1 "
[red]strValue = request.form("text")
strValue = replace(strValue,"'","''")
strValue = replace(strValue,"*","%")
if instr(strValue,"%") > 0 then
strLogOp = "LIKE"
else
strLogOp = "="
end if
SQL = SQL & "AND "
'generera kolumnnamnet
SQL = SQL & "falt"
'generera värdet
SQL = SQL & " " & strLogOp & " '" & strValue & "' "[/red]
RecSet.Open SQL, Conn
If RecSet.EOF Then%>
<tr>
<td colspan="3">Det fanns inga träffar</td>
</tr>
<tr>
<td colspan="3"><hr size="1" color="#000000" noshade></td>
</tr>
<%Else
I=1
Do Until RecSet.EOF
Info = replace(RecSet("info"),Sokordet,"<b>" & Sokordet & "</b>",1,-1,1)
Titel = replace(RecSet("titel"),Sokordet,"<b>" & Sokordet & "</b>",1,-1,1)
Forf = replace(RecSet("forf"),Sokordet,"<b>" & Sokordet & "</b>",1,-1,1)
%>
<tr>
<td colspan="3">
<table width="100%">
<tr>
<td width="20" rowspan="2" valign="top"><span class="rub"><b><%=I%>.</b></span></td>
<td><span class="rub"><a href="articel.asp?id=<%=RecSet("id")%>" target="_blank"><%=Titel%></a></span></td>
</tr>
<tr>
<td><%=Left(Info,200)%><br><font COLOR="#cc6600"><i>Författare: <%=Forf%></i></font></td>
</tr>
<tr>
<td colspan="2"> </td>
</tr>
</table>
</td>
</tr>
<%I=I+1
RecSet.MoveNext
Loop
RecSet.Close
Set RecSet = Nothing
End If
End If%>
</table>
</body>
</html>
<%Conn.Close
Set Conn = Nothing%>
Jobbigt! :(
Microsoft JET Database Engine fel '80040e10'
Det har inte angetts något värde för en eller flera nödvändiga parametrar
/site/patrikJ/index.asp, rad 74
..och hur ser SQL-satsen ut? Felsök alltid med response.write.
Ska komma ihåg det!
SELECT * FROM filer WHERE 1=1 AND Falt = ''
Alla sökfält är antingen Text eller PM
Så här men det går ej med And :/:
SELECT * FROM filer WHERE 1=1 AND info = 'hanna and den'
SQL = "SELECT * FROM filer WHERE 1=1 "
strValue = request.form("sok")
strValue = replace(strValue,"'","''")
strValue = replace(strValue,"*","%")
if instr(strValue,"%") > 0 then
strLogOp = "LIKE"
else
strLogOp = "="
end if
SQL = SQL & "AND "
'generera kolumnnamnet
SQL = SQL & Falt
'generera värdet
SQL = SQL & " " & strLogOp & " '" & strValue & "' "
Ta en titt på 4guysfromrolla.com
Om jag inte minns fel så har dom en mycket bra guide till hur man gör en mycket bra sökmotor där :)