webForumDet fria alternativet

Om inte en är vald?

ASP

33 svar · 1 425 visningar · startad av parse

Medlem sedan juli 200826 inlägg
Frågan#1

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

Medlem sedan feb. 200112 078 inlägg
#2

Har du någon kod?

Medlem sedan juli 200826 inlägg
#3

OveRRidE skrev:

Har du någon kod?


strSQL = "SELECT * FROM table WHERE c = '"& Request.Form("c") &"' AND f = '"& Request.Form("f") &"' AND m = '"& Request.Form("m") &"'

/red. Använd [kod]-taggen istället för [php]. //OveRRidE

Medlem sedan feb. 200112 078 inlägg
#4

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).

Medlem sedan juli 200826 inlägg
#5

Underbart! tack så mycket!
Jag får dock ett problem, c är number och tidigare har ja kört såhär

AND c = " & CInt(Request.Form("c")) & "

Och nu får jag felmeddelande på c, men alla andra funkar perfekt!
Tack så ymcket

Medlem sedan juni 20019 519 inlägg
#6

Om c är ett tal så skall det ju vara som du skriver. Men ditt exempel visar ju tydligt att c är en sträng (c=e)

If Len(Request.Form("c"))>0 Then
   strSQL = strSQL & " AND c = " & CLng(Request.Form("c"))
End If
Medlem sedan juli 200826 inlägg
#7

voigtann1 skrev:

Om c är ett tal så skall det ju vara som du skriver. Men ditt exempel visar ju tydligt att c är en sträng (c=e)

If Len(Request.Form("c"))>0 Then
   strSQL = strSQL & " AND c = " & CLng(Request.Form("c"))
End If

Fantastiskt!
Tackar.

Medlem sedan juli 200826 inlägg
#8

Jag la ett till värde och får nu ett nytt fel.

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

ger Type mismatch: 'CLng'

Medlem sedan juni 20019 519 inlägg
#9

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 ;)

Du får byta ut det mot en sträng

Medlem sedan juli 200826 inlägg
#10

Självklart, tack.

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.

tack

Medlem sedan juni 20019 519 inlägg
#11

Är Price en sträng?
Tror det skall vara:

...WHERE price BETWEEN " & Request.Form("fromprice") & " AND "& Request.Form("toprice") &" ...
Medlem sedan juli 200826 inlägg
#12

price finns i en databas, om jag ska skriva ut price så skriver jag. <%=RecSet("price")%>

Medlem sedan juni 20019 519 inlägg
#13

Men det är inte det jag frågade. Vad är det för datatyp? Är det av typen String/varchar? Eller är det ett tal?

Medlem sedan juli 200826 inlägg
#14

price är number.

Medlem sedan juni 20019 519 inlägg
#15

Då skall du inte ha ' som jag skrev i inlägg #1445222

Medlem sedan juli 200826 inlägg
#16

Jag har lite svårigheter att lägga in en ORDER BY här.
Hur gör man?

Medlem sedan juni 200032 967 inlägg
#17

Visa den kod du använder och beskriv på vilket sätt du inte får det att lira.

Medlem sedan juli 200826 inlägg
#18

Det är samma kod som ovan.

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

Jag förstår inte vart jag kan få in ORDER BY.

Medlem sedan nov. 2002830 inlägg
#19

I slutet?
ex:

   strSQL = strSQL & " AND y = " & CLng(Request.Form("y")) &" ORDER BY kolumn DESC)

ex2:

 strSQL = strSQL & " AND m = '" & SafeParam(Request.Form("m")) & "' ORDER BY kolumn DESC"

/r: Ehm, den gick iväg lite fort där... :r

Medlem sedan juni 200032 967 inlägg
#20

Order by ska vara sist.

strSQL = strSQL & " ORDER BY nått"
281 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
152 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)