webForumDet fria alternativet

Array problem

11 svar · 514 visningar · startad av golgata

golgataMedlem sedan maj 2000131 inlägg
#1

Har följande kod för att spara varor i en kundvagn. Här sparas id och antal i arrayn. Nu vill jag även lägga till storlek och splita upp den rätt så att den kommer med i arrayn. Den hämtas från lägg till vara med Request("storlek")
Men hur lägger jag till det här så att det blir rätt.

Lägger jag till MyArray(2,x) = hamta2(2) så får jag felmeddelande
Subscript out of range

Vad är felet?

 
<%

Response.Cookies(Session.SessionID)(Request("id")) = Request("antal")
Response.Cookies(Session.SessionID).Expires = DateAdd("h", 2, now)
nyprod = Request("antal") & "st <b>"  & Request("namn") & "</b> á "
priset = Request("pris")
nyprod = nyprod & priset & " kr"
nyprod = nyprod & "<br>Har lagts i din kundvagn"
Session("nyprod") = nyprod
Response.Redirect Request.ServerVariables("HTTP_REFERER")

varde = Request.Cookies(""& Session.SessionID &"") 
Response.Write varde & "<br><br>"
hamta = Split(varde,"&")
ReDim MyArray(4,Ubound(hamta))
for x = 0 to ubound(hamta)
hamta2 = Split(hamta(x),"=")
MyArray(0,x) = hamta2(0)
MyArray(1,x) = hamta2(1)

Response.Write "id: " & hamta2(0) & "<br>"
Response.Write "antal: " & hamta2(1) & "<br>"
	response.write hamta(x) & "<br><br>" 
next
For i = 0 To Ubound(myArray,2)
   Response.write myArray(0,i)
   Response.Write myArray(1,i)
Next
%>
emissionMedlem sedan dec. 19996 721 inlägg
#2

1. Varför lagra något i cookies som ändå är knutet till Session?

2. hamta2(2) förutsätter att Split(hamta(x),"=") returnerar minst 3 element. Innehåller strängen verkligen 2 likamedtecken?

golgataMedlem sedan maj 2000131 inlägg
#3

Nej problemet är att jag inte får in ett andra = tecken. lägger jag till det så blir det %D3
Fattar inte hur jag ska göra för att få in storlek i arrayn. Något tips?
lägger jag till Request("storlek") efter Response.Cookies(Session.SessionID)(Request("id")) = Request("antal") så tilldeles
MyArray(1,x) = hamta2(1) hela värdet. Hur gör jag för att dela MyArray(1,x) = hamta2(1)
värde=102 till
MyArray(1,x) = hamta2(1) =1
MyArray(2,x) = hamta2(2) =02

J.N.Medlem sedan apr. 20031 660 inlägg
#4

HEJ!

Låter konstigt att ett likamedtecken kodas med %D3?
Testa med något annat tecken, och se om problemet kvarstår.

golgataMedlem sedan maj 2000131 inlägg
#5

om jag sätter ett annat tecken så kan det bli %D2

Hur splitar jag upp hamta2(1) så att första siffran blir hamta2(1) och de 2 övriga blir hamta2(2) ?

J.N.Medlem sedan apr. 20031 660 inlägg
#6

Om du kan få = till att altlid bli %D3 på andra positionen, kan du ju splita som vanligt, och sätta ihop arr(1) och arr(2), och köra replace till =.

Men, det är ju ingen säker väg, och då får du nog använda Left, och hämta det antal tecken som InStr ger till likamedstecknet.

http://www.devguru.com/Technologies/vbscript/quickref/Left.html
http://www.devguru.com/Technologies/vbscript/quickref/InStr.html

golgataMedlem sedan maj 2000131 inlägg
#7

Nu har jag delat upp så att allt ser rätt ut .
Kod:

test = left(varde,2)
test1 = mid(varde,4,1)
test2 = right(varde,5)

Hur får jag in det i följande så att det passar övrig kod.
Kod:

ReDim MyArray(4,Ubound(hamta))
for x = 0 to ubound(hamta)

MyArray(0,x) = hamta2(0)
MyArray(1,x) = hamta2(1)
MyArray(2,x) = hamta2(2)

J.N.Medlem sedan apr. 20031 660 inlägg
#8

Räcker det inte med att sätta
MyArray(0,x) = test
MyArray(1,x) = test2
MyArray(2,x) = test3

Eller det är ReDim:en du tänker på?

golgataMedlem sedan maj 2000131 inlägg
#9

Det är reDim jag tänker på.

J.N.Medlem sedan apr. 20031 660 inlägg
#10

Okej. Har själv använt ReDim för att krympa arrayer för länge sedan. Var svårt att förstå och få rätt på.

Men, fungerar det inte utan, dvs behöves den?
Varför finns den med, helt enkelt?

Posta gärna den kod du fått till nu, så vi vet vad vi håller på med.

golgataMedlem sedan maj 2000131 inlägg
#11

här kommer hela koden. Vad jag förstår så måste den vara med för allt annat script ska fungera. Här är säkert någon kod som inte behövs men jag har testat så mycket nu så jag vet knappt ut eller in.

<%

Response.Cookies(Session.SessionID)(Request("id")) = Request("antal") & Request("storlek")
Response.Cookies(Session.SessionID).Expires = DateAdd("h", 2, now)
nyprod = Request("antal") & "st <b>"  & Request("namn") & "</b> á "
priset = Request("pris")
nyprod = nyprod & priset & " kr"
nyprod = nyprod & "<br>Har lagts i din kundvagn"
Session("nyprod") = nyprod
'Response.Redirect Request.ServerVariables("HTTP_REFERER")

varde = Request.Cookies(""& Session.SessionID &"") 
hamta = left(varde,2)
hamta1 = mid(varde,4,1)
hamta2 = right(varde,5)
response.write "id " & hamta & "<br>"
response.write "antal " & hamta1 & "<br>"
response.write "storlek " & hamta2 & "<br><br>"

test1 = (hamta &"="& hamta1 &","& hamta2)
hamta6 = Split(test1,",")
response.write test1 & "<br>"

ReDim MyArray(1,Ubound(hamta6))
for x = 0 to ubound(hamta6)
hamta7 = Split(hamta6(x),"=")

MyArray(0,x) = hamta7(0)
MyArray(1,x) = hamta7(1)
MyArray(2,x) = hamta7(2)

next
For i = 0 To Array,2
Response.write Array(0,x)
Response.Write myArray(1,i)
Response.Write myArray(2,i)
Next
For i = 0 To Ubound(myArray,2)
   Response.write myArray(0,i)
   Response.Write myArray(1,i)
   Response.Write myArray(2,i)
   Next
%>
J.N.Medlem sedan apr. 20031 660 inlägg
#12

Okej.

För att detta ska gå lösa måste du också berätta varför du har koden.

Har väldigt svårt för att förstå vad koden ska göra, och varför ReDim behövs överhuvudtaget. Eftersom jag inte hållt på med kundvagnar kan jag inte säga om du gör ett generellt fel, eller om du är på rätt spår.

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