21. juni 2004 - 22:10Der 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:
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
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
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 […]
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.
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
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
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?
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
<%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æ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ængderabat <br> <%if TotalFlasker <> 0 then%>Samlet antal flasker: <%=TotalFlasker%> <%end if%> <%end if%>
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.