Avatar billede andersasp Nybegynder
23. maj 2005 - 12:30 Der er 13 kommentarer og
1 løsning

Indkøbskurv

Hejsa eksperter,

Jeg har lavet en indkøbskurv som gemmer og henter data fra cookies. cookien ser således ud 1, 2, 3, 4 i rå form og jeg ændre den til sql således:

whatitems = Request.Cookies("shoppingcart")
whatitems = replace(whatitems, ", ", " or PID = ")

Kurven virker som sådan rigtig godt, men har man f.eks lagt 2 stk af varenummer 2 ind udskriver den blot varen én gang.

Kan man på en måde få den til at tælle hvor mange gange et bestemt nummer fremkommer i cookien?????

f.eks.

1, 2, 3, 2, 2, 2, 4

vare1 = 1
vare2 = 4
vare3 = 3
vare4 = 4

Håber dette kan lade sig gøre, da jeg nødigt vil ændre for meget i måden jeg gemmer informationerne på - har brugt lidt meget tid på dette :D
Avatar billede andersasp Nybegynder
23. maj 2005 - 12:31 #1
Hele indkøbskurven ser således ud :

<%
if Request.Cookies("steinshoppingcart") <> "" then
Set Connshop = Server.CreateObject("ADODB.Connection")
    Connshop.Open MM_database_STRING

whatitems = Request.Cookies("steinshoppingcart")
whatitems = replace(whatitems, ", ", " or PID = ")

set rsshop = Connshop.Execute("select * from produkter where PID = "& whatitems &"")

SQL = "SELECT SUM(Ppris) AS total FROM produkter where PID = "& whatitems &""
Set rspris = Connshop.Execute(SQL)
pris = CSng(rspris("total"))

response.write "<table width='100%'  border='0' cellpadding='4' cellspacing='1' bgcolor='#000000'>"
response.write "<tr>"
response.write "<td bgcolor='#9DACBF'><b>Indk&oslash;bskurv</b></td>"
response.write "</tr>"
response.write "<tr>"
response.write "<td bgcolor='#FFFFCC'><table width='100%'  border='0' cellspacing='0' cellpadding='0'>"
do while not rsshop.eof
response.write "<tr valign='top'>"
response.write "<td>"& rsshop("Poverskrift") &"</td>"
response.write "<td><div align='right'>kr. "& rsshop("Ppris") &".-</div></td>"
response.write "</tr>"
  rsshop.MoveNext
loop
response.write "<tr valign='top'>"
response.write "<td>&nbsp;</td>"
response.write "<td>&nbsp;</td>"
response.write "</tr>"
response.write "<tr valign='top'>"
response.write "<td><b>Total</b></td>"
response.write "<td><div align='right'><b>kr. "&pris  &".-</b></div></td>"
response.write "</tr>"
response.write "<tr valign='top'>"
response.write "<td colspan='2'><div align='right'><br>Check ud/ret</div></td>"
response.write "</tr>"
response.write "</table></td>"
response.write "</tr>"
response.write "</table>"
Connshop.close
end if
%>
Avatar billede hiks Nybegynder
23. maj 2005 - 14:35 #2
jamen jeg kigger lige lidt her så... :o)

Jeg kan ikke lige umiddelbart gennemskue om du smider antallet af dine varer ned i din cookie også. Det smarte kunne være hvis du vil fortsætte med at kun benytte "een cookie" at finde nogle separatorer der er unikke for "een varelinie" og for varer og antal således at du kunne splitte din cookie når du indlæser den på een side forstået på den måde at når du sætter en cookie gør du således:

1*vare XX|2*vare XX| osv osv

så kan du når du indlæser lave en split først på een varelinie og efterfølgende på antal og varen...

arrVareLinier = Split(Request.Cookie("dincookie"), "|")

if isarray(arrVareLinier) = True then
  for i = lbound(arrVareLinier) to ubound(arrVarelinier)
      arrVare = Split(arrVareLinier(i)
      response.write "Antal: " & arrVare(0) & "<br>"
      response.write "Vare: " & arrVare(1) & "<br>"

  next
else
  'returnerede ikke array
end if

ellers kan du prøve at lave cookies med keys?

http://www.w3schools.com/asp/asp_cookies.asp

/hiks
Avatar billede hiks Nybegynder
23. maj 2005 - 14:51 #3
i linien hvor du splitter en enkelte varelinie er der en lille fejl:

arrVare = Split(arrVareLinier(i), "*")

skal det være... :o)

/hiks
Avatar billede andersasp Nybegynder
23. maj 2005 - 15:10 #4
Ok tusinde tak, men hvordan får jeg så åbnet mit recordset??

whatitems = Request.Cookies("steinshoppingcart")
whatitems = replace(whatitems, ", ", " or PID = ")
set rsshop = Connshop.Execute("select * from produkter where PID = "& whatitems &"")
Avatar billede hiks Nybegynder
23. maj 2005 - 15:37 #5
ok et forslag kommer her:

<%

Sub writeLine(pAntal, pID)

    set rsshop = Connshop.Execute("select * from produkter where PID = "& pID &"")
    pris = FormatNumber(rsshop("pPris")), 2)
   
    'læg til totalen
    total = total + (pris * pAntal)
   
    'skriv række
    with response
        .write "<tr valign='top'>"
        .write "<td>" & rsshop("Poverskrift") & "</td>"
        .write "<td><div align='right'>kr. " & pris & ".-</div></td>"
        .write "</tr>"
    End with
   
    rsshop.MoveNext
           
    rsshop.Close
   
End Sub

dim total, arrVareLinier, arrVare

if Request.Cookies("steinshoppingcart") <> "" then

    'åben db
    Set Connshop = Server.CreateObject("ADODB.Connection")
    Connshop.Open MM_database_STRING

    'varelinie ser sådan ud:
    '1*varenr XX|2*varenr XX|
    arrVareLinier = Split(Request.Cookie("steinshoppingcart"), "|")
       
    if isarray(arrVareLinier) = False then
        'returnerede ikke array
        Response.Write "Kurven er ikke gyldig!"
        'slutter udførsel
        Response.End
    end if   

    with response
        .write "<table width='100%'  border='0' cellpadding='4' cellspacing='1' bgcolor='#000000'>"
        .write "<tr>"
        .write "<td bgcolor='#9DACBF'><b>Indk&oslash;bskurv</b></td>"
        .write "</tr>"
        .write "<tr>"
        .write "<td bgcolor='#FFFFCC'><table width='100%'  border='0' cellspacing='0' cellpadding='0'>"
   
    for i = lbound(arrVareLinier) to ubound(arrVarelinier)
        arrVare = Split(arrVareLinier(i), "*")
        Call writeLine(arrVare(0),arrVare(1))
    next
       
        .write "<tr valign='top'>"
        .write "<td>&nbsp;</td>"
        .write "<td>&nbsp;</td>"
        .write "</tr>"
        .write "<tr valign='top'>"
        .write "<td><b>Total</b></td>"
        .write "<td><div align='right'><b>kr. " & total  &".-</b></div></td>"
        .write "</tr>"
        .write "<tr valign='top'>"
        .write "<td colspan='2'><div align='right'><br>Check ud/ret</div></td>"
        .write "</tr>"
        .write "</table></td>"
        .write "</tr>"
        .write "</table>"

    Connshop.close
    set arrVareLinier = Nothing
    set arrVare = Nothing
    set connshop = Nothing
end if

%>

/hiks
Avatar billede hiks Nybegynder
23. maj 2005 - 15:39 #6
og lige et par tilføjelser - det kræver som jeg har skrevet at du laver din cookie om til formattet: '1*varenr XX|2*varenr XX|

og der mangler lige et:

End With ' lige før Connshop.close

/hiks
Avatar billede hiks Nybegynder
23. maj 2005 - 15:45 #7
ok det er gået lidt stærkt kan jeg se. Jeg har lige lavet et par smårettelser mere:

<%

Sub writeLine(pAntal, pID)

    set rsshop = Connshop.Execute("select * from produkter where PID = "& pID &"")
    pris = FormatNumber(rsshop("pPris")), 2)
   
    'læg til totalen
    total = total + (pris * pAntal)
   
    'skriv række
    with response
        .write "<tr valign='top'>"
        .write "<td>" & rsshop("Poverskrift") & "</td>"
        .write "<td><div align='right'>kr. " & pris & ".-</div></td>"
        .write "</tr>"
    End with
   
    rsshop.Close
   
End Sub

dim total, arrVareLinier, arrVare, cookieShop

cookieShop = Request.Cookies("steinshoppingcart")

if cookieShop <> "" then
   
    'fjerner sidste | - hvis der er et... :o)
    'således at der ikke bliver fejl når der splittes
    If Right(cookieShop, 1) = "|" then
        cookieShop = Left(cookieShop, Len(cookieShop) - 1)
    End if
   
    'åben db conn
    Set Connshop = Server.CreateObject("ADODB.Connection")
    Connshop.Open MM_database_STRING

    'varelinie ser sådan ud:
    'antal*varenr XX|antal*varenr XX|
    arrVareLinier = Split(cookieShop, "|")
       
    if isarray(arrVareLinier) = False then
        'returnerede ikke array
        Response.Write "Kurven er ikke gyldig!"
        'slutter udførsel
        Response.End
    end if   

    with response
        .write "<table width='100%'  border='0' cellpadding='4' cellspacing='1' bgcolor='#000000'>"
        .write "<tr>"
        .write "<td bgcolor='#9DACBF'><b>Indk&oslash;bskurv</b></td>"
        .write "</tr>"
        .write "<tr>"
        .write "<td bgcolor='#FFFFCC'><table width='100%'  border='0' cellspacing='0' cellpadding='0'>"
   
        for i = lbound(arrVareLinier) to ubound(arrVarelinier)
            'splitter ved *
            arrVare = Split(arrVareLinier(i), "*")
            Call writeLine(arrVare(0), arrVare(1))
        next
       
        .write "<tr valign='top'>"
        .write "<td>&nbsp;</td>"
        .write "<td>&nbsp;</td>"
        .write "</tr>"
        .write "<tr valign='top'>"
        .write "<td><b>Total</b></td>"
        'udskriv totalen...
        .write "<td><div align='right'><b>kr. " & total  &".-</b></div></td>"
        .write "</tr>"
        .write "<tr valign='top'>"
        .write "<td colspan='2'><div align='right'><br>Check ud/ret</div></td>"
        .write "</tr>"
        .write "</table></td>"
        .write "</tr>"
        .write "</table>"
    end with
   
    'lukker og slukker :o)
    Connshop.close
    set arrVareLinier = Nothing
    set arrVare = Nothing
    set connshop = Nothing
end if

%>

/hiks
Avatar billede andersasp Nybegynder
23. maj 2005 - 15:47 #8
Ok tusinde tak - jeg tester lige
Avatar billede andersasp Nybegynder
23. maj 2005 - 17:27 #9
Hej Hiks,

Det virker helt perfekt, men kan jeg få antal til at stå ud fra de listede produkter?

hvis varenr1 koster kr. 150.-

2x varenr1  kr. 300.-
Avatar billede hiks Nybegynder
23. maj 2005 - 17:36 #10
ja erstat sub'en med dette:

Sub writeLine(pAntal, pID)

    set rsshop = Connshop.Execute("select * from produkter where PID = "& pID &"")
    pris = FormatNumber(rsshop("pPris")), 2)
   
    'læg til totalen
    total = total + (pris * pAntal)
   
    'skriv række
    with response
        .write "<tr valign='top'>"
        .write "<td>" & pAntal & " x " & rsshop("Poverskrift") & "</td>"
        .write "<td><div align='right'>kr. " & pris & ".-</div></td>"
        .write "</tr>"
    End with
   
    rsshop.MoveNext
           
    rsshop.Close
   
End Sub
Avatar billede hiks Nybegynder
23. maj 2005 - 17:38 #11
eller mere rafineret:

Sub writeLine(pAntal, pID)

    set rsshop = Connshop.Execute("select * from produkter where PID = "& pID &"")
    pris = FormatNumber(rsshop("pPris")), 2)
   
    'læg til totalen
    total = total + (pris * pAntal)
   
    'skriv række
    with response
        .write "<tr valign='top'>"
        .write "<td>" & pAntal & " x " & rsshop("Poverskrift") & " à kr. " & pris & "</td>"
        .write "<td><div align='right'>kr. " & (pris * pAntal) & ".-</div></td>"
        .write "</tr>"
    End with
   
    rsshop.MoveNext
           
    rsshop.Close
   
End Sub

/hiks
Avatar billede andersasp Nybegynder
23. maj 2005 - 17:39 #12
Tusind tak for hjælpen, det virker helt perfekt!!!
Avatar billede andersasp Nybegynder
23. maj 2005 - 17:46 #13
bliver desværre nødt til at smutte, men giver nogle points imorgen!! og igen tak!!
Avatar billede hiks Nybegynder
23. maj 2005 - 18:09 #14
svar :o)

/hiks
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