per-vMedlem sedan maj 200161 inlägg Hej!
Har sökt på lite olika saker här på webforum för att kanske finna en lösning, men det gör jag inte, så jag ställer en fråga.
Jag tänkte använda mig av Paces förslag på validering av ett formulär. Dock så går det inte så bra...
Det där med arrayer och liknande har jag inte den blekaste om, så någon gång måste ju vara den första.
Hur som helst så ser min kod ut som nedan.
objTimecardDays = Request.Form("days")
If objTimecardDays = 1 Then
arrRequiredFields = Array("date1", "hours1")
arrRequiredFieldsErrors = Array("Datum för dag 1 saknas", "Antal timmar för dag 1 saknas")
ElseIf objTimecardDays = 1 Then
arrRequiredFields = Array("date1", "hours1", "date2", "hours2")
arrRequiredFieldsErrors = Array("Datum för dag 1 saknas", "Antal timmar för dag 1 saknas", "Datum för dag 2 saknas", "Antal timmar för dag 2 saknas")
End If
intIndex = 0
strErrorMessages = ""
For Each Var In arrRequiredFields
If Len(Request.Form(Request.Form(Var))) < 1 Then
strErrorMessages = strErrorMessages & " <li>" & arrRequiredFieldsErrors(intIndex) & "</li>" & VbCrlf
End If
intIndex = intIndex + 1
Next
När jag kör ovanstående kod så får jag följande felmeddelande.
Microsoft VBScript runtime error '800a01c3'
Object not a collection
/timmar/db.asp, line 67
På linje 67 har jag följande.
For Each Var In arrRequiredFields
Så jag antar att det har något med "Var" att göra.
Hur som helst så är jag dyngsur av regnet som precis öste ner på mig på jobbet och helt slut i huvudet, så jag behöver hjälp ;).
Tack på förhand!
GuffaMedlem sedan juni 2004533 inlägg Är arrRequiredFields en array? Ifall objTimecardDays har något annat värde än ett så kommer det ju inte att skapas några arrayer.
Jesper TMedlem sedan nov. 20017 144 inlägg Du kan kolla med isarray() först.
If isarray(arrRequiredFields) then
For Each Var In arrRequiredFields
...
Next
End if
per-vMedlem sedan maj 200161 inlägg
Guffa skrev:
Är arrRequiredFields en array? Ifall objTimecardDays har något annat värde än ett så kommer det ju inte att skapas några arrayer.
objTimecardDays är ett värde som kommer från en select i ett formulär, och där är värdet ... upps, nu såg jag ett fel direkt. Jag har ju satt värdet "1" i alla "Else If". Det ska vi nog ändra på. Men för att svara på din fråga så har objTimecardDays ett värde mellan 1-2 i selecten.
Ska prova med Jesper Ts variant nu...
per-vMedlem sedan maj 200161 inlägg
Jesper T skrev:
Du kan kolla med isarray() först.
If isarray(arrRequiredFields) then
For Each Var In arrRequiredFields
...
Next
End if
Det var ingen array, så nu har jag sökt här och lagt in
dim arrRequiredFields(10)
dim arrRequiredFieldsErrors(10)
.
Nu får jag dock ett nytt felmeddelande.
Microsoft VBScript runtime error '800a000d'
Type mismatch
/timmar/db.asp, line 49
Rad 49.
arrRequiredFields = Array("date1", "hours1")
Nej, jag ska nog hålla mig till att snickra...
GuffaMedlem sedan juni 2004533 inlägg Ifall objTimecardDays kommer ifrån formulärdatat så kommer det aldrig att ha värdet ett eller två, såvida du inte konverterat värdet till ett tal. Request.Form returnerar alltid en sträng (eller en IStringList för att vara exakt). Värdet kommer alltså att vara en sträng; "1" eller "2".
Ifall du jämför en sträng med ett tal så kommer det inte att fungera. "1" är inte lika med 1.
per-vMedlem sedan maj 200161 inlägg
Guffa skrev:
Ifall du jämför en sträng med ett tal så kommer det inte att fungera. "1" är inte lika med 1.
Hej igen...
Nu har jag satt en cInt runt mitt objTimecardDays.
objTimecardDays = cInt(Request.Form("days"))
Forfarande samma fel tyvärr.
Tack för att du tar dig tid!
GuffaMedlem sedan juni 2004533 inlägg Använd CLng istället för CInt. Det gör visserligen ingen skillnad i det här fallet, men det finns mycket sällan någon anledning att använda integer istället för long.
Lägg en Else i If-satsen där du skriver ut ett felmeddelande, så att du ser att något av alternativen verkligen används.
Eftersom du ändå behöver en räknare, varför inte använda den i For-loopen?
For intIndex = 0 to UBound(arrRequiredFields)
Var = arrRequiredFields(intIndex)
...
Next
Jag ser att du använder Request.Form(Request.Form(Var)). Har du verkligen formulärfält som innehåller namnen på andra formulärfält?