Avatar billede reino Nybegynder
16. oktober 2004 - 12:04 Der er 11 kommentarer og
1 løsning

Subscript out of range

Hejsa

Har et hasterproblem.

Har fundet en shop på nettet, men har prøvet at modificere den lidt, men får konstant en:

Microsoft VBScript runtime error '800a0009'

Subscript out of range: '[number: 5]'

/shop/add_product.asp, line 46

Har ændret:

Dim OnlineOrder(100,5) fra -> Dim OnlineOrder(100,4)
samt tilføjet:

OnlineOrder(i,5) = ProduktNummer (Det er denne linje som fejler)

Flg. er koden:

<%
    Response.AddHeader "cache-control","private"
    Response.AddHeader "pragma","no-cache"
    Response.CacheControl = "no-cache"
    Response.CacheControl = "private"
    Response.Expires = -1
    Response.ExpiresAbsolute = Now() -1
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">


<body>
<%
    ID = Request.QueryString("a_ID")
    Items = Request.Form("Items"&ID)
    ProduktPris = Request.Form("ProduktPris"&ID)
    ProduktNavn = Request.Form("ProduktNavn"&ID)
    Vejpris = Request.Form("Vejpris"&ID)
    ProduktNummer = Request.Form("ProduktNummer"&ID)
    If isEmpty(Session("OnlineOrder")) Then

    ' -> DETTE ER VARIABLEN FRA DATABASEN.
    Dim OnlineOrder(100,5)

    Session("Items") = -1
    Session("OnlineOrder") = OnlineOrder
    i = -1

    Else

    i = Session("Items")
    OnlineOrder = Session("OnlineOrder")
    End If

    If Len(ID) > 0 And Len(Items) > 0 Then
    If Items > 0 And i < 100 Then

    i = i+1
    OnlineOrder(i,0) = Items
    OnlineOrder(i,1) = ID
    OnlineOrder(i,2) = ProduktPris
    OnlineOrder(i,3) = Vejpris
    OnlineOrder(i,4) = ProduktNavn
    OnlineOrder(i,5) = ProduktNummer
   
    Session("Items") = i
    Session("OnlineOrder") = OnlineOrder
    Erase OnlineOrder
%>

<%
    End If
    End If
%>
</body>
<head>
    <meta http-equiv="expires" content="-1">
    <meta http-equiv="pragma" content="no-cache">
</head>
</html>
<%response.redirect "../default.asp?komp=shop&action=pro&produkt=" & id%>
Avatar billede eagleeye Praktikant
16. oktober 2004 - 12:08 #1
Prøv at skrive:
Dim OnlineOrder(100,6)

Tjek at der ikke er andre steder OnlineOrder defineres. Nogle shop systemer kan oprette Order array på flere sider.
Avatar billede reino Nybegynder
16. oktober 2004 - 12:21 #2
Hej Eagleeye

Har søgt efter andre dim's men er ikke defineret andre steder

Har også forsøgt at benytte Dim OnlineOrder(100,6) men uden held

Såfremt du har andre ideer er disse mere end velkomne, hvis du har brug for andet info må du endelig sige til
Avatar billede eagleeye Praktikant
16. oktober 2004 - 12:24 #3
Ok. Så prøv at rette:

If isEmpty(Session("OnlineOrder")) Then

til dette:

If isArray(Session("OnlineOrder")) Then
Avatar billede eagleeye Praktikant
16. oktober 2004 - 12:32 #4
du kan let prøve at tjekke om det er defineret rigtigt.

Prøv at tilføjde ddenne linje hvor du ligger i arrayet:

Response.Write Ubound(OnlineOrder,2)
Response.End
Avatar billede reino Nybegynder
16. oktober 2004 - 13:22 #5
Hey

Yahoo, det virkede, dog en sidste ting, delete.asp filen hvor man kan slette et produkt fra listen fejler nu...

Har prøvet at ændre den til:

<%
    Response.AddHeader "cache-control","private"
    Response.AddHeader "pragma","no-cache"
    Response.CacheControl = "no-cache"
    Response.CacheControl = "private"
    Response.Expires = -1
    Response.ExpiresAbsolute = Now() -1
%>
<html>
<head>

</head>

<body onLoad="if ('Navigator' == navigator.appName) document.forms[0].reset();">
<%
    ID = Request.QueryString("a_ID")
response.write id
    If Len(ID) > 0 Then
    OnlineOrderTemp = Session("OnlineOrder")
    OnlineOrderTemp(ID,0) = ""
    OnlineOrderTemp(ID,1) = ""
    OnlineOrderTemp(ID,2) = ""
    OnlineOrderTemp(ID,3) = ""
    OnlineOrderTemp(ID,4) = ""
    OnlineOrderTemp(ID,5) = ""
    OnlineOrderTemp(ID,6) = ""

    ' -> DETTE ER VARIABLEN FRA DATABASEN.
    'Dim OnlineOrder(100,4)

    x = 0
    For t = 0 To Session("Items")

    If OnlineOrderTemp(t,0) <> "" Then
    OnlineOrder(x,0) = OnlineOrderTemp(t,0)
    OnlineOrder(x,1) = OnlineOrderTemp(t,1)
    OnlineOrder(x,2) = OnlineOrderTemp(t,2)
    OnlineOrder(x,3) = OnlineOrderTemp(t,3)
    OnlineOrder(x,4) = OnlineOrderTemp(t,4)
    OnlineOrder(x,4) = OnlineOrderTemp(t,5)
    OnlineOrder(x,4) = OnlineOrderTemp(t,6)
    x = x+1
    End If

    Next
    Session("Items") = x-1
    Session("OnlineOrder") = OnlineOrder
    Erase OnlineOrderTemp
    Erase OnlineOrder
%>
    <script type="text/javascript">
    <!--
    parent.content.location.reload();
    //-->
    </script>
<%End If%>
</body>
<head>
    <meta http-equiv="expires" content="-1">
    <meta http-equiv="pragma" content="no-cache">
</head>
</html>

fra:

<%
    Response.AddHeader "cache-control","private"
    Response.AddHeader "pragma","no-cache"
    Response.CacheControl = "no-cache"
    Response.CacheControl = "private"
    Response.Expires = -1
    Response.ExpiresAbsolute = Now() -1
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <title>e-shop'en</title>

    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
    <meta http-equiv="expires" content="-1">
    <meta http-equiv="pragma" content="no-cache">
    <meta name="author" content="e-shop'en">
    <meta name="description" content="e-shop'en">
    <meta name="keywords" content="e-shop'en">

    <link rel="stylesheet" type="text/css" href="e-shop.css">
</head>

<body onLoad="if ('Navigator' == navigator.appName) document.forms[0].reset();">
<%
    ID = Request.QueryString("a_ID")

    If Len(ID) > 0 Then
    OnlineOrderTemp = Session("OnlineOrder")
    OnlineOrderTemp(ID,0) = ""
    OnlineOrderTemp(ID,1) = ""
    OnlineOrderTemp(ID,2) = ""
    OnlineOrderTemp(ID,3) = ""
    OnlineOrderTemp(ID,4) = ""

    ' -> DETTE ER VARIABLEN FRA DATABASEN.
    Dim OnlineOrder(100,4)

    x = 0
    For t = 0 To Session("Items")

    If OnlineOrderTemp(t,0) <> "" Then
    OnlineOrder(x,0) = OnlineOrderTemp(t,0)
    OnlineOrder(x,1) = OnlineOrderTemp(t,1)
    OnlineOrder(x,2) = OnlineOrderTemp(t,2)
    OnlineOrder(x,3) = OnlineOrderTemp(t,3)
    OnlineOrder(x,4) = OnlineOrderTemp(t,4)
    x = x+1
    End If

    Next
    Session("Items") = x-1
    Session("OnlineOrder") = OnlineOrder
    Erase OnlineOrderTemp
    Erase OnlineOrder
%>
    <script type="text/javascript">
    <!--
    parent.content.location.reload();
    //-->
    </script>
<%End If%>
</body>
<head>
    <meta http-equiv="expires" content="-1">
    <meta http-equiv="pragma" content="no-cache">
</head>
</html>


Og får denne fejl:

Microsoft VBScript runtime error '800a000d'

Type mismatch

/shop/delete_product.asp, line 35

Filen der generer kurvelisten:


<%


    ' -> DSNLess FORBINDELSE TIL DATABASEN.
    Set myConn = Server.CreateObject("ADODB.Connection")
    myConn.open "DRIVER={Microsoft Access Driver (*.mdb)};dbq=x"

    strSQL = "SELECT KategoriNavn, KategoriParent, KategoriID, KategoriRank FROM Kategorier ORDER BY KategoriRank"
    Set rs = myConn.Execute(strSQL)



    While Not rs.EOF
    If i < 100 Then
    Kategorier(i,0) = rs("KategoriNavn")
    Kategorier(i,1) = rs("KategoriParent")
    Kategorier(i,2) = rs("KategoriID")
    Kategorier(i,3) = rs("KategoriRank")
    End If

    i = i+1
    rs.MoveNext
    Wend
    arrayLength = i-1


%>
<%
    Response.AddHeader "cache-control","private"
    Response.AddHeader "pragma","no-cache"
    Response.CacheControl = "no-cache"
    Response.CacheControl = "private"
    Response.Expires = -1
    Response.ExpiresAbsolute = Now() -1
%>


<body onLoad="if ('Navigator' == navigator.appName) document.forms[0].reset();">

<!-- TITEL START -->




<!-- INDHOLD START -->

<table align="center" border="0" cellpadding="4" cellspacing="0" width="600">
<tr>
<td align="left" valign="top" width="140">


<br>
<h3>Produkt liste</h3>

</td>
</tr>
<tr>
<br><br>
<td align="left" valign="top" width="100%">


<table align="center" border="0" cellpadding="0" cellspacing="0" width="100%">
<tr>
<td width="40" class="indhold2"><%=ListPicture%></td>
<td width="140" class="indhold2"><%=ListProduct%></td>
<td width="140" class="indhold2"><%=ListProductBes%></td>
<td width="60" class="indhold2"><%=ListPriceVej%></td>
<td width="60" class="indhold2"><%=ListPrice%></td>
<td width="40" class="indhold2">Slet</td>
</tr>
<tr><td colspan=6><hr noshade size="1" width="100%"></td><tr>
<%
    OnlineOrder = Session("OnlineOrder")

    If isArray(OnlineOrder) Then
    i = Session("Items")
    For t = o To i

    If (OnlineOrder(t,0)) <> "" Then
%>
<tr>
<td align="right" valign="top" width="40"><span class="small"><img alt="Produkt" border="0" src="images/<%=OnlineOrder(t,5)%>.jpg" align="left">&nbsp;</span></td><!-- samme som linie 91 skal være billede//-->
<td align="left" valign="top" width="200"><span class="small">&nbsp;<%=OnlineOrder(t,4)%></span></td>
<td align="left" valign="top" width="200"><span class="small">&nbsp;<%=OnlineOrder(t,6)%></span></td><!-- samme som linie ovenfor skal være produkt beskrivelse//-->
<td align="right" valign="top" width="60"><span class="small"><%=formatNumber(OnlineOrder(t,3),2,,-2)%>&nbsp;</span></td><!-- samme som næste linie  skal være vej pris//-->
<td align="right" valign="top" width="60"><span class="small"><%=formatNumber(OnlineOrder(t,2),2,,-2)%>&nbsp;</span></td>
<td align="center" valign="top" width="40"><span class="small"><a href="default.asp?komp=shop&action=delete&a_ID=<%=t%>" class="black2">X</a></span></td>
</tr>
<tr>
<td colspan="6"><br><br></td>
</tr>
<%
    End If

    Next
%>
<!-- HER FØLGER YDERLIGERE BEREGNINGER -->
<!-- TOM TABELRÆKKE FOR AT GIVE MERE PLADS -->
<%End If%>

</table>

<br clear="all">
<br clear="all">



<table align="center" border="0" cellpadding="0" cellspacing="0" width="350">
<tr>
<td align="left" valign="top" width="100%">

<form action="order_send.asp" method="post" name="submit_order">
</form>

<form action="order_send.asp" method="post" name="submit_order">

<p><span class="bold"><%If OrderForm_Company = true Then%><%=OrderEmail_Company%></span>
<br clear="all"><input name="OrderForm_Company" size="40" style="width: 260px" type="text"></p><%End If%>

<p><span class="bold"><%If OrderForm_Name = true Then%><%=OrderEmail_Name%></span>
<br clear="all"><input name="OrderForm_Name" size="40" style="width: 260px" type="text"></p><%End If%>

<p><span class="bold"><%If OrderForm_Street = true Then%><%=OrderEmail_Street%></span>
<br clear="all"><input name="OrderForm_Street" size="40" style="width: 260px" type="text"></p><%End If%>

<p><span class="bold"><%If OrderForm_PostalCode = true Then%><%=OrderEmail_PostalCode%></span>
<br clear="all"><input name="OrderForm_PostalCode" size="40" style="width: 260px" type="text"></p><%End If%>

<p><span class="bold"><%If OrderForm_City = true Then%><%=OrderEmail_City%></span>
<br clear="all"><input name="OrderForm_City" size="40" style="width: 260px" type="text"></p><%End If%>

<p><span class="bold"><%If OrderForm_Phone = true Then%><%=OrderEmail_Phone%></span>
<br clear="all"><input name="OrderForm_Phone" size="40" style="width: 260px" type="text"></p><%End If%>

<p><span class="bold"><%If OrderForm_Email = true Then%><%=OrderEmail_Email%></span>
<br clear="all"><input name="OrderForm_Email" size="40" style="width: 260px" type="text"></p><%End If%>

<p><span class="bold"><%If OrderForm_Message = true Then%><%=OrderEmail_Message%></span>
<br clear="all"><textarea cols="38" name="OrderForm_Message" rows="6" style="width: 260px" wrap="soft"></textarea></p><%End If%>

<!-- BEMÆRK: KODEN 'wrap="soft"' ER FOR TILPASNING TIL ÆLDRE NETSCAPE BROWSERE -->

<table>
<tr>
<td><input class="button" onMouseOut="this.className='button'" onMouseOver="this.className='buttonHover'" type="submit" value="Send Liste"></td>
<td><input class="button" onMouseOut="this.className='button'" onMouseOver="this.className='buttonHover'" type="button" value="Udskriv" onClick="window.print()"></td>
<td><input class="button" onMouseOut="this.className='button'" onMouseOver="this.className='buttonHover'" type="reset" value="PDF"></td>
<td><input class="button" onMouseOut="this.className='button'" onMouseOver="this.className='buttonHover'" type="reset" value="Slet alt"></td>

</tr>
</table>

<!-- BEMÆRK: KNAPPERNE ER PLACEREDE I EN TABEL FOR FULD UDNYTTELSE AF 'MouseOver' EGENSKABERNE I OPERA 7 BROWSEREN -->

</form>

</td>
</tr>
</table>
<%
    rs.Close
    Set rs = Nothing

    myConn.Close
    Set myConn = Nothing
    Erase Kategorier
%>
</td>
</tr>
</table>

<!-- INDHOLD SLUT -->

<!-- TOM TABEL FOR AT GIVE MERE PLADS -->

<table align="center" border="0" cellpadding="0" cellspacing="0" width="600">
<tr>
<td align="center" valign="top" width="100%">
<p>&nbsp;</p>
</td>
</tr>
</table>

<!-- FODNOTE START -->

<table align="center" border="0" cellpadding="0" cellspacing="0" width="600">
<tr>
<td align="center" valign="top" width="100%">

<hr noshade size="1" width="100%">

</td>
</tr>
</table>

<!-- FODNOTE SLUT -->

</body>
<head>
    <meta http-equiv="expires" content="-1">
    <meta http-equiv="pragma" content="no-cache">
</head>
</html>

Kan ikke rigtigt lure den
Avatar billede reino Nybegynder
16. oktober 2004 - 13:23 #6
PS: Hvis der kun er en vare i kurven kan denne godt slettes, får dog denne fejl:

Microsoft VBScript runtime error '800a000d'

Type mismatch: 'Erase'

/shop/delete_product.asp, line 49


Men produktet er blevet slettet anyways
Avatar billede eagleeye Praktikant
16. oktober 2004 - 13:34 #7
ok, det må være en af disse to som ikke bliver til at array når man sletter den sidste:
    Erase OnlineOrderTemp
    Erase OnlineOrder

Så prøv at rette dem til:

    if isArray(OnlineOrderTemp) then Erase OnlineOrderTemp
    if isArray(OnlineOrder) then Erase OnlineOrder
Avatar billede reino Nybegynder
16. oktober 2004 - 13:49 #8
Hej igen

Super, Virker nu såfremt der kun er en vare i, men hvis der er 2 varer i kommer:


Microsoft VBScript runtime error '800a000d'

Type mismatch

/shop/delete_product.asp, line 35

Linje 35: OnlineOrder(x,0) = OnlineOrderTemp(t,0)

Any clue, tusinde tak for hjælpen, helt kanon
Avatar billede eagleeye Praktikant
16. oktober 2004 - 13:59 #9
OnlineOrder kommer ikke fra noget sted og er ikke et array. Som jeg skrev først er OnlineOrder defineret i flere filer. Du har så udkommenteret det:

    ' -> DETTE ER VARIABLEN FRA DATABASEN.
    'Dim OnlineOrder(100,4)


Grunden til det bliver defineret flere steder er fordi man ikke kan lave redim på et 2 dimmentionelt array.

Alternativt kan du havde to af disse linjer:
    OnlineOrderTemp = Session("OnlineOrder")


Sådan her:
    OnlineOrderTemp = Session("OnlineOrder")
    OnlineOrder = Session("OnlineOrder")


Men så får man ikke slettet den stidste post når man flytter fra det ene til det andet array. Så du skal bruger  Session("Items")  til at afgøre om der er nogle vare i arrayet,.
Avatar billede reino Nybegynder
16. oktober 2004 - 14:43 #10
hej igen

Kan godt være jeg er lidt langsom idag, men kan du prøve at give et ex. Har forsøgt men kan ikke rigtigt få det til at virke...
Avatar billede reino Nybegynder
17. oktober 2004 - 13:52 #11
Hej igen,
Avatar billede reino Nybegynder
17. oktober 2004 - 13:52 #12
du får lige pointsene :), finder en anden løsning
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