Avatar billede dj-hupi Nybegynder
14. juni 2005 - 11:18 Der er 17 kommentarer og
1 løsning

Indkøbsvogn (Session, array)

Jeg har lavet en indkøbsvogn hvor man kan minus
Men når den rammer 0 så skal den fjernes?

Hvordan går man lige det ? ...

If (a(i)) = Request.Querystring("del") Then
  If b(i) >= 0 Then
  b(i) = b(i) - 1
  Session("antal_vare") = join(b, ",")
  For j=0 to limit-1
    If j=0 Then
    Session("antal_vare") = b(j)
    Else
    Session("antal_vare") = Session("antal_vare")&","&b(j)
    End If
  Next
  Response.redirect("shoppingcart.asp")
End if
Dette er når den minus'er i indkøbsvognen ... Det er her den faktisk skal fjernes
Avatar billede busschou Praktikant
14. juni 2005 - 11:31 #1
Ved ikke om jeg har forstået det rigtig. men måske sådan her?
--
If (a(i)) = Request.Querystring("del") Then
  If b(i) >= 0 Then
  b(i) = b(i) - 1
  Session("antal_vare") = join(b, ",")
  For j=0 to limit-1
    If j=0 Then
    Session("antal_vare") = b(j)
    ElseIf j=i and b(j) = 0 Then
    Session("antal_vare") = Session("antal_vare") //dvs gør ingen ting,spring b(j) over
    Else
    Session("antal_vare") = Session("antal_vare")&","&b(j)
    End If
  Next
  Response.redirect("shoppingcart.asp")
End if
Avatar billede busschou Praktikant
14. juni 2005 - 11:33 #2
Jeg kan ikke huske om der er en "continue" i asp som får den til at gå til næste element i for løkken?
For så ville det her nok være pænere
If (a(i)) = Request.Querystring("del") Then
  If b(i) >= 0 Then
  b(i) = b(i) - 1
  Session("antal_vare") = join(b, ",")
  For j=0 to limit-1
    If j=0 Then
    Session("antal_vare") = b(j)
    ElseIf j=i and b(j) = 0 Then
    continue
    Session("antal_vare") = Session("antal_vare")&","&b(j)
    End If
  Next
  Response.redirect("shoppingcart.asp")
End if
Avatar billede dj-hupi Nybegynder
14. juni 2005 - 11:39 #3
Microsoft VBScript runtime error '800a0009'

Subscript out of range: 'i'

/shoppingcart.asp, line 109

Kommer på den sidste med continue


<%

If Session("Cart_id") <> "" Then
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.MapPath("/db/database.mdb")

Cart_id = Session("Cart_id")
antal_vare = Session("antal_vare")

Dim a
a = split(Cart_id, ",")
limit = Ubound(a)
Dim b
b = split(antal_vare, ",")


For i = 0 to limit -1
       
        SQLstmt = "Select * From catelog Where catelog.id=" & (a(i))
        Set rs = conn.Execute(SQLstmt)
       
    Do While not rs.eof
       
                ID = rs("id")
                vare_antal = (b(i))
                vare_navn = rs("vare_navn")
                vare_pris = rs("vare_pris")
                vare_total = (b(i))*rs("vare_pris")


        %>
Dette er min vogn, linje 109 er:
vare_antal = (b(i))
Avatar billede busschou Praktikant
14. juni 2005 - 11:45 #4
ahh hvis du fjerner en værdi helt i et array så bliver det jo een kortere
Så skal du også rette din limit
Hvis du har to sideløbende arrays så skal de jo begge gøres een kortere :o)
Avatar billede dj-hupi Nybegynder
14. juni 2005 - 11:45 #5
Nåå ja :D
Avatar billede busschou Praktikant
14. juni 2005 - 11:46 #6
Så du må lave en og anden løkke tingest for at fjerne den tilsvarende værdi i a arrayet
Avatar billede busschou Praktikant
14. juni 2005 - 11:51 #7
i øvrigt, er denne så ikke overflødig
Session("antal_vare") = join(b, ",")
Når du lige efter gør det samme i en løkke?
Avatar billede dj-hupi Nybegynder
14. juni 2005 - 12:01 #8
Ved ikke om du kan se dig ud af den ... :)

<%


If isnumeric(Request.Form("antal")) Then
Session("cart_antal") = Request.Form("antal")
Else
    Session("cart_antal") = 0
    Response.redirect("showproductsinfo.asp?id=") & Request.Querystring("id")
End if

If Session("cart_antal") > 0 Then
    Session("Cart_id") = Session("Cart_id") & Request.Querystring("id") & ","
    Session("antal_vare") = Session("antal_vare") & Request.Form("antal") & ","
   
    Response.write Session("cart_id")& "<br>"
    Response.write Session("antal_vare")
    Session("cart_antal") = 0
    Response.redirect("shoppingcart.asp")
End if

Cart_id = Session("Cart_id")
antal_vare = Session("antal_vare")

Dim a
a = split(Cart_id, ",")
limit = Ubound(a)
Dim b
b = split(antal_vare, ",")
For i = 0 to limit -1

If (a(i)) = Request.Querystring("add") Then
    b(i) = b(i) + 1
    For j=0 to limit-1
      If j=0 Then
        Session("antal_vare") = b(j)
      Else
        Session("antal_vare") = Session("antal_vare")&","&b(j)
      End If
    Next
    Response.redirect("shoppingcart.asp")
  End if

If (a(i)) = Request.Querystring("del") Then
  If b(i) >= 0 Then
  b(i) = b(i) - 1
  Session("antal_vare") = join(b, ",")
  For j=0 to limit-1
    If j=0 Then
    Session("antal_vare") = b(j)
    ElseIf j=i and b(j) = 0 Then
    continue
    Session("antal_vare") = Session("antal_vare")&","&b(j)
    End If
  Next
  Response.redirect("shoppingcart.asp")
End if

End if
 
Next
       
%>
Avatar billede busschou Praktikant
14. juni 2005 - 12:20 #9
Hmm måske sådan her. Altså hvis i=j og b(j) = 0 så skal den fjerne elementet og derfor "continue", ellers indsætter den normalt. Hvis den skal fjerne elementet laves sådan set samme tjek på a
---
<%
If isnumeric(Request.Form("antal")) Then
  Session("cart_antal") = Request.Form("antal")
Else
  Session("cart_antal") = 0
  Response.redirect("showproductsinfo.asp?id=") & Request.Querystring("id")
End if

If Session("cart_antal") > 0 Then
  Session("Cart_id") = Session("Cart_id") & Request.Querystring("id") & ","
  Session("antal_vare") = Session("antal_vare") & Request.Form("antal") & ","
  Response.write Session("cart_id")& "<br>"
  Response.write Session("antal_vare")
  Session("cart_antal") = 0
  Response.redirect("shoppingcart.asp")
End if

Cart_id = Session("Cart_id")
antal_vare = Session("antal_vare")

Dim a,b
a = split(Cart_id, ",")
limit = Ubound(a)
b = split(antal_vare, ",")

For i = 0 to limit -1
  If (a(i)) = Request.Querystring("add") Then
    b(i) = b(i) + 1
    For j=0 to limit-1
      If j=0 Then
        Session("antal_vare") = b(j)
      Else
        Session("antal_vare") = Session("antal_vare")&","&b(j)
      End If
    Next
    Response.redirect("shoppingcart.asp")
  End if

  If (a(i)) = Request.Querystring("del") Then
    If b(i) >= 0 Then
      b(i) = b(i) - 1
      Session("antal_vare") = join(b, ",")
      For j=0 to limit-1
        If j=i and b(j) = 0 Then
          For k=0 to ubound(a)-1
            If k=i Then
              continue
            ElseIf k=0 Then
              temp = a(k)
            Else
              temp = temp&","&a(k)
            End If
          Next
          a = split(temp,",")
          continue
        ElseIf j=0 Then
          Session("antal_vare") = b(j)
        Else
          Session("antal_vare") = Session("antal_vare")&","&b(j)
        End If
      Next
      Response.redirect("shoppingcart.asp")
    End if
  End if
Next   
%>
Avatar billede dj-hupi Nybegynder
14. juni 2005 - 12:29 #10
Microsoft VBScript runtime error '800a000d'

Type mismatch: 'continue'

/edit_cart.asp, line 47

    For k=0 to ubound(a)-1
      If k=i Then
        continue <- der
Avatar billede busschou Praktikant
14. juni 2005 - 12:32 #11
du burde vist kunne erstatte continue med Exit If som de står nu
Avatar billede busschou Praktikant
14. juni 2005 - 12:48 #12
Du skal selvfølelig så også sætte Session("Cart_id") til a igen efter den har fået fjernet et element
Avatar billede busschou Praktikant
14. juni 2005 - 12:50 #13
Helt alternativt, hvis det bare ikke gider. Så kan du jo blot springe dem over som har værdi nul. Du kan springe dem over der hvor du trækker fra, og du kan springe dem over når du regner pris ud, og når du skriver varene ud. Altså bare tjekke "If b(i) > 0 Then gør noget Else lad være" så slipper du for at slette dem i dine arrays og tænke på boundaries
Avatar billede dj-hupi Nybegynder
14. juni 2005 - 15:31 #14
Hehe det alternativt er ikke dårligt :)
Prøver det lige
Avatar billede busschou Praktikant
16. juni 2005 - 15:42 #15
lykkedes det?
Avatar billede dj-hupi Nybegynder
29. juni 2005 - 20:23 #16
Nej må indrømme jeg fandt en anden som jeg brugte som en funktion .. :) Lav lige et svar såå vi kan få lukket det ;)
Avatar billede busschou Praktikant
29. juni 2005 - 20:27 #17
oki doki.. det vigtigste er jo så også at det endelig virker :o)
Avatar billede dj-hupi Nybegynder
29. juni 2005 - 20:40 #18
Jebber ;) Vi kan jo altid gå tilbage og kigge igen hvis det ikke er nok :)
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