Hej!
Jag hämtar data ur e databas genom tre querystrings.
Dvs, ?a=1&b=2&c=3
Då hämtas alla tre, men om man inte väljer med &b= får man ett felmeddelande.
Hur gör jag så att man ska kunna välja vilka kombinationer som helst?
tillexempel
?a=stockholm&c=d eller ?c=e&b=sverige osv osv
Utan någon egentlig tanke på att göra någon slags itererande lösning så kan man ju göra såhär:
strSQL = "SELECT * FROM table WHERE 1 = 1"
If Len(Request.Form("c"))>0 Then
strSQL = strSQL & " AND c = '" & SafeParam(Request.Form("c")) & "'"
End If
If Len(Request.Form("f"))>0 Then
strSQL = strSQL & " AND f = '" & SafeParam(Request.Form("f")) & "'"
End If
If Len(Request.Form("m"))>0 Then
strSQL = strSQL & " AND m = '" & SafeParam(Request.Form("m")) & "'"
End If
function SafeParam(str)
SafeParam = Replace(str, "'","''")
'some more safe code here..
end function
Jag la till en funktion för att hindra enkla SQL injections - men den kan behöva utökas, beroende på din databastyp. Glöm aldrig att alltid tvätta indata som du skall använda i SQL-strängar.
Jag förutsatte att om alla är tomma så skall allt hämtas, är detta korrekt? Därav "1 = 1" (true) i SQL'en. Vill du ha det tvärtom, sätt "1 = 0" (false).
If Len(Request.Form("y"))>0 Then
strSQL = strSQL & " AND y = " & CLng(Request.Form("y"))
End If
If Len(Request.Form("a"))>0 Then
strSQL = strSQL & " AND a= " & CLng(Request.Form("a"))
End If
If Len(Request.Form("f"))>0 Then
strSQL = strSQL & " AND f = '" & SafeParam(Request.Form("f")) & "'"
End If
If Len(Request.Form("m"))>0 Then
strSQL = strSQL & " AND m = '" & SafeParam(Request.Form("m")) & "'"
End If
Vad innehåller (vilken det nu är som krashar för dig) för värde? Om det nu är a och i ditt exempel så är a Stockholm, sist jag tittade så är Stockholm inte ett nummer ;)
En sista fråga, hur sorterar man mellan två priser.
Jag har försökt såhär:
WHERE price BETWEEN '"& Request.Form("fromprice") &"' AND '"& Request.Form("toprice") &"'
men får felet
Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
[Microsoft][ODBC Microsoft Access Driver] Data type mismatch in criteria expression.
If Len(Request.Form("y"))>0 Then
strSQL = strSQL & " AND y = " & CLng(Request.Form("y"))
End If
If Len(Request.Form("a"))>0 Then
strSQL = strSQL & " AND a= " & CLng(Request.Form("a"))
End If
If Len(Request.Form("f"))>0 Then
strSQL = strSQL & " AND f = '" & SafeParam(Request.Form("f")) & "'"
End If
If Len(Request.Form("m"))>0 Then
strSQL = strSQL & " AND m = '" & SafeParam(Request.Form("m")) & "'"
End If