SebbeMedlem sedan jan. 20032 285 inlägg Jag börjar bli lite lagom irriterad på detta nu! Håller på och gör ett upload-script utan komponent, liknande OveRRidEs, dels för att jag har lite att göra och dels för att hjälpa en annan kille som behöver det.
Nu till problemet: i metoden till klassen som plockar ut vanliga textfält i formuläret måste jag använda Split() på en array för att få ut rätt fält för att plocka ut värdet.
När jag använder den här koden:
arrMatch = Split(arrFields(intForm), vbCrLf)
får jag felmeddelandet
Microsoft VBScript runtime error '800a0009'
Subscript out of range: 'intForm'
/sebbe/upload/class.asp, line 144
Men när jag skriver ut värdet i arrayen med
Response.Write(Replace(arrFields(intForm), vbCrLf, "<br>")) : Response.End
så får jag helt rätt resultat utskrivet. Någon som har någon aning om vad som kan vara fel?
@ndersMedlem sedan juni 200032 969 inlägg Om du ger oss lite mer kod så kan vi fundera lite mer.
Det är inte så att du modifierar värdet på intForm lite galet?
SebbeMedlem sedan jan. 20032 285 inlägg Såhär ser hela funktionen ut:
Public Function Form(str)
strBin = Request.BinaryRead(Request.TotalBytes)
strTemp = ""
For i = 1 To LenB(strBin)
strTemp = strTemp & Chr(AscB(MidB(strBin, i, 1)))
Next
arrFields = Split(strTemp, "-----------------------------7d")
For i = 1 To UBound(arrFields) - 1
arrField = Split(arrFields(i), vbCrLf)
For j = 1 To UBound(arrField)
With New RegExp
.IgnoreCase = True
.Global = True
.Pattern = "name=""[^""]+"""
For Each Match In .Execute(arrField(j))
strMatch = Mid(Match.Value, 7)
strMatch = Left(strMatch, Len(strMatch) - 1)
Next
End With
If Trim(LCase(strMatch)) = LCase(Trim(str)) Then
intForm = i
Exit For
End If
Next
Next
arrMatch = Split(arrFields(intForm), vbCrLf)
Form = arrMatch(UBound(arrMatch) - 1)
End Function
@ndersMedlem sedan juni 200032 969 inlägg Kolla så intForm har samma värde då det blir fel resp. rätt (dina två exempel i ditt första inlägg.
Jag hinner inte kika mer nu, men det gör säkert någon annan. :)
Mvh
SebbeMedlem sedan jan. 20032 285 inlägg När jag skriver ut intForm så skrivs det ut 2, men när jag sedan, direkt efter, testar att köra
arrMatch = Split(arrFields(2), vbCrLf)
får jag felmeddelandet
Microsoft VBScript runtime error '800a0009'
Subscript out of range: '[number: 2]'
/sebbe/upload/class.asp, line 144
Detta är som sagt väldigt konstigt!
cyprysMedlem sedan dec. 20003 563 inlägg nope. Inom datorvärlden börjar man räkna från 0.
2 element i en array får namnen:
array(0) och array(1)
SebbeMedlem sedan jan. 20032 285 inlägg
cyprys skrev:
nope. Inom datorvärlden börjar man räkna från 0.
2 element i en array får namnen:
array(0) och array(1)
Jo, men kolla nämre på funktionen. Jag ger ju intForm samma värde som kontrollvariabeln (i) i for-loopen, alltså måste ju det värdet som intForm får finnas som index i arrayen.
cyprysMedlem sedan dec. 20003 563 inlägg Testa att skriva ut variablerna allteftersom funktionen körs. Vad säger den då?
SebbeMedlem sedan jan. 20032 285 inlägg Har testat det, och allt är som det ska. Jag får ju till och med rätt utskrift när jag skriver ut värdet i arrayen, men när jag ska lägga in det i en variabel av nåt slag eller använda Split() på den så får jag felmeddelande.
Snubben som skriver här hade skrivit fel namn på ett fält i ett formulär. Kolla speciellt på sista svaret i den tråden, kanske kan hjälpa? :D
Annars kanske denna Google-sökning kan ge något? :)
SebbeMedlem sedan jan. 20032 285 inlägg Koden
Response.Write(UBound(arrFields) & "<br><br>")
For i = 0 To UBound(arrFields)
Response.Write(Replace(arrFields(i), vbCrLf, "<br>") & "<br><br>")
Next
Response.End
gav utskriften
4
424f16a01f8
Content-Disposition: form-data; name="test"
bla
424f16a01f8
Content-Disposition: form-data; name="test2"
ha
424f16a01f8
Content-Disposition: form-data; name="fil"; filename=""
Content-Type: application/octet-stream
424f16a01f8--
Det som är väldigt märkligt är att det funkar att bara skriva ut array-värdet, men man kan inte lägga in det i en annan variabel!
Fortfarande inte löst problemet? Det verkar konstigt. :l
SebbeMedlem sedan jan. 20032 285 inlägg
m_soderlund skrev:
Fortfarande inte löst problemet? Det verkar konstigt. :l
Nej, och ja, det är konstigt.
Har dock försökt löst det på ett annat sätt, men då verkar det som om funktionen bara körs en gång. Nya koden:
Public Function Form(str)
strBin = Request.BinaryRead(Request.TotalBytes)
strTemp = ""
For i = 1 To LenB(strBin)
strTemp = strTemp & Chr(AscB(MidB(strBin, i, 1)))
Next
arrFields = Split(strTemp, "-----------------------------7d")
For i = 1 To UBound(arrFields) - 1
arrField = Split(arrFields(i), vbCrLf)
For j = 1 To UBound(arrField)
With New RegExp
.IgnoreCase = True
.Global = True
.Pattern = "name=""[^""]+"""
For Each Match In .Execute(arrField(j))
strMatch = Mid(Match.Value, 7)
strMatch = Left(strMatch, Len(strMatch) - 1)
Next
End With
If Trim(LCase(strMatch)) = Trim(LCase(str)) Then
strReturn = arrField(UBound(arrField) - 1)
Exit For
End If
Next
Next
Form = strReturn
End Function
Och koden där jag ska använda funktionen:
Set objUpload = New Upload
Response.Write(objUpload.Form("test") & "<br>" & objUpload.Form("test2"))
Set objUpload = Nothing
Om jag byter håll på utskriften, så att test2 skrivs ut före test så skrivs dock test2 ut, men inte test. Detta är nästan lika konstigt, så hjälp välkomnas verkligen!
SebbeMedlem sedan jan. 20032 285 inlägg Ingen som har någon aning om det nya problemet heller?
När jag har haft såna här omöjliga problem har jag i alla fall startat om datorn. ;) (LOL)
Några gånger har det fungerat efteråt. Dags att göra det för dig också? :D
SebbeMedlem sedan jan. 20032 285 inlägg Tyvärr är det så att scriptet ligger på aleborg och jag har inte möjlighet att testa det på min egen dator just nu. Kan dock testa det någon gång nästa vecka, tack för tipset. :)