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 ;).
Ä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.
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.
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?
261 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849