webForumDet fria alternativet

If...ElseIf

ASPur ASP

11 svar · 638 visningar · startad av devotion

Medlem sedan jan. 20013 582 inlägg
Frågan#1

:h

Hepp på er i sommarnatten! :)

Jag har knåpat ihop nedanstående:

while not RsVehicle.EOF
		
			sVehicleName=RsVehicle("Name")
			sVehicleNr=RsVehicle("Nr")
			
			If g_ListVehicleListType = 0 then
					sListType=sVehicleNr
				Elseif g_ListVehicleListType = 1 then
						sListType=sVehicleName
					Else
						sListType=sVehicleName & " - " & sVehicleNr
			End If
			
			s=s & "<option value='" & sVehicleName & "'"
			if sVehicleName=par_vehicle then s=s& " selected"
			s=s & ">" & sListType & "</option>"
			if sVehicleName=par_vehicle then par_vehicle_id=sVehicleId
			if sVehicleName=par_vehicle then par_vehicle_nr=sVehicleNr
			RsVehicle.MoveNext
		wend

Kan man optimera detta, eller göra det snyggare? Det funkar som det är tänkt, men jag är lite ringrostig.

Det jag mest tänker på är If..ElseIf-satsen...

Mvh
Henrik

Medlem sedan dec. 19996 721 inlägg
#2

Det ser bra ut.

Medlem sedan jan. 20013 582 inlägg
#3

Säger du det så.... :)

Mvh
Henrik

Medlem sedan jan. 20013 582 inlägg
#4

Men..... ;)

Nu ser koden ut så här:

dim g_ListVehicleSortOrder
dim g_ListVehicleSortType
dim g_ListVehicleListType

'Sorteringsordning. "ASC"=stigande, "DESC"=fallande
g_ListVehicleSortOrder = "ASC"

'Väljer hur resurserna ska sorteras i listmenyn. 1=Namn, 2=Nummer
g_ListVehicleSortType = 2

'Variabeln; g_ListVehicleListType styr vad som skall visas listmenyn. 0=registreringsnummer, 1=namn, 2=registreringsnummer och namn
g_ListVehicleListType = 2

'Funktion för att ange sorteringstyp
dim listVehicleSortType
listVehicleSortType = "[tblResource].[Name] "
If g_ListVehicleSortType <> 1 Then listVehicleSortType = "[tblResource].[Nr] " End if

...

' Hitta resurser som har loggposter
    	sSQLVehicle="SELECT DISTINCT [tblResource].[Id], [tblResource].[Nr], [tblResource].[Name]" _
    	& " FROM tblResource INNER JOIN tblResourceLog ON [tblResource].[Id] = [tblResourceLog].[ResourceId]" _
    	& " GROUP BY [tblResource].[Id], [tblResource].[Nr], [tblResource].[Name], [tblResource].[LogUnit]" _
    	& " HAVING ([tblResource].[LogUnit])='km' OR ([tblResource].[LogUnit])='mil'" _
    	& " ORDER BY " & g_ListVehicleSortType & g_ListVehicleSortOrder 
		
		s="<option>--- Fordon ---</option>"
		
		RsVehicle.Open sSQLVehicle, Conn, 1
		while not RsVehicle.EOF
		
			sVehicleName=RsVehicle("Name")
			sVehicleNr=RsVehicle("Nr")
			
			If g_ListVehicleListType = 0 then
					sListType=sVehicleNr
				Elseif g_ListVehicleListType = 1 then
						sListType=sVehicleName
					Else
						
						sListType=sVehicleName & " - " & sVehicleNr
						If g_ListVehicleSortType <> 1 Then sListType = sVehicleNr & " - " & sVehicleName End if
			End If
			
			s=s & "<option value='" & sVehicleName & "'"
			if sVehicleName=par_vehicle then s=s& " selected"
			s=s & ">" & sListType & "</option>"
			if sVehicleName=par_vehicle then par_vehicle_id=sVehicleId
			if sVehicleName=par_vehicle then par_vehicle_nr=sVehicleNr
			RsVehicle.MoveNext
		wend

Det fungerar fortfarande som det är tänkt, att man kan sätta olika värden på variablerna och på så sätt ändra hur listmenyn byggs upp, men går det inte göra snyggare? :)

Mvh
Henrik

Medlem sedan dec. 19996 721 inlägg
#5

Nej, det är helt OK. Det enda jag skulle vilja ändra på är

If g_ListVehicleSortType <> 1 Then listVehicleSortType = "[tblResource].[Nr] " End if

Ta bort "End if". Behövs inte på enradssatser.

Skulle också gärna se att du gör om g_ListVehicleSortType till det riktiga kolumnnamnet (eventuellt efter att man själv valt med en siffra).

Medlem sedan jan. 20013 582 inlägg
#6

emission skrev:

Ta bort "End if". Behövs inte på enradssatser.

Just det.... Done! :)

emission skrev:

Skulle också gärna se att du gör om g_ListVehicleSortType till det riktiga kolumnnamnet (eventuellt efter att man själv valt med en siffra).

Jag är trött och fattar inte riktigt hur du menar... :r

Mvh
Henrik

Medlem sedan dec. 19996 721 inlägg
#7

devotion skrev:

Jag är trött och fattar inte riktigt hur du menar... :r

Då får du vila upp dig.

Det jag menar att det är onödigt och lite förändringskänsligt att ange sorteringsordningen med kolumnnumret, i stället för kolumnnamnet.

Medlem sedan jan. 20013 582 inlägg
#8

aha! :)

Okidoki, jag fattar!

//Henrik

Medlem sedan maj 200010 687 inlägg
#9

Indenteringen på din If är lite tokig. Så här blir bättre:

			If g_ListVehicleListType = 0 then
				sListType=sVehicleNr
			Elseif g_ListVehicleListType = 1 then
				sListType=sVehicleName
			Else
				sListType=sVehicleName & " - " & sVehicleNr
			End If

Om dina variabler inte är variabla utan konstanta så kan du ange dem som konstanter istället.

Const g_ListVehicleSortType = 2

Sen att inte göra någon HTMLEncode på sVehicleName kan öppna upp för Cross Site Scripting säkerhetshål.

Medlem sedan jan. 20013 582 inlägg
#10

Erik Juhlin skrev:

Indenteringen på din If är lite tokig. Så här blir bättre:

			If g_ListVehicleListType = 0 then
				sListType=sVehicleNr
			Elseif g_ListVehicleListType = 1 then
				sListType=sVehicleName
			Else
				sListType=sVehicleName & " - " & sVehicleNr
			End If

Ja, lite snyggare... :)

Erik Juhlin skrev:

Sen att inte göra någon HTMLEncode på sVehicleName kan öppna upp för Cross Site Scripting säkerhetshål.

Hmmm, skulle du kunna utveckla det lite? :)

Mvh
Henrik

Medlem sedan maj 200010 687 inlägg
#11

Om det finns möjlighet för användaren att ange vehicle name på något sätt så skulle det vara möjligt att mixtra med cookies och annat för andra användare.
Sen så skulle det bugga ur så fort en vehicle name har ett ' tecken.

Medlem sedan jan. 20013 582 inlägg
#12

Tänkvärt! :)

Tack! :bire

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