---
title: "Om inte en är vald?"
type: "forum-thread"
url: "https://www.webforum.nu/amne/asp/174848-om-inte-en-är-vald"
topic: "ASP"
topic_url: "https://www.webforum.nu/amne/asp"
author: "parse"
published: "2008-10-19T19:30:29.000Z"
updated: "2009-01-31T16:03:21.000Z"
replies: 33
views: 1449
page: 1
pages: 2
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/asp/174848-om-inte-en-är-vald"
---

# Om inte en är vald?

_Sida 1 av 2._

## #1 — parse, 2008-10-19T19:30Z

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

Permalänk: https://www.webforum.nu/p/174848

## #2 — OveRRidE, 2008-10-19T19:40Z

Har du någon kod?

Permalänk: https://www.webforum.nu/p/2150347

## #3 — parse, 2008-10-19T21:21Z

> **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

Permalänk: https://www.webforum.nu/p/2150367

## #4 — OveRRidE, 2008-10-20T07:50Z

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

Permalänk: https://www.webforum.nu/p/2150382

## #5 — parse, 2008-10-22T15:46Z

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

Permalänk: https://www.webforum.nu/p/2150673

## #6 — voigtann1, 2008-10-22T17:31Z

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
```

Permalänk: https://www.webforum.nu/p/2150683

## #7 — parse, 2008-10-29T19:50Z

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

Permalänk: https://www.webforum.nu/p/2151469

## #8 — parse, 2008-11-14T16:22Z

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'

Permalänk: https://www.webforum.nu/p/2153188

## #9 — voigtann1, 2008-11-14T19:45Z

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

Permalänk: https://www.webforum.nu/p/2153210

## #10 — parse, 2008-11-15T14:51Z

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

Permalänk: https://www.webforum.nu/p/2153296

## #11 — voigtann1, 2008-11-15T15:36Z

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

```
...WHERE price BETWEEN " & Request.Form("fromprice") & " AND "& Request.Form("toprice") &" ...
```

Permalänk: https://www.webforum.nu/p/2153301

## #12 — parse, 2008-11-15T17:38Z

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

Permalänk: https://www.webforum.nu/p/2153318

## #13 — voigtann1, 2008-11-15T18:19Z

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?

Permalänk: https://www.webforum.nu/p/2153320

## #14 — parse, 2008-11-15T19:11Z

price är number.

Permalänk: https://www.webforum.nu/p/2153322

## #15 — voigtann1, 2008-11-15T21:29Z

Då skall du inte ha ' som jag skrev i inlägg [\#1445222](http://www.webforum.nu/showthread.php?p=1445222#post1445222)

Permalänk: https://www.webforum.nu/p/2153343

## #16 — parse, 2009-01-21T19:46Z

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

Permalänk: https://www.webforum.nu/p/2166166

## #17 — @nders, 2009-01-22T04:09Z

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

Permalänk: https://www.webforum.nu/p/2166180

## #18 — parse, 2009-01-22T17:56Z

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.

Permalänk: https://www.webforum.nu/p/2166233

## #19 — Sasch, 2009-01-22T18:45Z

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

Permalänk: https://www.webforum.nu/p/2166239

## #20 — @nders, 2009-01-23T04:43Z

Order by ska vara sist.

```
strSQL = strSQL & " ORDER BY nått"
```

Permalänk: https://www.webforum.nu/p/2166266

---

Tråden på webben: https://www.webforum.nu/amne/asp/174848-om-inte-en-är-vald  
Nästa sida: https://www.webforum.nu/amne/asp/174848-om-inte-en-är-vald/page2.md
