14. marts 2004 - 11:35Der 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)'><-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!
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??
' 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
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?
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!
<% ' 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)'><-Tilbage</a></font></p>" End If
' Rydder op efter os 'myConn.Close 'Set myConn = Nothing %>
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
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= ''
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!
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.