webForumDet fria alternativet

Sökmotor

ASP

13 svar · 416 visningar · startad av WebbisNet

Medlem sedan feb. 20032 027 inlägg
Frågan#1

Jag ska för första gången ge mig på att bygga en sökmotor, min kod är just nu i enklaste laget och jag behöver bara lite hjälp att rätta koden så jag kommer igång. Ett annat av problemen förutom att få ut resultaten till en annan frame i det frameset jag använder är hur jag enbart får en av varje ort i listan och inte flera av samma i selectboxen

<%imageLink="Http://images.webbisen.com"%>
<!-- #include virtual="/include/dbconn.asp" -->
<!-- #include virtual="/include/functions.asp" -->
<!-- #include virtual="/include/variabler.asp" -->

<%Set search=objConn.Execute("SELECT DISTINCT * FROM tblUsers order by City ASC")%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Untitled Document</title>
</head>

<body>
<form name="form1" method="post" action="/search/index.asp?do=search">
  <select name="selCity">
  <%DO UNTIL search.EOF%>
  <option value="<%=search("city")%>"><%=search("city")%></option>
  <%search.MoveNext: Loop%>
  <input type="submit" value="Sök">
  </select>
</form>

<%If Request.Querystring("do") = "search" Then%>
<!-- #include virtual="/include/dbconn.asp" -->
<!-- #include virtual="/include/functions.asp" -->
<%
	SET objConn = connect()
	varCity = Request.Form("selCity")
	sRS=objConn.Execute("SELECT * FROM tblUsers WHERE city='"& varCity &"'")
	Response.Redirect "/search/results.asp?city="& sRS("city")
	
End If%>
</body>
</html>
Medlem sedan dec. 19996 721 inlägg
#2

För att få resultatet i en annan frame så sätter du helt enkelt target="framenamnet" i form-taggen.

För att endast få unika städer måste sökningen vara

SELECT DISTINCT City FROM tblUsers order by City ASC

Sök inte ut mer kolumner än du tänkt använda. SELECT * bör undvikas.

Denna kod:

sRS=objConn.Execute("SELECT * FROM tblUsers WHERE city='"& varCity &"'")
Response.Redirect "/search/results.asp?city="& sRS("city")

Bör ersättas med

Response.Redirect "/search/results.asp?city="& server.urlencode(varCity)

Sökningen är onödig och värdet bör URL-encodas, eftersom det kan innehålla tecken som inte får finnas i en länk.

Medlem sedan feb. 20032 027 inlägg
#3

tack så mycket för tipsen, sidan ska utökas med frisök, sökning på ålder, län, kön, online och mer sedan och då kommer sql-satesen att bli mer omfattande

Medlem sedan dec. 19996 721 inlägg
#4

Gött.

Själva SQL-sökningen bör dock ligga i results.asp (ha den som action i formuläret, så slipper du omvägar)

Medlem sedan feb. 20032 027 inlägg
#5

I min SQL sats [<%Set search=objConn.Execute("SELECT DISTINCT City FROM tblUsers order by City ASC")%>] får jag detta felemeddelande på sidan

Microsoft JET Database Engine (0x80040E57)
Fältet är för litet för de data du vill infoga. Försök att infoga eller klistra in mindre information.
/search/searchbox.asp, line 6

Rad 6 är SQL-satsen ovan

och target i form öppnar bara sidan i _top vilket inte var vad jag önskade, vill ha den i ramen searchFrame

Medlem sedan dec. 19996 721 inlägg
#6

Vad är det för datatyp på City? Den får inte tillåta mer än 256 tecken

Medlem sedan feb. 20032 027 inlägg
#7

emission skrev:

Vad är det för datatyp på City? Den får inte tillåta mer än 256 tecken

Det är text

Jag ändrade action till results.asp och när jag söker på en stad så får jag fram flera resultat och alla visar samma person

<%
Set results=objConn.Execute("SELECT userID, username, City, Sex FROM tblUsers WHERE city= '"& request.form("selCity") &"' order by userID ASC")
varUsername = results("username")
varCity = results("city")
%>

Du sökte på <b><%=request.form("selCity")%></b> och fick dessa resultat:<br>
<table>
<tr>
<td>
Användarnamn
</td>
<td>
Ålder
</td>
<td>
Kön
</td>
<td>
Stad
</td>
</tr>
<tr>
<%DO UNTIL results.EOF%>
<td>
<%=varUsername%>
</td>
<td>
&nbsp;
</td>
<td>
&nbsp;
</td>
<td>
<%=varCity%>
</td>
</tr>
<%results.MoveNext: Loop%>
</table>
Medlem sedan dec. 19996 721 inlägg
#8

Inte så konstigt, eftersom du bara hämtar ut första raden till variablerna varUsername och varCity, och skriver ut dem i loopen. Hämta data från recordsetet i loopen.

Medlem sedan feb. 20032 027 inlägg
#9

e för trött för att tänka, ska jag inte använda variablerna i loopen?

Medlem sedan apr. 20031 660 inlägg
#10

HEJ!

Sov istället då, sedan ser garanterat felet när du vaknat! :e

Jag gissar att du blandar två saker, nämligen att stoppa in recordsetet i en array och utskrift av ett recordset.

Gör en av sakerna.

Nu skriver du ut första värdet i recordsetet (via variablerna), men loopar sedan igenom recordsetet. Därför får du recordsetslängden styck av samma poster.

Medlem sedan dec. 19996 721 inlägg
#11

WebbisNet skrev:

e för trött för att tänka, ska jag inte använda variablerna i loopen?

Du får gärna använda variabler, men som du skrivit nu så hämtar du dem endast en gång, så då får du ju samma värde hela tiden....

Medlem sedan feb. 20032 027 inlägg
#12

jag måste vara trög men hur ska jag skriva då :-)

Medlem sedan dec. 19996 721 inlägg
#13

Nu är du allt bra vimsig ;) Det här har du gjort massor med gånger förut.

<%
Set results=objConn.Execute("SELECT userID, username, City, Sex FROM tblUsers WHERE city= '"& request.form("selCity") &"' order by userID ASC")

%>

Du sökte på <b><%=request.form("selCity")%></b> och fick dessa resultat:<br>
<table>
<tr>
<td>
Användarnamn
</td>
<td>
Ålder
</td>
<td>
Kön
</td>
<td>
Stad
</td>
</tr>
<tr>
<%DO UNTIL results.EOF%>
<td>
<%=results("username")%>
</td>
<td>
&nbsp;
</td>
<td>
&nbsp;
</td>
<td>
<%=results("city")%>
</td>
</tr>
<%results.MoveNext: Loop%>
</table>
Medlem sedan feb. 20032 027 inlägg
#14

håller med att jag är vimsig ibland :-) , tack för hjälpen

254 ms totalt · 4 externa anrop · v20260731065814-full.e96017d9
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)