---
title: "Söktjänst!"
type: "forum-thread"
url: "https://www.webforum.nu/amne/asp/57627-söktjänst"
topic: "ASP"
topic_url: "https://www.webforum.nu/amne/asp"
author: "Asa"
published: "2002-10-31T08:26:27.000Z"
updated: "2002-10-31T14:56:45.000Z"
replies: 16
views: 447
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/asp/57627-söktjänst"
---

# Söktjänst!

## #1 — Asa, 2002-10-31T08:26Z

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

Permalänk: https://www.webforum.nu/p/57627

## #2 — doggelito, 2002-10-31T09:22Z

hittade denna, kan det va nått! :)
<https://www.webforum.nu/showthread.php?s=&threadid=54475&highlight=s%F6kmotor>

Permalänk: https://www.webforum.nu/p/838511

## #3 — Asa, 2002-10-31T10:10Z

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">
           &nbsp; <input type="submit" name="Submit" value="Sök">&nbsp;
           <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
```

Permalänk: https://www.webforum.nu/p/838540

## #4 — OveRRidE, 2002-10-31T10:39Z

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.

Permalänk: https://www.webforum.nu/p/838558

## #5 — Asa, 2002-10-31T11:53Z

Jag får det dock ej å funka :/

Permalänk: https://www.webforum.nu/p/838609

## #6 — OveRRidE, 2002-10-31T11:57Z

Kod? Felmeddelande? På vilken rad?

Permalänk: https://www.webforum.nu/p/838610

## #7 — Asa, 2002-10-31T12:08Z

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?

Permalänk: https://www.webforum.nu/p/838620

## #8 — OveRRidE, 2002-10-31T12:15Z

Skriv ut din SQL-sats.

```
response.write SQL
```

Permalänk: https://www.webforum.nu/p/838623

## #9 — Asa, 2002-10-31T12:19Z

Vad är WHERE 1=1 ??

Skriver bara ut:

SQL = "SELECT \* FROM filer WHERE 1=1"

Permalänk: https://www.webforum.nu/p/838625

## #10 — Asa, 2002-10-31T12:23Z

Det verka skriva ut samma info på alla

Permalänk: https://www.webforum.nu/p/838627

## #11 — OveRRidE, 2002-10-31T12:45Z

Hrm. 

Använder du något av det som jag skrev i den andra tråden, koden alltså?

Kan du posta hela koden?

Permalänk: https://www.webforum.nu/p/838636

## #12 — Asa, 2002-10-31T12:49Z

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);">
           &nbsp; <input type="submit" name="Submit" value="Sök">&nbsp;
           <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">&nbsp;</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%>
```

Permalänk: https://www.webforum.nu/p/838639

## #13 — OveRRidE, 2002-10-31T13:11Z

```
<%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%>
```

Permalänk: https://www.webforum.nu/p/838653

## #14 — Asa, 2002-10-31T13:21Z

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

Permalänk: https://www.webforum.nu/p/838660

## #15 — OveRRidE, 2002-10-31T13:22Z

..och hur ser SQL-satsen ut? Felsök alltid med response.write.

Permalänk: https://www.webforum.nu/p/838662

## #16 — Asa, 2002-10-31T13:24Z

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 & "' "
```

Permalänk: https://www.webforum.nu/p/838665

## #17 — Denniz PoP, 2002-10-31T14:56Z

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 :)

Permalänk: https://www.webforum.nu/p/838732

---

Tråden på webben: https://www.webforum.nu/amne/asp/57627-söktjänst
