webForumDet fria alternativet

förbättra if sats och göra om till funktion?

ASP

11 svar · 555 visningar · startad av Percy

Medlem sedan mars 2000187 inlägg
Frågan#1

Hej!

Har en lång if-sats som kollar så att användaren uppfyller vissa kriterier innan den får registrera sig. Koden känns dock ganska lång och klumpig, det kanske finns ngt mkt bättre sätt att skriva på? göra den till en funktion också?
Hur skulle LarsG och ni andra göra? :-)

If Len(DeliverySurname) < 1 Then
	session("empty") = "Du måste ange ett förnamn"
	pass = "no"
ElseIf Len(DeliveryLastname) < 1 Then
	session("empty") = "Du måste ange ett efternamn"
	pass = "no"
ElseIf Len(DeliveryStreetname) < 1 Then
	session("empty") = "Du måste ange en gatuadress"
	pass = "no"
ElseIf Len(DeliveryZipcode) < 1 Then
	session("empty") = "Du måste ange ett postnummer"
	pass = "no"
ElseIf Len(DeliveryCity) < 1 Then
	session("empty") = "Du måste ange en postadress"
	pass = "no"
ElseIf Len(phone) < 1 Then
	session("empty") = "Du måste ange ett telefonnummer"
	pass = "no"
ElseIf Len(email) < 1 Then
	session("empty") = "Du måste ange en e-postadress"
	pass = "no"
ElseIf Len(password1) < 1 Then
	session("empty") = "Du måste ange ett lösenord"
	pass = "no"
ElseIf Len(password1) < 6 Then
	session("empty") = "lösenordet måste innehålla minst 6 tecken"
	pass = "no"
ElseIf Len(password2) < 1 Then
	session("empty") = "Du måste bekräfta lösenordet"
	pass = "no"
ElseIf NOT password1 = password2 Then
	session("empty") = "lösenorden matchar ej varandra"
	pass = "no"
Else
	strEmail = "SELECT email FROM tb_customer WHERE email = '" & email & "'"
	Set objEmail = Connection.Execute(strEmail)

	IF NOT objEmail.EOF Then
		session("empty") = "E-postadressen är upptagen"
		pass = "no"
	End If
End If

tack på förhand

Medlem sedan jan. 20022 440 inlägg
#2

Men funkar inte den utmärkt ? :) Samma sätt som jag själv skulle gjort det på men den känns "klumpig" som du säger ;)

Medlem sedan mars 2000187 inlägg
#3

den fungerar, dock vill ha försöka optimera den. hur gör jag för att göra den till en funktion? lr är det en sub jag ska göra? har inte riktigt koll på d..

Medlem sedan feb. 20001 590 inlägg
#4

Vad händer om flera fält i formuläret inte är ifyllda?

Även om du gör en funktion, så kommer den att innehålla stort sett samma kod.

/T

Medlem sedan mars 20015 287 inlägg
#5

Precis, vad händer om flera fällt inte är ifyllda? Nu klagar väl det scriptet bara på det första felet den hittar?

Medlem sedan mars 2000187 inlägg
#6

japp, sant, hade gärna velat ha att den postar tillbaks allt igen och visar alla de fält som inte är korrekt ifyllda med någon sorts "errorcode"

ngn duktig som har ngt förslag hur man gör d?

alltså, de värden som är ifyllda innan man postar formuläret kommer fortfarande vara ifyllda precis som nu, skillnaden är att jag vill att den skriver ut ex. "du måste fylla i blablabla" till höger om resp. textruta som inte är korrekt ifylld.

Medlem sedan mars 20015 287 inlägg
#7

För att få med dig alla felaktigheter kan du kanske göra något likt detta: (Dock löser inte det din andra ide med en pekning på rätt fält.)
Dock om du väljer att kolla med javascript så kan du ju lätt kolla vilket fält som är tomt och ställa markören där.

If Len(DeliverySurname) < 1 Then
	empty = "Du måste ange ett förnamn"
	pass = "no"
End If
If Len(DeliveryLastname) < 1 Then
	empty = empty & "Du måste ange ett efternamn"
	pass = "no"
End If
'osv

session("empty") = empty
Medlem sedan mars 2000187 inlägg
#8

ok, tack men jag vill ha det så som jag tidigare beskrev dvs

loopa igenom alla formfields och till de obligatoriska fält som inte är ifyllda rätt genereras en felkod.

denna borde man väl kunna lagra i hiddenfields istället för att använda sig av en session? (spara på kapacitet)

Medlem sedan mars 2000187 inlägg
#9

LarsG, var är du då man behöver din hjälp???

lr finns d ngn annan kunnig person som kanske kan bidra m ngt i kodväg?

stort tack!

Medlem sedan juni 20019 024 inlägg
#10

Sådär, det enda du behöver är ändra är två matriser (arrRequiredFields som innehåller de fältnamn som ska kontrolleras samt arrRequiredFieldsErrors som innehåller det felmeddelande som ska visas för det fältnamnet som ligger i samma index).

intIndex = 0
[red]arrRequiredFields = Array("DeliverySurname", "DeliveryLastname", "DeliveryStreetname")
arrRequiredFieldsErrors = Array("Förnamn saknas", "Efternamn saknas", "Gata saknas")[/red]

For Each Var In arrRequiredFields
	If Len(Request.Form(Var)) < 1 Then
		strErrorMessages = strErrorMessages & "<LI>" & arrRequiredFieldsErrors(intIndex)
	intIndex = intIndex + 1
Next

If strErrorMessage <> "" Then
	Session("empty") = strErrorMessages
End If
Medlem sedan mars 20015 287 inlägg
#11

Snyggt Pace!

Medlem sedan jan. 20022 440 inlägg
#12

Pace skrev:

Sådär, det enda du behöver är ändra är två matriser (arrRequiredFields som innehåller de fältnamn som ska kontrolleras samt arrRequiredFieldsErrors som innehåller det felmeddelande som ska visas för det fältnamnet som ligger i samma index).

intIndex = 0
[red]arrRequiredFields = Array("DeliverySurname", "DeliveryLastname", "DeliveryStreetname")
arrRequiredFieldsErrors = Array("Förnamn saknas", "Efternamn saknas", "Gata saknas")[/red]

For Each Var In arrRequiredFields
	If Len(Request.Form(Var)) < 1 Then
		strErrorMessages = strErrorMessages & "<LI>" & arrRequiredFieldsErrors(intIndex)
	intIndex = intIndex + 1
Next

If strErrorMessage <> "" Then
	Session("empty") = strErrorMessages
End If

Var ska jag placera denna lilla kodsnutt för att få det att fungera ?

266 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
128 ms — deklarationer (db)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)