---
title: "If - Then = problem"
type: "forum-thread"
url: "https://www.webforum.nu/amne/asp/6973-if-then-problem"
topic: "ASP"
topic_url: "https://www.webforum.nu/amne/asp"
author: "webbmannen"
published: "2000-10-29T15:27:00.000Z"
updated: "2000-10-29T19:25:00.000Z"
replies: 4
views: 226
page: 1
pages: 1
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/6973-if-then-problem"
---

# If - Then = problem

## #1 — webbmannen, 2000-10-29T15:27Z

Kan någon se något fel i detta?

```
Dim monnr, slutdatum

monnr = Request.QueryString("monad")

If monnr = 02 Then
slutdatum = 29

ElseIf monnr = 04 Or 06 Or 09 Or 11 Then
slutdatum = 30

Else monnr = 01 Or 03 Or 05 Or 07 Or 08 Or 10 Or 12
slutdatum = 31
End If
```

Som körs av:

```
For i = 1 To slutdatum
Response.Write "<td bgcolor=silver><font face=verdana,arial color=#FFFFFF size=1>"
Response.Write i
Response.Write "</font></td>"
Next
```

Av någon anledning så fungerar det som det ska på alla månader utom de som har 31 dagar. Där skrivs bara 30 ut.

Har även testat med ett avslut som ser ut så här:

```
Else
slutdatum = 31
End If
```

på slutet, men får samma resultat. Månaderna som ska ha 31 dagar får bara 30 st.

Vad är det jag inte ser/förstår :q

/webb

\[Redigerat av webbmannen den 29 okt 2000\]

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

## #2 — @nders, 2000-10-29T16:46Z

prova:

```
Dim monnr, slutdatum
monnr = Request.QueryString("monad")
slutdatum=31

If monnr = "02" Then slutdatum = 29
If monnr = "04" Or monnr = "06" Or monnr = "09" Or monnr ="11" Then slutdatum = 30
```

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

## #3 — webbmannen, 2000-10-29T18:01Z

Tack @nders,

Det fungerade perfekt :)

Nu skulle det vara ännu bättre om jag förstod varför det skulle skrivas på ditt sätt (som inte ens innehåller ett End If) och varför det inte fungerade på mitt sätt. Du eller någon annan som gitter förklara?

Stort tack

/webb

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

## #4 — emission, 2000-10-29T18:42Z

Oki

ElseIf monnr = 04 Or 06 Or 09 Or 11 Then

För det första så försöker du kolla om monnr är t.ex. 04. 04 är inte ett numeriskt värde, utan en sträng, och det måste därför inneslutas i citationstecken, dvs. "04"

För det andra fungerar logiska jämförelser inte riktigt som du skrev dem.

Om vi tänker oss att monnr innehåller värdet "04"...

```
<font size="1" face="Verdana, Arial, Helvetica, sans-serif">
if monnr="04" then
   response.write "Sant!"
else
   response.write "Falskt!"
end if
</font>
```

Här evalueras uttrycket monnr="04" och får värdet sant. "Sant!" skrivs ut.

```
<font size="1" face="Verdana, Arial, Helvetica, sans-serif">
if monnr="04" OR monnr="05" then
   response.write "Sant!"
else
   response.write "Falskt!"
end if
</font>
```

evalueras till:

```
<font size="1" face="Verdana, Arial, Helvetica, sans-serif">
if true OR false then
   response.write "Sant!"
else
   response.write "Falskt!"
end if
</font>
```

Eftersom det ena värdet i OR-jämförelsen sant (true) så blir hela uttrycket sant. "Sant!" skrivs ut.

```
<font size="1" face="Verdana, Arial, Helvetica, sans-serif">
if monnr="04" AND monnr="05" then
   response.write "Sant!"
else
   response.write "Falskt!"
end if
</font>
```

blir..

```
<font size="1" face="Verdana, Arial, Helvetica, sans-serif">
if true AND false then
   response.write "Sant!"
else
   response.write "Falskt!"
end if
</font>
```

För att A AND B ska bli True så måste både A och B vara True. Så är det inte här, och "Falskt!" skrivs ut.

Vad händer då när....

```
<font size="1" face="Verdana, Arial, Helvetica, sans-serif">
if monnr="04" AND monnr="05" OR monnr<>"" then
   response.write "Sant!"
else
   response.write "Falskt!"
end if
</font>
```

Jo, det evalueras till:

```
<font size="1" face="Verdana, Arial, Helvetica, sans-serif">
if True AND False OR True then
   response.write "Sant!"
else
   response.write "Falskt!"
end if
</font>
```

AND har precedens före OR (precis som "gånger" kommer före "plus"), så först evalueras den delen separat...

```
<font size="1" face="Verdana, Arial, Helvetica, sans-serif">
if False OR True then
   response.write "Sant!"
else
   response.write "Falskt!"
end if
</font>
```

Nu blev det dags för OR-operatorn, och eftersom uttrycket på ena sidan av OR är True, så blir hela uttrycket True. "Sant!" skrivs ut.

Vad händer då när du skriver

ElseIf monnr = 04 Or 06 Or 09 Or 11

?

Jo, det evalueras till...

ElseIf monnr = 4 Or 6 Or 9 Or 11

Vilket i sin tur blir (om monnr är 4)

ElseIf True Or True Or True Or True

Varför? Jo, de ensamma värdena jämförs inte med monnr, utan ses som egna logiska värden, där allt utom 0 är True.

Med andra ord...

```
<font size="1" face="Verdana, Arial, Helvetica, sans-serif">
if 3456 then
   response.write "Sant!"
else
   response.write "Falskt!"
end if
</font>
```

skriver ut "Sant!" medan

```
<font size="1" face="Verdana, Arial, Helvetica, sans-serif">
if 0 then
   response.write "Sant!"
else
   response.write "Falskt!"
end if
</font>
```

Skriver ut "Falskt!"

Raden...

Else monnr = 01 Or 03 Or 05 Or 07 Or 08 Or 10 Or 12

Fungerar heller inte, dels beroende på ovanstående, dels beroende på att ingen fråga ställs. Till det behövs If eller ElseIf.

Man behöver inte End If om man skriver det som ska hända om if-satsen blir sann, på samma rad.

Jmfr.

```
if a=1 then
   blablabla
end if
```

```
if a=1 then blablabla
```

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

## #5 — webbmannen, 2000-10-29T19:25Z

Hej och tack emission,

Det svaret måste väl ändå ge högsta betyg åt läsvärdet i denna tråd va :e

/webb (som blev lite klokare denna gång ;) )

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

---

Tråden på webben: https://www.webforum.nu/amne/asp/6973-if-then-problem
