webForumDet fria alternativet

If - Then = problem

4 svar · 213 visningar · startad av webbmannen

webbmannenMedlem sedan dec. 1999826 inlägg
#1

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]

@ndersMedlem sedan juni 200032 969 inlägg
#2

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

------------------
<A HREF="http://cartman.nu" TARGET=_blank>
sucky, sucky. five dallah!</A>

[Redigerat av @nders den 29 okt 2000]

webbmannenMedlem sedan dec. 1999826 inlägg
#3

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

emissionMedlem sedan dec. 19996 721 inlägg
#4

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

------------------
-------------------
What a waste it is to lose one's mind. Or not to have a mind is being very wasteful. How true that is.
Dan Quayle

webbmannenMedlem sedan dec. 1999826 inlägg
#5

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

134 ms totalt · 3 externa anrop · v20260731065814-full.3ab8d573
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)