Avatar billede w13 Novice
14. marts 2004 - 11:35 Der er 27 kommentarer og
1 løsning

Flere søgefelter

Hej
Det har lykkedes mig at få stablet en søgemaskine på benene, som kan søge i min database, men indtil videre har der kun været ét felt, og nu ville jeg gerne have den til at søge på flere felter ad gangen. Her er min kode:

<%
' Henter værdien fra sog.htm
strFritekst = Trim(Request.Form("fritekst"))

' Opbygger en dynamisk SQL streng
strSQL = "SELECT id, brugernavn, [navn], email, alder, amt, kommune, job, ansogning FROM ansogning WHERE"
strSQL = strSQL & " ([navn] LIKE '%" & strFritekst & "%')"
strSQL = strSQL & " OR (alder LIKE '%" & strFritekst & "%')"
strSQL = strSQL & " OR (email LIKE '%" & strFritekst & "%')"
strSQL = strSQL & " OR (kon LIKE '%" & strFritekst & "%')"
strSQL = strSQL & " OR (amt LIKE '%" & strFritekst & "%')"
strSQL = strSQL & " OR (kommune LIKE '%" & strFritekst & "%')"
strSQL = strSQL & " OR (job LIKE '%" & strFritekst & "%')"
strSQL = strSQL & " OR (ansogning LIKE '%" & strFritekst & "%')"

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

' 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 "<font face='Verdana' size='2pt.'><b>Alle job-ansøgere<br></b><hr color='#000000' size='1'><br></font>"
    Response.Write "<table border=1 cellpadding='0' cellspacing='0' style='border-collapse: collapse' bordercolor='#000000'>"
    Response.Write "<tr><th><font color='#000000' face='Verdana' size=2>Fuld ansøgning</font></th><th><font color='#000000' face='Verdana' size=2>Navn</font></th><th><font color='#000000' face='Verdana' size=2>Alder</font></th><th><font color='#000000' face='Verdana' size=2>Amt</font></th><th><font color='#000000' face='Verdana' size=2>Kommune</font></th><th><font color='#000000' face='Verdana' size=2>Jobønske</font></th></tr>"
    Do While Not rs.EOF
%> 
<tr><td><font color="#000000" face="Verdana" size=2><p align=center><a href="#" onclick="popup('profil.asp?id=<%=rs("id")%>','Ansøgning','220','480');">Læs hel profil</a></p></font></td>
<%
        Response.Write "<td><a href='mailto:" & rs("email") & "?subject=Angående job-ansøgning på Søg.dk'><font color='#000000' face='Verdana' size=2> " & rs("navn") & " </font></a></td>"
        Response.Write "<td><font color='#000000' face='Verdana' size=2> " & rs("alder") & " </font></td>"
        Response.Write "<td><font color='#000000' face='Verdana' size=2> " & rs("amt") & " </font></td>"
        Response.Write "<td><font color='#000000' face='Verdana' size=2> " & rs("kommune") & " </font></td>"
        Response.Write "<td><font color='#000000' face='Verdana' size=2> " & rs("job") & " </font></td>"
        rs.MoveNext
    Loop
    Response.Write "</table><br><hr color='#000000' size='1'>"
Else
    ' Hvis der ikke er fundet poster på søgningen
    Response.Write "<p><font color='#000000' face='Verdana' size=2>Der er ikke fundet noget på denne søgning!</font><br><br><font color='#000000' face='Verdana' size=1><a href='#' onClick='history.go(-1)'>&lt;-Tilbage</a></font></p>"
End If

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

_____________________________

Et andet problem er også, at hvis man efterlader nogle felter blanke søger viser den alle fra databasen. Og hvis jeg fik lavet flere søgefelter SKULLE nogle af dem jo netop kunne efterlades blanke!

Nogen som mener, de kan hjælpe?

Venlig hilsen
W13
Avatar billede eagleeye Praktikant
14. marts 2004 - 11:38 #1
Altså du tænker på flere input felter som er speciel til en kolonne?
Avatar billede w13 Novice
14. marts 2004 - 11:39 #2
Du kan lige få den side, brugeren er sendt fra:
_________________________________
<html><head>
</head><body>

<form action="sog_arbejdere.asp" method="POST" onsubmit="return FrontPage_Form1_Validator(this)" language="JavaScript" name="FrontPage_Form1">
<div align="left">
  <table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="348" height="1" id="AutoNumber1">
    <tr>
      <td width="348" height="21" colspan="2">
<b>

<font size="2">
      Søg efter job-ansøgere:</font></b></td>
    </tr>
    <tr>
      <td width="160" height="1" valign="top">

<font size="2">
<b>
<br>
</b><font size="2">
Fritekst:</font></font></td>
      <td width="188" height="1" valign="top"><font size="2">
      <br>
<input type="text" name="fritekst" size="20" maxlength="100" value=""></font></td>
    </tr>
    <tr>
      <td width="348" height="1" valign="top" colspan="2">

<font size="2">
      <hr color="#000000" size="1">
</font>

      </td>
    </tr>
    <tr>
      <td width="160" height="1" valign="top">

<font size="2">
      <font size="2">
  Alder:<br>
&nbsp;</font></font></td>
      <td width="188" height="1" valign="top"><font size="2">
<select size="1" name="alder">
<option value="alder" selected></option>
<option value="13">13</option>
<option value="14">14</option>
<option value="15">15</option>
<option value="16">16</option>
<option value="17">17</option>
</select></font></td>
    </tr>
    <tr>
      <td width="160" height="1" valign="top">

<font size="2">
      <font size="2">
  Køn:<br>
&nbsp;</font></font></td>
      <td width="188" height="1" valign="top"><font size="2">
<select size="1" name="kon">
<option selected value="kon"></option>
<option value="Dreng">Dreng</option>
<option value="Pige">Pige</option>
</select></font></td>
    </tr>
    <tr>
      <td width="160" height="1" valign="top">

<font size="2">
      <font size="2">
  Amt:<br>
  &nbsp;</font></font></td>
      <td width="188" height="1" valign="top"><font size="2">
<select size="1" name="amt">
<option selected value="amt"></option>
<option value="Bornholms amt">Bornholms amt</option>
<option value="Frederiksborg amt">Frederiksborg amt</option>
<option value="Fyns amt">Fyns amt</option>
<option value="Københavns amt">Københavns amt</option>
<option value="Nordjyllands amt">Nordjyllands amt</option>
<option value="Ribe amt">Ribe amt</option>
<option value="Ringkøbing amt">Ringkøbing amt</option>
<option value="Roskilde amt">Roskilde amt</option>
<option value="Storstrøms amt">Storstrøms amt</option>
<option value="Sønderjyllands amt">Sønderjyllands amt</option>
<option value="Vejle amt">Vejle amt</option>
<option value="Vestsjællands amt">Vestsjællands amt</option>
<option value="Viborg amt">Viborg amt</option>
<option value="Århus amt">Århus amt</option>
</select></font></td>
    </tr>
    <tr>
      <td width="160" height="1" valign="top">

<font size="2">
      <font size="2">
Kommune:<br>
&nbsp;</font></font></td>
      <td width="188" height="1" valign="top"><font size="2">
<input type="text" name="kommune" size="20" maxlength="100" value=""></font></td>
    </tr>
    <tr>
      <td width="160" height="1" valign="top">

<font size="2">
      <font size="2">
  Jobønske:</font></font></td>
      <td width="188" height="1" valign="top"><font size="2">
<input type="text" name="job" size="20" maxlength="100" value=""></font></td>
    </tr>
    <tr>
      <td width="348" height="1" valign="top" colspan="2">

<font size="2">
<hr color="#000000" size="1">
</font>

      </td>
    </tr>
    <tr>
      <td width="348" height="23" valign="top" colspan="2">

<font size="2">
<input type="submit" name="Action" value="Søg"></font></td>
    </tr>
    <tr>
      <td width="348" height="5" valign="top" colspan="2">

<font size="2">
<hr color="#000000" size="1">
</font>

      </td>
    </tr>
    <tr>
      <td width="348" height="13" valign="top" colspan="2">

<font size="1">
<b>Tip:</b> Efterlad alle felter blanke for at få vist alle job-ansøgere!</font></td>
    </tr>
  </table>
</div>
</form>

</body></html>
Avatar billede eagleeye Praktikant
14. marts 2004 - 11:43 #3
ok, ja det man typisk gør er at bygge sin SQL sætning op ved hjælpe af nogle if sætningen som tjekker hvis form feltet indeholder data med tages det i søgningen:

if Request.Form("amt") <> "" then
  'med tag amt i where delen
end if


men du vil stadigvæk hvade det med friteskt med for alle kolonnerne??
Avatar billede w13 Novice
14. marts 2004 - 11:45 #4
Hmmm... Nej! Jeg laver det bare om, så man kan vælge at søge efter fritekst eller at udfylde de andre felter... Men jeg afprøver lige dit råd!
Avatar billede eagleeye Praktikant
14. marts 2004 - 11:49 #5
Eks kunne være:

' Opbygger en dynamisk SQL streng
sqlWhere = ""
if Request.Form("alder") <> "" then
  if sqlWhere <> "" then sqlWhere = sqlWhere & " OR "
  sqlWhere = sqlWhere & " alder = '" & Request.Form("alder") & "'"
end if
if Request.Form("kon") <> "" then
  if sqlWhere <> "" then sqlWhere = sqlWhere & " OR "
  sqlWhere = sqlWhere & " kon= '" & Request.Form("kon") & "'"
end if
if Request.Form("amt") <> "" then
  if sqlWhere <> "" then sqlWhere = sqlWhere & " OR "
  sqlWhere = sqlWhere & " amt= '" & Request.Form("amt") & "'"
end if
if Request.Form("kommune") <> "" then
  if sqlWhere <> "" then sqlWhere = sqlWhere & " OR "
  sqlWhere = sqlWhere & " kommune= '" & Request.Form("kommune") & "'"
end if
if Request.Form("job") <> "" then
  if sqlWhere <> "" then sqlWhere = sqlWhere & " OR "
  sqlWhere = sqlWhere & " job= '" & Request.Form("job") & "'"
end if

strSQL = "SELECT id, brugernavn, [navn], email, alder, amt, kommune, job, ansogning FROM ansogning "
if sqlWhere <> "" then strSQL = strSQL & " WHERE " & sqlWhere
Avatar billede w13 Novice
14. marts 2004 - 11:49 #6
Næh, jeg gør et eller andet helt forkert... Hvor og hvordan skal jeg indsætte det i koden?
Avatar billede w13 Novice
14. marts 2004 - 11:49 #7
Nåh, vidste ikk' du havde skrevet mere... Prøver lige!
Avatar billede w13 Novice
14. marts 2004 - 11:52 #8
Næh, jeg er simpelthen for dum... Hvor skal placere det henne i teksten?
Avatar billede eagleeye Praktikant
14. marts 2004 - 11:53 #9
Det var i stedet for disse linjer:

' Opbygger en dynamisk SQL streng
strSQL = "SELECT id, brugernavn, [navn], email, alder, amt, kommune, job, ansogning FROM ansogning WHERE"
strSQL = strSQL & " ([navn] LIKE '%" & strFritekst & "%')"
strSQL = strSQL & " OR (alder LIKE '%" & strFritekst & "%')"
strSQL = strSQL & " OR (email LIKE '%" & strFritekst & "%')"
strSQL = strSQL & " OR (kon LIKE '%" & strFritekst & "%')"
strSQL = strSQL & " OR (amt LIKE '%" & strFritekst & "%')"
strSQL = strSQL & " OR (kommune LIKE '%" & strFritekst & "%')"
strSQL = strSQL & " OR (job LIKE '%" & strFritekst & "%')"
strSQL = strSQL & " OR (ansogning LIKE '%" & strFritekst & "%')"
Avatar billede w13 Novice
14. marts 2004 - 12:30 #10
Ja, nu virker det da... Næsten! Der er bare et problem; Hvis jeg foreksempel udfylder feltet 'Alder' med alderen '13' og feltet 'amt' med 'Københavns amt', så viser den alle 13-årige OG alle, som bor i Københavns amt! Det skulle den helst ikke... Den skulle vise alle 13-årige som bor i Københavns amt! Er det nemt at få den til?
Avatar billede eagleeye Praktikant
14. marts 2004 - 12:32 #11
Ja det nemt at rette det fordi jeg har skrevet OR imellem alle søge felterne, det skal rettes til AND. Så alle disse linjer :

  if sqlWhere <> "" then sqlWhere = sqlWhere & " OR "

Skal rettes til at hvade AND sådan her:

  if sqlWhere <> "" then sqlWhere = sqlWhere & " AND "
Avatar billede w13 Novice
14. marts 2004 - 12:35 #12
Er du sikker på det? For nu får jeg at vide, at der ikke er nogen resultater uanset hvad jeg skriver i felterne!
Avatar billede eagleeye Praktikant
14. marts 2004 - 12:44 #13
Ja, er du så sikker på der er nogle som bor i københavn og som er 13år.
Eller anden begrænsing som skal være opfyldty for de kommer med.
Avatar billede w13 Novice
14. marts 2004 - 12:46 #14
Lige nu søger jeg bare på '13' under 'Alder'... Og den siger, der ikke er nogle resultater.. Men jeg VED, der er nogle 13-årige tilmeldt! Og de andre aldre virker heller ikke!
Avatar billede eagleeye Praktikant
14. marts 2004 - 12:49 #15
hvis du kun søger efter en ting skulle det ikke betyde noget om der står OR eller AND, så der forstår jeg ikke helt??
Avatar billede w13 Novice
14. marts 2004 - 12:50 #16
Nej, det gør jeg heller ikke... Lige nu ser koden således ud:
_______________________________________________________________

<% Response.Buffer = True %>
<html><head>
<title></title>
<script type="text/javascript">
<!-- Start

function popup(url,name,win_height,win_width) {
    pos_horizon = ((screen.width/2)-(win_width/2));
    pos_vertical = ((screen.height/2)-(win_height/2));
    window.open(url,name,"width="+win_width+",height="+win_height+",top="+pos_vertical+",left="+pos_horizon+",scrollbars=1");
    }

// Slut -->
</script>
<style type="text/css">
a:link {
    text-decoration:none;
    color:#000000;
}

a:active  {
    text-decoration:none;
    color:#000000;
}

a:visited {
    text-decoration:none;
    color:#000000;
}

a:hover {
    text-decoration:underline;
    color:#000000;
}
</style>
</head>
<body link="#000000" vlink="#000000" alink="#000000">

<%
' Opbygger en dynamisk SQL streng
sqlWhere = ""
if Request.Form("alder") <> "" then
  if sqlWhere <> "" then sqlWhere = sqlWhere & " AND "
  sqlWhere = sqlWhere & " alder = '" & Request.Form("alder") & "'"
end if
if Request.Form("kon") <> "" then
  if sqlWhere <> "" then sqlWhere = sqlWhere & " AND "
  sqlWhere = sqlWhere & " kon= '" & Request.Form("kon") & "'"
end if
if Request.Form("amt") <> "" then
  if sqlWhere <> "" then sqlWhere = sqlWhere & " AND "
  sqlWhere = sqlWhere & " amt= '" & Request.Form("amt") & "'"
end if
if Request.Form("kommune") <> "" then
  if sqlWhere <> "" then sqlWhere = sqlWhere & " AND "
  sqlWhere = sqlWhere & " kommune= '" & Request.Form("kommune") & "'"
end if
if Request.Form("job") <> "" then
  if sqlWhere <> "" then sqlWhere = sqlWhere & " AND "
  sqlWhere = sqlWhere & " job= '" & Request.Form("job") & "'"
end if

strSQL = "SELECT id, brugernavn, [navn], email, alder, amt, kommune, job, ansogning FROM ansogning "
if sqlWhere <> "" then strSQL = strSQL & " WHERE " & sqlWhere

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

' 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 "<font face='Verdana' size='2pt.'><b>Alle job-ansøgere<br></b><hr color='#000000' size='1'><br></font>"
    Response.Write "<table border=1 cellpadding='0' cellspacing='0' style='border-collapse: collapse' bordercolor='#000000'>"
    Response.Write "<tr><th><font color='#000000' face='Verdana' size=2>Fuld ansøgning</font></th><th><font color='#000000' face='Verdana' size=2>Navn</font></th><th><font color='#000000' face='Verdana' size=2>Alder</font></th><th><font color='#000000' face='Verdana' size=2>Amt</font></th><th><font color='#000000' face='Verdana' size=2>Kommune</font></th><th><font color='#000000' face='Verdana' size=2>Jobønske</font></th></tr>"
    Do While Not rs.EOF
%> 
<tr><td><font color="#000000" face="Verdana" size=2><p align=center><a href="#" onclick="popup('profil.asp?id=<%=rs("id")%>','Ansøgning','220','480');">Læs hel profil</a></p></font></td>
<%
        Response.Write "<td><a href='mailto:" & rs("email") & "?subject=Angående job-ansøgning på Søg.dk'><font color='#000000' face='Verdana' size=2> " & rs("navn") & " </font></a></td>"
        Response.Write "<td><font color='#000000' face='Verdana' size=2> " & rs("alder") & " </font></td>"
        Response.Write "<td><font color='#000000' face='Verdana' size=2> " & rs("amt") & " </font></td>"
        Response.Write "<td><font color='#000000' face='Verdana' size=2> " & rs("kommune") & " </font></td>"
        Response.Write "<td><font color='#000000' face='Verdana' size=2> " & rs("job") & " </font></td>"
        rs.MoveNext
    Loop
    Response.Write "</table><br><hr color='#000000' size='1'>"
Else
    ' Hvis der ikke er fundet poster på søgningen
    Response.Write "<p><font color='#000000' face='Verdana' size=2>Der er ikke fundet noget på denne søgning!</font><br><br><font color='#000000' face='Verdana' size=1><a href='#' onClick='history.go(-1)'>&lt;-Tilbage</a></font></p>"
End If

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

</body></html>
Avatar billede eagleeye Praktikant
14. marts 2004 - 12:54 #17
Jeg tror det fordi nogle af de andre input felter ikke er tomme, eksvis drop down menuen har en default tom og dens value er ikke lig "" men "noget" eksvis for amt er der en tom med value = "amt":

<option selected value="amt"></option>

Så den skal være tom:
<option selected value=""></option>


ellers skal if sæningen rettes til, at være forseklligfra "default værdi" og ikke tom "":
if Request.Form("amt") <> "amt" then
Avatar billede w13 Novice
14. marts 2004 - 13:26 #18
Desværre! Intet hjælper det... Andre bud?
Avatar billede eagleeye Praktikant
14. marts 2004 - 13:32 #19
Så prøv at udskrive strSQL og se hvad der driller.

tilføj linjen:

Response.Write strSQL
Avatar billede w13 Novice
14. marts 2004 - 13:37 #20
Hvor skal jeg tilføje den? Er det lige gyldigt hvor jeg sætter den?
Avatar billede eagleeye Praktikant
14. marts 2004 - 13:39 #21
Nej efter disse to linjer:

strSQL = "SELECT id, brugernavn, [navn], email, alder, amt, kommune, job, ansogning FROM ansogning "
if sqlWhere <> "" then strSQL = strSQL & " WHERE " & sqlWhere
Avatar billede w13 Novice
14. marts 2004 - 13:41 #22
Så er der resultat:
__________________________
SELECT id, brugernavn, [navn], email, alder, amt, kommune, job, ansogning FROM ansogning WHERE alder = '' AND kon= 'Dreng' AND amt= '' AND kommune= '' AND job= ''
Avatar billede eagleeye Praktikant
14. marts 2004 - 13:46 #23
Så af en eller anden grund komme alle kolonnerne med selv om der ikke er noget data i input feltetet...

Ser de if sæninger ikke sådan her ud:

if Request.Form("kon") <> "" then
Avatar billede eagleeye Praktikant
14. marts 2004 - 13:52 #24
Den kode som laver SQL sætningen er det ikke den som du har vist i 14/03-2004 12:50:52 ?
Avatar billede w13 Novice
14. marts 2004 - 17:53 #25
Ja, det er præcis den samme kode, som jeg har nu...
Avatar billede w13 Novice
14. marts 2004 - 18:09 #26
Jeg har nu fået det NÆSTEN til at virke... Det eneste felt som driller er 'alder'! Hva' ka' der være galt siden dette er det eneste felt med fejl? Hvis jeg søger efter 'dreng' i feltet 'Køn', f.eks., så ser jeg alle drengene... Men hvis jeg søger efter '14' i feltet 'Alder', så ser jeg ALLE som er oprettede... Også de 17-årige!
Avatar billede w13 Novice
14. marts 2004 - 18:10 #27
Nej, nu virker det! Tak for hjælpen... Opretter du lige et svar, så får du pointene!
Avatar billede eagleeye Praktikant
14. marts 2004 - 18:59 #28
Ok :)) Ja det gør jeg da.
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