Avatar billede mecenor Nybegynder
21. juni 2004 - 22:10 Der er 10 kommentarer og
1 løsning

Opdatering af varer i indkøbskurv

Hej, jeg har et problem med opdatering af antal på varer(vin) i en indkøbskurv.
Hvis der tastes et nyt tal ind i antal-feltet(kassefelt) og trykkes ’opdater’, tager den det nye antal og laver en linie med det - men den 'gamle' entry bliver ikke slettet. Det ville dog heller ikke løse problemet: Det skal være sådan, at hvis man køber en vin(igen), der allerede er i kurven, så bliver det antal opdateret(altså ikke muligt med 2 ens vine 2 gange). Noget i retning af: Tjek om vinen er i cart allerede ved at køre vine-i-cart’s id igennem. Hvis vinid i cart = id på netop tilføjede vin så opdater antal på vinen.
Jeg er helt nybegynder mht. asp/databaser og har forsøgt at modificere Scannets ASP-demoshop. Her kommer en ordentlig smøre kode:

<%
                        Cart = Session("Cart")
                        Items = Session("Items")
                       
                        if Request.QueryString("action") = "add" then
                           
                        Items = Items + 1
                           
                            Set Conn = Server.Createobject("ADODB.Connection")
                            Conn.Open strDSN
                            Set RS = Conn.Execute("SELECT * FROM vine WHERE ID = "&Request.QueryString("id")&"")
                            if Not RS.EOF then
                               
                                Cart(1,Items) = Items
                                Cart(2,Items) = RS("ID")
                                Cart(3,Items) = RS("Navn")
                                Cart(4,Items) = RS("Kassepris")*(request.form("kassefelt"))
                                Cart(5,Items) = 1
                                Cart(6,Items) = RS ("Kasseantal")
                                Cart(7,Items) = request.form("kassefelt")
                       
                            end if
                            RS.close
                            Conn.Close
                            Set RS = nothing
                            Set Conn = nothing
                       
                        elseif Request.QueryString("action") = "delete" then
                       
                            Cart(5,Request.QueryString("id")) = 0
                       
                        elseif Request.QueryString("action") = "sletalt" then
                           
                              ReDim Cart(7,100)
                              Session("Cart") = Cart
                              Session("Items") = 0
                              Session("TotalPris") = 0
                       
                        end if
                       
                        Session("Cart") = Cart
                        Session("Items") = Items
                        %>
                       
                        <table border="1" bordercolor="#333333" bgcolor="#EEECCC" align="center">
                        <tr align="center" class="sortp">
                            <td>
                                &nbsp;<strong>Antal</strong>&nbsp;
                            </td>
                            <td>
                                &nbsp;<strong>Vare</strong>&nbsp;
                            </td>
                            <td>
                                &nbsp;<strong>Pris</strong>&nbsp;
                            </td>
                            <td>
                                &nbsp;&nbsp;
                            </td>
                          </tr>
                        <%
                        for i = 1 to Items
                            if Cart(5,i) = 1 then
                        %>

                          <tr  class="sortp">
                            <td>
                                <form method="post" action="cart.asp?action=add&id=<%=Cart(2,i)%>">
                                    <input type="text" align="right" name="idfelt" size="1" maxlength="2" disabled value="<%=Cart(2,i)%>">
                                    <input type="text" align="right" name="kassefelt" size="1" maxlength="2" value="<%=Cart(7,i)%>"> kasser a <%=Cart(6,i)%> stk.&nbsp;
                                    <input type="submit" align="right" name="kasseknap" size="5" value="Opdater">
                                </form>
                            </td>
                            <td class="kvitt">
                                &nbsp;<a href="vine/vine.asp?id=<%=Cart(2,i)%>"><%=Cart(3,i)%></a>&nbsp;-&nbsp;hus&nbsp;
                            </td>
                            <td align="right">
                                &nbsp;<%=FormatNumber(Cart(4,i))%>&nbsp; <!-- Problemlinie -->
                            </td>
                            <td>
                                <form method="post" action="cart.asp?action=delete&id=<%=Cart(1,i)%>">
                                    <input type="submit" align="right" name="Slet" size="5" value="Slet">
                                </form>
                            </td>
                          </tr>
                        <%
                            Total = Total + Cart(4,i)
                            TotalFlasker = TotalFlasker + (Cart(6,i)*Cart(7,i))
                            end if
                        next
                        %>

Sig til hvis noget kræver forklaring :)
Hvis spørgsmålet skulle være postet et andet sted, så sig lige hvor – mvh. Mec
Avatar billede eagleeye Praktikant
21. juni 2004 - 22:24 #1
Så må du lave add delen om sådan den kun addere en ny hvis den ikke findes eller tælle antallet X antal op.


<%
                        Cart = Session("Cart")
                        Items = Session("Items")

                        if Request.QueryString("action") = "add" then
                        'Antager det en ny
                        Items = Items + 1
                        nyvin=true
                           
                            Set Conn = Server.Createobject("ADODB.Connection")
                            Conn.Open strDSN
                            Set RS = Conn.Execute("SELECT * FROM vine WHERE ID = "&Request.QueryString("id")&"")
                            if Not RS.EOF then
                                for i=0 to ubound(Cart,2)
                                  if Int(Cart(2,i)) = Int(RS("ID")) then
                                    Items=i
                                    nyvin=false
                                    exit for
                                  end if
                                next
                                if nyvin=true then
                                'Tilføj ny
                                  Cart(1,Items) = Items
                                  Cart(2,Items) = RS("ID")
                                  Cart(3,Items) = RS("Navn")
                                  Cart(4,Items) = RS("Kassepris")*(request.form("kassefelt"))
                                  Cart(5,Items) = 1
                                  Cart(6,Items) = RS ("Kasseantal")
                                  Cart(7,Items) = request.form("kassefelt")
                            else
                            'Addere til en vin som findes, medtag det som er nødvendigt her
                              Cart(6,Items) = Int(Cart(6,Items))+Int(RS ("Kasseantal"))
                              Cart(7,Items) = Int(Cart(7,Items))+Int(request.form("kassefelt"))
                            end if
                            RS.close
                            Conn.Close
                            Set RS = nothing
                            Set Conn = nothing
                       
                        elseif Request.QueryString("action") = "delete" then
Avatar billede mecenor Nybegynder
22. juni 2004 - 01:56 #2
Sweet, eagleeye – det var lige det der skulle til. Der er lige et par småting, jeg ikke kan få til at passe sammen:
Måtte putte en 'end if' mere på, ellers kom koden aldrig til elseif'erne. Placeringen af den nye end if'en gør at slet-knapperne kan bruges - men er placeringen rigtig?

Når det ikke er en ny vin skal prisen lige med i opdateringen før den regnes med(og kasseantal skal ikke opdateres, umuligt at vide). Der er et tvist ved opdatering: hvis en kunder lægger en vin i kurven og går tilbage til indkøbssiden for den vin og lægger den i kurven igen, skal antallet adderes til det der er i kurven. Men hvis en kunde retter antallet på selve cart siden, skal det oprindelig tal erstattes med det nye.
Det sidste kan jeg få til at virke med Cart(7,Items) = (Int(Cart(7,Items))+Int(request.form("kassefelt")))-Int(Cart(7,Items)). Og så bliver prisen også opdateret. Men hvis jeg fjerner -Int(Cart(7,Items)), bliver prisen ikke opdateret, når man tilføje fra indkøbssiden. Opdatering fra cart virker, men tager det originale antal og lægger det nye til.
Kode-uddrag:

[…]
                            else
                            'Addere til en vin som findes, medtag det som er nødvendigt her
                                Cart(4,Items) = RS("Kassepris")*(request.form("kassefelt")) 'udregner først når "-Int(Cart(7,Items))" kommer på nedenunder...
                                Cart(7,Items) = Int(Cart(7,Items))+Int(request.form("kassefelt")))
                            end if
                        end if ' OBS! "ny" end if
                               
                                RS.close
                                Conn.Close
                                Set RS = nothing
                                Set Conn = nothing
                           
                               
                            elseif Request.QueryString("action") = "delete" then […]

Håber forklaringen giver lidt mening – mvh. Mec
Avatar billede mecenor Nybegynder
24. juni 2004 - 11:34 #3
Er der nogen, der kan hjælpe?
Eagleeye's forslag er rigtigt, men der er nogle småting, jeg ikke evner at justere. Som nævnt ovenfor, så er der forskel på hvordan antallet opdateres al efter om man taster nyt antal ind fra selv cart/indkøbskurv siden eller man køber flere kasser fra vinens indkøbsside.

Mvh. Mec
Avatar billede mecenor Nybegynder
29. juni 2004 - 18:19 #4
Eagleeye, smid et svar, så du kan få point.
Jeg ville meget gerne, hvis du kunne hjælpe mig med de småting, der er med løsningen: se mine 2 kommentarer...
Mvh. Mec
Avatar billede eagleeye Praktikant
02. juli 2004 - 20:07 #5
En ide kunne være at du på indkøbskurv siden laver et hidden input felt.
<input type="hidden" name="mode" value="indkob">

Så når du skal opdatere data i indkøbskurven så kan du tjekke om Request.Form("mode")="indkob" og hvis den er det opdatere med det nye tal, hvis ikke ligge X antal vare til.


if Request.Form("mode")="indkob" then
  'Opdater med de nye tal

else
  'Tilføj X antal vare til det som findes
  Cart(4,Items) = RS("Kassepris")*(request.form("kassefelt")) 'udregner først når "-Int(Cart(7,Items))" kommer på nedenunder...
  Cart(7,Items) = Int(Cart(7,Items))+Int(request.form("kassefelt")))
end if
Avatar billede mecenor Nybegynder
02. juli 2004 - 22:18 #6
God idé!
Det virker. Eneste problem jeg kan finde nu, er hvis man opdatere en købt vare, enten i indkøbskurven eller ved at købe den igen - så bliver alle vare under('købt senere') den slettet...
Nogen ideer?

<%
                        Cart = Session("Cart")
                        Items = Session("Items")

                        if Request.QueryString("action") = "add" then
                            'Antager det en ny
                            Items = Items + 1
                            nyvin = true
                               
                                Set Conn = Server.Createobject("ADODB.Connection")
                                Conn.Open strDSN
                                Set RS = Conn.Execute("SELECT * FROM cart WHERE vine_ID = "&Request.QueryString("id")&"")
                                if Not RS.EOF then
                                    for i = 0 to ubound(Cart,2)
                                      if Int(Cart(2,i)) = Int(RS("vine_ID")) then
                                        Items = i
                                        nyvin = false
                                    exit for
                                end if
                            next
                            if nyvin = true then
                                'Tilføj ny
                                  Cart(1,Items) = Items
                                  Cart(2,Items) = RS("vine_id")
                                  Cart(3,Items) = RS("vine_navn")
                                  Cart(4,Items) = ((RS("pris"))*(RS("Kasseantal")))*(request.form("kassefelt"))
                                  Cart(5,Items) = 1
                                  Cart(6,Items) = RS("Kasseantal")
                                  Cart(7,Items) = request.form("kassefelt")
                                  Cart(8,Items) = rs("huse_navn")
                            else
                                if Request.Form("mode")="indkob" then
                                'Opdater med de nye tal
                                Cart(4,Items) = Cart(4,Items)+((RS("pris"))*(RS("Kasseantal")))*(request.form("kassefelt"))
                                Cart(7,Items) = Int(Cart(7,Items))+Int(request.form("kassefelt"))
                                else
                                'Tilføj X antal vare til det som findes
                                Cart(4,Items) = ((RS("pris"))*(RS("Kasseantal")))*(request.form("kassefelt"))
                                Cart(7,Items) = (Int(Cart(7,Items))+Int(request.form("kassefelt")))-Int(Cart(7,Items))
                                end if
                            end if
                        end if ' OBS! "ny" end if
                               
                                RS.close
                                Conn.Close
                                Set RS = nothing
                                Set Conn = nothing
                               
                            'elseif Request.QueryString("action") = "opdater" then 'add skal ændres til opdater i formen
                                'Cart(4,Items) = RS("Kassepris")*(request.form("kassefelt"))
                                'Cart(7,Items) = (Int(Cart(7,Items))+Int(request.form("kassefelt")))-Int(Cart(7,Items))
                               
                            elseif Request.QueryString("action") = "delete" then
                           
                                Cart(5,Request.QueryString("id")) = 0
                           
                            elseif Request.QueryString("action") = "sletalt" then
                               
                                  ReDim Cart(8,100)
                                  Session("Cart") = Cart
                                  Session("Items") = 0
                                  Session("TotalPris") = 0
                           
                            end if
                       
                        Session("Cart") = Cart
                        Session("Items") = Items
                        %>
                       
                        <table border="1" bordercolor="#333333" bgcolor="#EEECCC" align="center">
                        <tr align="center" class="sortp">
                            <td>
                                &nbsp;<strong>Antal</strong>&nbsp;
                            </td>
                            <td>
                                &nbsp;<strong>Vare</strong>&nbsp;
                            </td>
                            <td>
                                &nbsp;<strong>Pris</strong>&nbsp;
                            </td>
                            <td>
                                &nbsp;&nbsp;
                            </td>
                          </tr>
                        <%
                        for i = 1 to Items
                            if Cart(5,i) = 1 then
                        %>

                          <tr class="sortp">
                            <td>
                                <form method="post" action="cart.asp?action=add&id=<%=Cart(2,i)%>">
                                    <input type="text" align="right" name="kassefelt" onClick="select(this);" onChange="submit();" size="1" maxlength="2" value="<%=Cart(7,i)%>"> kasser a <%=Cart(6,i)%> stk.&nbsp;
                                </form>
                            </td>
                            <td class="kvitt">
                                &nbsp;<a href="vine/vine.asp?id=<%=Cart(2,i)%>"><%=Cart(3,i)%></a>&nbsp;<br>&nbsp;fra&nbsp;<%=Cart(8,i)%>&nbsp;
                            </td>
                            <td align="right">
                                &nbsp;<%=FormatNumber(Cart(4,i))%>&nbsp;
                            </td>
                            <td>
                                <form method="post" action="cart.asp?action=delete&id=<%=Cart(1,i)%>">
                                    <input type="submit" align="right" name="Slet" size="5" value="Slet">
                                </form>
                            </td>
                          </tr>
                        <%
                            Total = Total + Cart(4,i)
                            TotalFlasker = TotalFlasker + (Cart(6,i)*Cart(7,i))
                            end if
                        next
                        %>
                        <tr align="center"  class="sortp">
                            <td>
                                &nbsp;&nbsp;
                            </td>
                            <td>
                                &nbsp;Fragt&nbsp;
                            </td>
                            <td>
                                &nbsp;Gratis&nbsp;
                            </td>
                            <td>
                                &nbsp;&nbsp;
                            </td>
                          </tr>

                        </table>
                        <%if TotalFlasker > 47 then%>
                           
                            <%TempPris = FormatNumber(Total,2)*FormatNumber(0.15,2)%>
                            <%TotalPrice = (FormatNumber(Total,2))-(FormatNumber(TempPris,2))%>
                            <%Session("TotalPris") = FormatNumber(TotalPrice,2)%>
                            <h3>Total Pris i DKK, inkl. moms: <%=FormatNumber(TotalPrice,2)%></h3>
                            M&aelig;ngderabat på 15% = kr. <%=FormatNumber(TempPris,2)%><br>
                            Normalpris: kr. <%=FormatNumber(Total,2)%><br>
                            Samlet antal flasker: <%=TotalFlasker%>
                        <%else%>
                           
                            <br><%TotalPrice = FormatNumber(Total,2)%>
                            <%Session("TotalPris") = FormatNumber(TotalPrice,2)%>
                            <h3>Total Pris i DKK, inkl. moms: <%=FormatNumber(TotalPrice,2)%></h3>
                            Ved køb af 48 flasker og derover er der 15% m&aelig;ngderabat
                            <br>
                            <%if TotalFlasker <> 0 then%>Samlet antal flasker: <%=TotalFlasker%>
                            <%end if%>
                        <%end if%>
Avatar billede eagleeye Praktikant
02. juli 2004 - 23:21 #7
Ok det vist fordi Items variablen ikke længere er lig den sidste nå man tilføjer en vare.

Så prøv at rette disse to linjer:

                        Session("Cart") = Cart
                        Session("Items") = Items


Til dette sådan den kun opdatere Session("Items") hvis det er en ny vare der er tilføjet:

                        Session("Cart") = Cart
                        if nyvin = true then
                          Session("Items") = Items
                        end if
Avatar billede mecenor Nybegynder
03. juli 2004 - 00:13 #8
Det ændrede desværre ikke noget :(
Alt under den vare man opdaterer bliver slettet.
Avatar billede eagleeye Praktikant
03. juli 2004 - 00:45 #9
ok prøv at udvide det med en linje sådan her, så den henter Items igen, da den bruges til at udskrive antallet af vare:


                        Session("Cart") = Cart
                        if nyvin = true then
                          Session("Items") = Items
                        end if
                        Items = Session("Items")
Avatar billede mecenor Nybegynder
03. juli 2004 - 00:55 #10
Yirh! Sådan.
Rigtig mange tak Eagleeye, super hjælp.
Klar, parat til svar?
Avatar billede eagleeye Praktikant
03. juli 2004 - 16:59 #11
Ok ;)
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

IT-JOB

Digitaliseringsstyrelsen

IT-arkitekt hos Digitaliseringsstyrelsen

Rambøll Management Consulting

Senior AI Engineer

JP/Politikens Hus

Digital Workplace Supporter

Netcompany A/S

IT Consultant