Avatar billede Slettet bruger
26. juli 2002 - 02:27 Der er 14 kommentarer og
4 løsninger

Hvilke tegn kan

Jeg bruge til at lave en søgning med?

Jeg har lånt en søgefunktion af ASP.dk og har prøvet at udvide den lidt. Jeg vil gerne have den til at søge på feks vægt hvor det feks er max 80 kg. Hvordan gør jeg det?

Jeg har lavet den som nedenunder men jeg får alle fra DB vist.
Hvordan laver jeg mine kriterier for hvor meget og hvor lidt der må komme med?

<% Response.Buffer = True %>
<html><head>
<title>Søgeresultat</title>
</head><body>

<%
' Henter værdien fra soeg.htm
strKeyword = Trim(Request.Form("Keyword"))

If Len(strKeyword) = 0 Then
    ' Hvis der ikke er skrevet i feltet
    Response.Clear
    Response.Redirect("search.htm")
Else
    ' Hvis der er skrevet i feltet
    strKeyword = Replace(strKeyword,"'","''")
End If

' Opbygger en dynamisk SQL streng
strSQL = "SELECT alder, starsign, sex, lookfor, vagt FROM users WHERE"
strSQL = strSQL & " (alder LIKE '%" & strKeyword & "%')"
strSQL = strSQL & " OR (starsign LIKE '%" & strKeyword1 & "%')"
strSQL = strSQL & " OR (sex LIKE '%" & strKeyword2 & "%')"
strSQL = strSQL & " OR (lookfor LIKE '%" & strKeyword3 & "%')"
strSQL = strSQL & " OR (vagt LIKE '%" & strKeyword4 & "%')"



' Skaber DSNLess forbindelse til DBen
strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("dating.mdb")
Set myConn = Server.CreateObject("ADODB.Connection")
myConn.Open strDSN

' Skaber et recordset udfra SQL strengen
Set rs = myConn.Execute(strSQL)
If Not (rs.BOF Or rs.EOF) Then
    ' Hvis der er fundet poster på søgningen
    Response.Write "<p>Søgeresultat</p>"
    Response.Write "<table border=1>"
    Response.Write "<tr><th>Alder</th><th>Stjernetegn</th><th>Køn</th><th>Søger</th><th>vægt</th></tr>"
    Do While Not rs.EOF
        Response.Write "<tr><td>" & rs("alder") & "</td>"
        Response.Write "<td>" & rs("starsign") & "</td>"
        Response.Write "<td>" & rs("sex") & "</td>"
        Response.Write "<td>" & rs("lookfor") & "</td>"
        Response.Write "<td>" & rs("vagt") & "</td></tr>"
        rs.MoveNext
    Loop
    Response.Write "</table>"
Else
    ' Hvis der ikke er fundet poster på søgningen
    Response.Write "<p>Der er ikke fundet noget på denne søgning</p>"
End If

' Rydder op efter os
myConn.Close
Set myConn = Nothing
%>

</body></html>
Avatar billede medions Nybegynder
26. juli 2002 - 02:32 #1
<% Response.Buffer = True %>
<html><head>
<title>Søgeresultat</title>
</head><body>

<%
' Henter værdien fra soeg.htm
strKeyword = Trim(Request.Form("Keyword"))

If Len(strKeyword) = 0 Then
    ' Hvis der ikke er skrevet i feltet
    Response.Clear
    Response.Redirect("search.htm")
Else
    ' Hvis der er skrevet i feltet
    strKeyword = Replace(strKeyword,"'","''")
End If

' Opbygger en dynamisk SQL streng
strSQL = "SELECT alder, starsign, sex, lookfor, vagt FROM users WHERE"
strSQL = strSQL & " (alder LIKE '%" & strKeyword & "%')"
strSQL = strSQL & " OR (starsign LIKE '%" & strKeyword1 & "%')"
strSQL = strSQL & " OR (sex LIKE '%" & strKeyword2 & "%')"
strSQL = strSQL & " OR (lookfor LIKE '%" & strKeyword3 & "%')"
strSQL = strSQL & " OR (vagt LIKE '" & strKeyword4 & "')"



' Skaber DSNLess forbindelse til DBen
strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("dating.mdb")
Set myConn = Server.CreateObject("ADODB.Connection")
myConn.Open strDSN

' Skaber et recordset udfra SQL strengen
Set rs = myConn.Execute(strSQL)
If Not (rs.BOF Or rs.EOF) Then
    ' Hvis der er fundet poster på søgningen
    Response.Write "<p>Søgeresultat</p>"
    Response.Write "<table border=1>"
    Response.Write "<tr><th>Alder</th><th>Stjernetegn</th><th>Køn</th><th>Søger</th><th>vægt</th></tr>"
    Do While Not rs.EOF
        Response.Write "<tr><td>" & rs("alder") & "</td>"
        Response.Write "<td>" & rs("starsign") & "</td>"
        Response.Write "<td>" & rs("sex") & "</td>"
        Response.Write "<td>" & rs("lookfor") & "</td>"
        Response.Write "<td>" & rs("vagt") & "</td></tr>"
        rs.MoveNext
    Loop
    Response.Write "</table>"
Else
    ' Hvis der ikke er fundet poster på søgningen
    Response.Write "<p>Der er ikke fundet noget på denne søgning</p>"
End If

' Rydder op efter os
myConn.Close
Set myConn = Nothing
%>

</body></html>

Er det sådan her du mener?
//>Rune
Avatar billede tobby Nybegynder
26. juli 2002 - 02:34 #2
' Opbygger en dynamisk SQL streng
strSQL = "SELECT alder, starsign, sex, lookfor, vagt FROM users WHERE"
strSQL = strSQL & " (alder LIKE '%" & strKeyword & "%')"
if strKeyword1 <> "" Then
  strSQL = strSQL & " OR (starsign LIKE '%" & strKeyword1 & "%')"
end if
if strKeyword2 <> "" Then
  strSQL = strSQL & " OR (sex LIKE '%" & strKeyword2 & "%')"
end if
if strKeyword3 <> "" Then
  strSQL = strSQL & " OR (lookfor LIKE '%" & strKeyword3 & "%')"
end if
if strKeyword4 <> "" Then
  strSQL = strSQL & " OR (vagt LIKE '%" & strKeyword4 & "%')"
end if

Er ikke sikker på om det er det der er problemet, men du kan da prøve...
Avatar billede coltau Juniormester
26. juli 2002 - 09:26 #3
Ovennævnte kan sikkert ikke løse problemet 100%. Når du vil begrænse søgningen på alder skal du ikke anvende OR men AND

Her er en måde at opbygge SQL-sætningen på der samtidig sikre at kun de indtastede søgeord anvendes. (Det gør tobby's også - men kræver at første søgeord er udfyldt.)

<%
strSQL = ""

sub AddSqlOr(sKeyWord, sField)
  if sKeyWord <> "" then
    if strSQL = "" then
      strSQL = " (" & sField & " LIKE '%" & sKeyword & "%')"
    else
      strSQL = strSQL & " OR (" & sField & " LIKE '%" & sKeyword & "%')"
    end if
  end if
end sub

AddSqlOr strKeyword, "alder"
AddSqlOr strKeyword1, "starsign"
AddSqlOr strKeyword2, "sex"
AddSqlOr strKeyword3, "lookfor"

if strKeyword4 <> "" Then
  if strSQL = "" then
    strSQL = "(vagt < " & strKeyword4 & ")"
  else
    strSQL = "(vagt < " & strKeyword4 & ") AND (" & strSql & ")"
  end if
end if

if strSql <> "" then
  strSQL = "SELECT alder, starsign, sex, lookfor, vagt FROM users WHERE " & strSQL
else
  strSQL = "SELECT alder, starsign, sex, lookfor, vagt FROM users"
end if

Response.Write(strSql) ' Udskriv SQL-sætningen
%>

Ovennævnte sætning vil finde alle dem der matcher et eller flere af søgeordene (strKeyWord til strKeyWord3) - men vil kun vise dem der samtidig har en alder der er mindre end strKeyWord4 hvis det er udfyldt.
Avatar billede tmceu Praktikant
26. juli 2002 - 10:02 #4
coltau har fuldstændig ret i sin kommentar vedr. AND/OR. Dit oprindelige statement vil finde et match, hvis bare ét af kriterierne passer.

Men jeg vil tilføje at du bør overveje dine datatyper, for at få bedre performance i dine søgninger. Den mest ineffektive for før søgning får du ved at anvende LIKE og du gør ikke andet.

Ved eks. at ændre vægt til en heltals datatype, vil du kunne lave eks. =, <, >, <> og between på vægten. Da alle vægte vel er opgivet i kg, bør det være unødvendigt at lagre den som eks. "80 kg". Det vil være bedre blot at lagre den som den nummeriske værdi 80.
Avatar billede tmceu Praktikant
26. juli 2002 - 10:05 #5
Et andet eksempel: Med mindre sex eks. indeholder S/M, straight m.m. el.lign. bør du overveje at kontrollere for et eksakt match med =. Indeholder den eks. M/K, M/F, Mand/Kvinde el.lign. bør du lave en WHERE Sex = 'M' fremfor LIKE.
Avatar billede Slettet bruger
26. juli 2002 - 12:42 #6
HAr prøvet det af og fik onde tanker da jeg læsete tmceu´s indlæg..
Har lavet lidt om på det http://www.vi2.dk/ultra/testmappe/search.htm
Jeg har valgt at bruge radiob til at vælge med og fravalgt starsign, men...
Hvad hedder en radiobutton inde i asp.. Skal lige siges at jeg har brugt mange timer på at søge efter noget på nettet uden held..
Jeg har brugt coltau´s kode og lavet lidt om i det..
Koden til asp ligger  ude på linket som viser searchsiden.
.. Ja jeg ved jo ikke bedre så jeg kaldte de radiobuttons s1 og s2
Avatar billede tmceu Praktikant
26. juli 2002 - 12:47 #7
Du mener vel dropdown :-)

En dropdown (og radiobuttons) får du fat på via dens navn som alle øvrige felter i en form. Eks. vil Request.Form("s1") give dig værdien af din mand/kvinde dropdown.
Avatar billede Slettet bruger
26. juli 2002 - 12:54 #8
jamen hvis det bare er det må det da også virke og det gør det ikke..
Den skriver bare "SELECT alder, sex, lookfor, vagt FROM users" og det fatter jeg slet ikke. Jeg mener jeg er begyndt at fatte lidt af det men ligefrem det.. nej nej
Avatar billede tmceu Praktikant
26. juli 2002 - 13:06 #9
Jamen det er fordi du ikke får overført værdierne fra formen til de variabler du bruger i den kode du viser i linket. Kig eks. bare på strKeyword4, den får aldrig nogen værdi :-)
Avatar billede Slettet bruger
26. juli 2002 - 13:26 #10
Okay jeg er kørt surt i det..
Det vil sige at jeg skal sætte et felt mere ind som har navnet keyword4 og som angir vægt. Prøver lige om det hjælper
Avatar billede Slettet bruger
26. juli 2002 - 13:30 #11
Kan sgu ikk gennemskue det. Gi mig et klue..
Avatar billede Slettet bruger
26. juli 2002 - 14:00 #12
Har fundet ud af at hvis jeg fjerner den nederste linie i aspkoden
else
  strSQL = "SELECT alder,  sex, lookfor, vagt FROM users"
Så skriver den ikke "SELECT alder, sex, lookfor, vagt FROM users"
For så skriver siden slet ikke noget.. Hjææælp
Avatar billede tmceu Praktikant
26. juli 2002 - 15:54 #13
Når du submitter din form, får du værdierne over i Request.Form("s1"), Request.Form("s2") o.s.v.. Havde du brugt METHOD="GET" i din form, ville de i stedet være i eks. Request.QueryString("s1").

Da alle operationer i din kode foregår på variablerne str.... skal du have flyttet værdierne over i disse i starten af koden. Eks. str

strAlder = Request.Form("keyword")
strSex = Request.Form("s1")
o.s.v.

og senere kan du så anvend coltau's kode:

AddSqlOr strKeyword, strAlder
AddSqlOr strKeyword1, strStarsign
o.s.v.
Avatar billede Slettet bruger
26. juli 2002 - 16:06 #14
Ja og jeg er uddannet bager.. er stået helt af nu. Kikker måske på det i aften. Ligenu kan jeg ikke se tråden i noget af det som i har skrevet.
Avatar billede tmceu Praktikant
26. juli 2002 - 16:17 #15
Har du slået et for stort brød op ? Sorry, den måtte jeg bare lige af med :-)
Avatar billede Slettet bruger
26. juli 2002 - 16:23 #16
Både ja og nej. Jeg har det sådan at jeg nok skal finde ud af det engang men utålmodigheden lurer også.
Ligenu kan jeg ikke se skoven for bare træer :-)
Avatar billede tmceu Praktikant
26. juli 2002 - 17:46 #17
Jeg har prøvet at flytte værdierne fra formen over i coltau's eksempel, men har ikke rettet noget i øvrigt. Se om det hjælper dig på vej...

<%
strSQL = ""

' Flyt værdier fra form til variabler

strKeyword = Request.Form("keyword") ' Max. alder
strS1 = Request.Form("s1") ' Mand/kvinde
strS2 = Request.Form("s2") ' Mand/kvinde 2
strKeyword2 = Request.Form("keyword2") ' Min vægt
strKeyword4 = Request.Form("keyword4") ' Max vægt

sub AddSqlOr(sKeyWord, sField)
  if sKeyWord <> "" then
    if strSQL = "" then
      strSQL = " (" & sField & " LIKE '%" & sKeyword & "%')"
    else
      strSQL = strSQL & " OR (" & sField & " LIKE '%" & sKeyword & "%')"
    end if
  end if
end sub

AddSqlOr strKeyword, "alder"
AddSqlOr strs1, "sex"
AddSqlOr strs2, "lookfor"
AddSqlOr strKeyword2, "vagt"
AddSqlOr strKeyword4, "vagt"

if strKeyword4 <> "" Then
  if strSQL = "" then
    strSQL = "(vagt < " & strKeyword2 & ")"
  else
    strSQL = "(vagt < " & strKeyword2 & ") AND (" & strSql & ")"
  end if
end if

if strSql <> "" then
  strSQL = "SELECT alder,  sex, lookfor, vagt FROM users WHERE " & strSQL
else
  strSQL = "SELECT alder,  sex, lookfor, vagt FROM users"
end if

Response.Write(strSql) ' Udskriv
Avatar billede Slettet bruger
03. august 2002 - 21:18 #18
Lukker Q, intet duer
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester