Hej! Det beror på att du inte har något för om det är båda två. Den går alltså igenom det för pojkar och strWhere blir den för pojkar, men eftersom flickor också är > 0 så byter den till det istället. Du måste ju ha en kontroll för båda! jag skulle nog gjort så här: OK. Det funkar. (har det så som nedan så länge, skall byta till siffror senare) If Len(Request.Form("online") ) > 0 ThenVälja kön vid sökning - pojkar, flickor och båda..
På en sida jag jobbar med skall man kunna söka medlemmar. Man skall kunna välja om man bara skall söka efter flickor eller pojkar eller båda.
När man söker så finns det två rutor som är ikryssade från början. Dessa rutor är:
<input type="checkbox" name="pojkar" value="Pojke" checked>
<input type="checkbox" name="flickor" value="Flicka" checked>
...låter man båda vara ikryssade så skall det sökas efter både flickor och pojkar. Men om man bara har en av kryssrutorna ikryssade så skall man bara söka efter medlemmar som är antingen flicka eller pojk.
Om jag har det som koden nedan så söks det bara efter flickor när jag har båda rutorna ikryssade. Och det är ju inte bra det.
Koden:
Dim strSQL
Dim strWhere
If Len(Request.Form("pojkar") ) > 0 Then
strWhere = " AND kon Like '%" & Replace(Request.Form("pojkar"),"'","''") & "%'"
End If
If Len(Request.Form("flickor") ) > 0 Then
strWhere = " AND kon Like '%" & Replace(Request.Form("flickor"),"'","''") & "%'"
End If
If Len(strWhere) > 0 Then
strSQL = "SELECT * FROM medlemmar WHERE " & Mid(strWhere, 6) & " Order By datum DESC"
Else
strSQL = "SELECT * FROM medlemmar"
End IfSv: Välja kön vid sökning - pojkar, flickor och bå
Sv: Välja kön vid sökning - pojkar, flickor och bå
if Len(formpojke) > 0 AND len(formflicka) > 0 then
stWhere = "WHERE kon = "pojke" OR kon = "flicka"
end if
som slängs in innan dina andra 2 if satser.
de andra 2 if satserna använder samma rad, fast du får sålla bort så att flickor bara tar flickor och pojkar bara tar pojkar
if Len(formpojke) > 0 AND len(formflicka) = 0 then
(om nu en len returnerar 0 på en tom sträng.
så har du 3 if satser varav endast 1 kommer uppfyllas.
ett hett tips är att i databasen byta ut så att du inte söker på strängarna pojke och flicka. utan byta ut dem mot siffrorna 1 och 2 (och då givetvis byta fältet i databasen till nåt nummerfält) eftersom det går väldans mycket snabbare att söka på siffror än strängar. Detta skulle jag nog även gjort i asp koden också (dvs i ditt form fält)
då skulle du även kunna göra en addition på de 2 variablarna och se vad du får och sen göra en select case på det
eftersom pojke då representerar siffra 1
flicka = 2
pojke och flicka = 3
så slipper du undan 3 if satser och istället kan köra 1 select case sats.
blir lite snyggare kod imho.
lycka till
// SatelliteSv: Välja kön vid sökning - pojkar, flickor och bå
Men nu har jag hittat en annan sak som inte fungerar nämligen när man kryssar i rutan:
<input type="checkbox" name="online" value="online">
...som man skall kryssa i för att söka bland dem som är online.
När man kryssar i den och sedan söker så listas alla som är online. Inte bara dem som klarar alla de andra kriterierna. Varför?
Här är koden:
Dim strSQL
Dim strWhere
If Len(Request.Form("fnamn") ) > 0 Then
strWhere = " AND fnamn Like '%" & Replace(Request.Form("fnamn"),"'","''") & "%'"
End If
If Len(Request.Form("enamn") ) > 0 Then
strWhere = " AND enamn Like '%" & Replace(Request.Form("enamn"),"'","''") & "%'"
End If
If Len(Request.Form("username") ) > 0 Then
strWhere = " AND username Like '%" & Replace(Request.Form("username"),"'","''") & "%'"
End If
If Len(Request.Form("epost") ) > 0 Then
strWhere = " AND epost Like '%" & Replace(Request.Form("epost"),"'","''") & "%'"
End If
If Len(Request.Form("stad") ) > 0 Then
If Request.Form("stad") = 0 Then
Else
strWhere = " AND stad Like '%" & Replace(Request.Form("stad"),"'","''") & "%'"
End If
End If
If Len(Request.Form("ar") ) > 0 Then
If Request.Form("ar") = 0 Then
Else
strWhere = " AND pnr Like '%" & Replace(Request.Form("ar"),"'","''") & "%'"
End If
End If
if Len(Request.Form("pojkar")) > 0 AND len(Request.Form("flickor")) > 0 then
stWhere = "AND kon = Pojke OR kon = Flicka"
end if
if Len(Request.Form("pojkar")) > 0 AND len(Request.Form("flickor")) = 0 then
strWhere = " AND kon Like '%" & Replace(Request.Form("pojkar"),"'","''") & "%'"
End If
if Len(Request.Form("flickor")) > 0 AND len(Request.Form("pojkar")) = 0 then
strWhere = " AND kon Like '%" & Replace(Request.Form("flickor"),"'","''") & "%'"
End If
If Len(Request.Form("online") ) > 0 Then
strWhere = " AND status Like '%" & Replace(Request.Form("online"),"'","''") & "%'"
End If
If Len(strWhere) > 0 Then
strSQL = "SELECT * FROM members WHERE " & Mid(strWhere, 6) & " Order By datum DESC"
Else
strSQL = "SELECT * FROM members"
End IfSv: Välja kön vid sökning - pojkar, flickor och bå
strWhere = " AND status Like '%" & Replace(Request.Form("online"),"'","''") & "%'"
End If
du verkar glömma bort att du vill ha kvar pojke/flicka valet
If Len(Request.Form("online") ) > 0 Then
strWhere = strWhere & " AND status Like '%" & Replace(Request.Form("online"),"'","''") & "%'"
End If
borde ge dig det resultat du vill ha.
ett bra tips när man arbetar med sql strängar i asp är att inte köra dem mot server. utan köra
Response.Write på dem.
då ser man ofta felet direkt. om inte så kan man ju alltid klippa och köra den raden i sin sql server.
[edit]
du måste givetvis göra strWhere = strWhere & ... på alla extra saker du skall ha med...