webForumDet fria alternativet

Array problem

ASP

11 svar · 514 visningar · startad av golgata

Medlem sedan maj 2000131 inlägg
Frågan#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
%>
Medlem 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?

Medlem 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

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.

Medlem 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) ?

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

Medlem 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)

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å?

Medlem sedan maj 2000131 inlägg
#9

Det är reDim jag tänker på.

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.

Medlem 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
%>
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.

263 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
120 ms — deklarationer (db)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)