webForumDet fria alternativet

validering +sub

6 svar · 237 visningar · startad av doggelito

doggelitoMedlem sedan juni 20003 076 inlägg
#1

hur fel är denna kod!!! (ska tilläggas att den funkar)

sub checkform
dim strsql_check, rs_check, req_categorytype
req_categoryname = request.form("categoryname")
req_categorytype = request.form("categorytype")
errors = 0
if Ltrim(server.htmlencode(req_categoryname)) = "" then
errors = 1
else
call connopen(objconn)
strsql_check = "select name from " & req_categorytype & " where name = '" & req_categoryname & "' "
set rs_check = objConn.execute(strsql_check)
if not rs_check.eof then
errors = 2
end if
call connclose(objconn)
end if
end sub

innan jag börjar använda samt bygga ut den här koden ville jag bara kolla om det saker som bör göras om:
är det en sub man använder eller ska den göras till en function (jag lär mig aldrig!)?
är det vettigt att öppna databasen med en sub (connopen(objconn)) när den redan ligger i en sub?
annat som är galet?

hacka på nu bara för nu har ni chansen! (ta inte i för mycket bara)

PaceMedlem sedan juni 20019 024 inlägg
#2

En sub utför enbart saker, medan en funktion samtidigt kan retunera något, t.ex. ett objekt eller liknande!

sub checkform
	dim strsql_check, rs_check, req_categorytype

	req_categoryname = request.form("categoryname")
	req_categorytype = request.form("categorytype")

	errors = 0

	if Ltrim(server.htmlencode(req_categoryname)) = "" then
		errors = 1
	else
		call connopen(objconn)
		strsql_check = "select name from " & req_categorytype & " where name = '" & req_categoryname & "' "
		set rs_check = objConn.execute(strsql_check)
		if not rs_check.eof then
			errors = 2
		end if
		call connclose(objconn)
	end if
end sub

1. Börja med indentering så att det går att läsa koden.
2. "Call connopen" kunde lika gärna göras till en funktion Set bojConn = Connopen().

doggelitoMedlem sedan juni 20003 076 inlägg
#3

En sub utför enbart saker, medan en funktion samtidigt kan retunera något, t.ex. ett objekt eller liknande!...

...har jag aldrig riktigt hajjat!
eftersom jag dimmar errors utanför subben får jag ju fram ett värde.(har en känsla av att ni kommer att skrika rakt ut nu, jag har för mig att man INTE ska dimma så, eller?)
jag använder i alla fall variabeln errors längre ner på min sida så ska jag alltså göra om koden till en function istället för som nu då, eller?

Call connopen" kunde lika gärna göras till en funktion Set bojConn = Connopen().

subben connopen och connclose använder jag på flera andra sidor så jag tyckte det var enklast att använda den här också, eftersom det funka.
men det är kanske inte "rätt" att göra så?

PaceMedlem sedan juni 20019 024 inlägg
#4

eftersom jag dimmar errors utanför subben får jag ju fram ett värde.(har en känsla av att ni kommer att skrika rakt ut nu, jag har för mig att man INTE ska dimma så, eller?)
jag använder i alla fall variabeln errors längre ner på min sida så ska jag alltså göra om koden till en function istället för som nu då, eller?

Då skulle det vara perfekt att göra en funktion av "errors" istället för att använda globala variabler.

Dim errors
errors = CheckFormForErrors()
[i]' nu kan du ju använda errors som retuneras från funktionen[/i]

Function CheckFormForErrors()
   Dim intErrors
   ...
   CheckFormForErrors = intErrors
End Function

subben connopen och connclose använder jag på flera andra sidor så jag tyckte det var enklast att använda den här också, eftersom det funka.
men det är kanske inte "rätt" att göra så?

Jo det fungerar bra i just detta scriptet. Men låt säga att du vill använda en ny databas ... då måste du skriva en ny sub som gör samma arbete. I så fall är det bättre att använda en funktion för detta. Då slipper du även att göra en funktion för varje ny typ av koppling.

doggelitoMedlem sedan juni 20003 076 inlägg
#5

okidoki :)

LarsGMedlem sedan dec. 200012 464 inlägg
#6
"select name from " & req_categorytype & " where name = '" & req_categoryname & "' "

Du har alltså flera tabeller med samma struktur?

doggelitoMedlem sedan juni 20003 076 inlägg
#7

ja, det finns ett val mellan ex. huvudkategori och underkategori i formuläret, jag har dock byggt om koden, nu ser den ut så här:
function:

dim strvalue, errors
'strtext är texten från request.form........................................................

function checkform_text(strtext)
	strvalue = Ltrim(server.htmlencode(strtext))
		if strvalue = "" then
		errors = 1
		end if
	checkform_text = strvalue
end function

'strtext är texten från request.form, mysql är sqlsträngen som texten ska jämföras med.......
function checkform_data(strtext, mysql)
dim strsql_check, rs_check
	Set objConn = F_connopen
	strsql_check = mysql
	set rs_check = objConn.execute(strsql_check)
		if not rs_check.eof then
		errors = 2
		end if
	Set objConn = F_connclose
checkform_data = strvalue
end function

och själva sidan:

req_categoryname = checkform_data(checkform_text(request.form("categoryname")),"select name from categories_head "&_
		"where name = '" & strvalue & "' ")
			if errors = 0 then
			strsql = "insert into categories_head (name, regdate) values ('" & req_categoryname & "', '" & now() & "' ) "
			Call mySql
			response.redirect "view.asp?info=create"
			end if

kom gärna med kommentarer och tips, hoppas ni förstår vad koden gör, typ! :)

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