Avatar billede Slettet bruger
04. august 2006 - 21:39 Der er 17 kommentarer og
1 løsning

Problemer med split og array

Jeg prøver at vise indholdet af en indkøbskurv med dette script, men når det kommer til vareARR så kommer følgende fejl:

Indekset er uden for området: '[number: 0]'

Indholdet af Session("basket") gemmes på følgende måde:

#varenr¤købsantal

<%
basketArr = split(Session("basket"),"#")
For each item in basketArr

  vareARR = split(item,"¤")

  strSQL = "Select * from products where pID = " & vareARR(0)
  Set rs = ConnMain.Execute(strSQL)

  Response.Write vareARR(1) & "&nbsp;&nbsp;" & rs("pTitle") & " | " & rs("pPrice") & "<br>"

Next
%>
Avatar billede thesurfer Nybegynder
04. august 2006 - 21:44 #1
Prøv sådan:

for i = LBound(basketArr) to UBound(basketArr)
...
next
Avatar billede thesurfer Nybegynder
04. august 2006 - 21:45 #2
Men hvilken linie er det den henviser til? Der er 3 linier der indeholder "vareARR"..
Avatar billede thesurfer Nybegynder
04. august 2006 - 21:50 #3
Jeg går ud fra, at det ser sådan ud, hvis man har 3 produkter i indkøbskurven:

#123¤2#456¤5#789¤3

Problemer er så, at 0 er tomt:
0:
1: 123¤2
2: 456¤5
3: 789¤3

vareARR indeholder ingenting på plads 0, og det er nok derfor at den brokker sig..
Avatar billede thesurfer Nybegynder
04. august 2006 - 21:54 #4
Lidt forklaring:
Problemet opstår fordi du indsætter "#" FØR varen, i stedet for EFTER varen..

Din kode ser sikkert nogenlunde sådan ud:

Session("basket") = "#" & request.form("varenummer") & "¤" & request.form("antal")

Eller noget i den stil.. det kan godt være at du erstatter ' med '', hvilket du altid bør gøre..
Avatar billede Slettet bruger
04. august 2006 - 21:54 #5
Det er strSQL-linien og Response.Write-linien der laver problemer.

Jeg tror du har set forkert, for basketArr bruges slet ikke i de linier hvor problemet er. basketArr er indeholder al data i indkøbskurven og bliver så splittet ved hver #.
Avatar billede thesurfer Nybegynder
04. august 2006 - 21:54 #6
Rettelse

Session("basket") = Session("basket") & "#" & request.form("varenummer") & "¤" & request.form("antal")
Avatar billede thesurfer Nybegynder
04. august 2006 - 21:55 #7
Mit første indlæg var baseret på at fejlen opstod pga "For each"..
Jeg så derefter at du har formattet: #varenr¤købsantal

Hvilket vil betyde, at den vil melde fejl ved vareARR(0), da vareARR(0) er tom..
Avatar billede Slettet bruger
04. august 2006 - 21:56 #8
Ja den ligner meget den, men for en god ordens skyld får du den lige:

Session("basket") = Session("basket") & "#" & Request("productid") & "¤" & Request("itemsbought") & "¤" & Request("weight")
Avatar billede Slettet bruger
04. august 2006 - 21:59 #9
Hvordan får jeg det så til at virke, jeg har jo vare i kurven !?
Avatar billede thesurfer Nybegynder
04. august 2006 - 21:59 #10
Så ser din session heller ikke sådan ud: #varenr¤købsantal

Husk på at du bruger 2x "¤"..

Prøv at erstatte din For Each linie med denne linie:

for i = LBound(basketArr) to UBound(basketArr)

Du skal ikke længere henvise til "item", men til "basketArr(i)"

Du skal sikker og lave et check, der ligner dette:

if i > LBound(basketArr) then
' arbejd videre med koden
end if

Ellers vil du sikkert få samme problem..
Avatar billede thesurfer Nybegynder
04. august 2006 - 22:03 #11
Forklaring af "For I = LBound(basketArr) to UBound(basketArr)"
For tæller = bund_værdi til top_værdi

Betyder:
- Start "tæller" ved basketArr-arrayens bund_værdi (typisk 0)
- Fortsæt loopen indtil "tæller" er lig basketArr-arrayens top_værdi (antallet af felter i arrayen)

Problemet opstår fordi plads 0 er tom. Derfor indsætter du IF-blokken:

if i > LBound(basketArr) then
' arbejd videre med koden
end if

som betyder:

hvis "tæller" er større end basketArr-arrayens bund_værdi (som er 0) så
' udfør koden
slut hvis
Avatar billede Slettet bruger
04. august 2006 - 22:07 #12
NICE, nu ser det sq ud til at virke :)

Mange tak for hjælpen, jeg sender straks en bunke point til dig, hvis du selvfølgelig lægger et svar ;)
Avatar billede thesurfer Nybegynder
04. august 2006 - 22:12 #13
Svaret er lagt :-)
Avatar billede thesurfer Nybegynder
04. august 2006 - 22:23 #14
Forresten:
Brug ikke "Request".

Brug:
- Request.Form("..."), hvis du brugt method="post"
- Request.Querystring("..."), hvis du har brugt method="get" eller bare "fil.asp?navn=værdi"
Avatar billede Slettet bruger
04. august 2006 - 22:35 #15
Okay har skiftet til request.form, vi skal ikke have flere underlige fejl :)
Avatar billede thesurfer Nybegynder
04. august 2006 - 22:43 #16
Hehe.. du får ikke underlige fejl..

"Request" søger .form og .querystring igennem, plus sessions eller noget i den stil..

Dvs, det er ekstre arbejde til servern, når man bare bruger "Request"..

Man kan jo lige så godt fortælle den, hvad det er man mener.. :-)

- Takker for points :-)
Avatar billede Slettet bruger
04. august 2006 - 23:03 #17
Okay var ikke klar over at request kunne bruges på den måde, så kan man vel bruge det til at fejl finde, hvis man feks. skal tjekke om en række sessions indeholder data eller ej :/
Avatar billede thesurfer Nybegynder
04. august 2006 - 23:07 #18
Det ved jeg godt nok ikke.. Det har jeg ikke prøvet.. :-)
Jeg mener bare at have læst det, et eller andet sted.. :-
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester