Avatar billede mecenor Nybegynder
22. februar 2006 - 11:48 Der er 7 kommentarer og
1 løsning

Skelne mellem 2 varer med samme id

Hej
Jeg har en indkøbskurv (cart), hvor varerne skelnes fra hinanden med id (Cart(2,i)). Mit problem er, at jeg gerne vil kunne give hver vare en status og derved have 2 varer med ens id, men med separat status. Hver gang jeg forsøger at opdatere indkøbskurven nu med fx ’VareID1, status2’, så opdateres/overskrives ’VareID1, status1’ hvis den er i indkøbskurven.
Status kommer fra 2 forskellige ’købsknapper’ på en anden side. Jeg vil gerne kunne skelne mellem varer med sammen id, men med statusen ’flaskeindkob’ som 1 eller <> 1.
Koden:

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
                if Cart(5,i) = 0 then
                    Cart(5,i) = 1
                end if
                Items = i
                nyvin = false
               
            exit for
        end if
    next
    if nyvin = true then
        'Tilføj ny
        flaskeindkob = 0
        if Request.Form("mode")="flaskeindkob" then
            flaskeindkob = 1
        end if
          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")
          Cart(9,Items) = rs("Aargang")
          Cart(10,Items) = rs("lager")
          Cart(11,Items) = rs("pris")
          Cart(12,Items) = flaskeindkob

Og senere i koden:

Session("Cart") = Cart
if nyvin = true then
  Session("Items") = Items
end if
Items = Session("Items")
Avatar billede mecenor Nybegynder
22. februar 2006 - 16:01 #1
Er der ikke nogen, der har et bud på hvordan man assigner en variabel til et ID ud fra overstående kode?
Avatar billede nielle Nybegynder
22. februar 2006 - 17:57 #2
Hvad med at gemme tingene i varekurven som:

’VareID1, status1|status2’
Avatar billede mecenor Nybegynder
22. februar 2006 - 21:57 #3
Lyder som en god idé, noget a la:
Cart(2,Items) = RS("vine_id"), flaskeindkob
Eller? Jeg er lidt rusten :)

Hvordan skiller jeg så ID ud igen, fx når jeg vil skrive til database? Kan man sige 'fjern komma og alt bagefter'?
Avatar billede nielle Nybegynder
22. februar 2006 - 22:24 #4
Når du trækker posterne ud af cart'en så kan du bruge Split()-funktionen til at dele op med:

F.eks. kunne du udskrive de enkelte poster med dette:

dataFraCart = "status1|status2"

Dim dataFraCartArr
dataFraCartArr = Split(dataFraCart, "|")

For idx=LBound(dataFraCartArr) To UBound(dataFraCartArr)
    Response.Write dataFraCartArr(idx) & "<br>"
Next


Når du vil lægge en ny status i din Cart, må du starte med at tjekke om der allerede findes en status:

If "" & Cart(4,Items) = "" Then
    ' Den var tom i forvejen
Else
    ' Der er allerede noget i
End If

Hvis den er tom skal data bare lægges i som nu, men hvis den ikke er stom så skal de nye data lægges til det eksisterende. Noget i denne stil:

If "" & Cart(4,Items) = "" Then
    Cart(2,Items) = RS("vine_id")
Else
    Cart(2,Items) = Cart(2,Items) & "|" & RS("vine_id")
End If
Avatar billede mecenor Nybegynder
23. februar 2006 - 00:58 #5
OK, jeg har prøvet en del, men jeg kan ikke helt få dine forslag passet ind.

Kunne man lave noget i retning af:

if flexflaske = 1 then
  Cart(2,Items) = RS("vine_id") & "-" & flexflaske
else
  Cart(2,Items) = RS("vine_id")
end if

og så hente den rigtige vare i Cart efter id og eventuelt flexflaske variablen?:

if flexflaske = 1 then
  if Int(Cart(2,i)) = Int(RS("vine_ID")) & "-" & 1 then
else
  if Int(Cart(2,i)) = Int(RS("vine_ID")) then
end if
Avatar billede mecenor Nybegynder
24. februar 2006 - 01:10 #6
Jeg mangler virkelig noget ekspertise - det her er det sidste problem, der står i vejen for et færdigt projekt.

I varerkurven skal det være muligt at kende forskel på varer med samme ID. En løsning kunne være at tildele hver vare en variabel og så tjekke om denne variabel er 0 eller 1. Men hver gang der laves kald til databasen skal det være ID uden variabel. Jeg synes ikke det lyder så svært, men jeg kan simpelthen ikke få det til at virke...

Kode:

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

if Request.QueryString("action") = "add" then
'Antager det en ny
    Items = Items + 1
    nyvin = true
    paatilbud = 0
    flexflaske = 0
   
    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 Request.Form("mode")="flaskeindkob" or Cart(12,i) = 1 then
            flexflaske = 1
        else
            flexflaske = 0
        end if
        if Int(Cart(2,i)) = Int(RS("vine_ID")) then 'her skal der vel skelnes
            if Cart(5,i) = 0 then
                Cart(5,i) = 1
            end if
'            if flexflaske = 1 then
'                Cart(2,i) = Cart(2,i) & "1"
'            end if
            Items = i
            nyvin = false
        exit for
        end if
        next
   
    'Tilføj ny
    if nyvin = true then

          Cart(1,Items) = Items
          Cart(2,Items) = (RS("vine_id"))
          Cart(3,Items) = RS("vine_navn")
          if loggetind = "ja" and paatilbud <> 1 then
            Rabat = (FormatNumber(RS("pris"),2))*FormatNumber(0.15,2)
            medlemspris = (FormatNumber(RS("pris"),2))-(FormatNumber(Rabat,2))
            if flexflaske = 1 then
                Cart(4,Items) = (medlemspris)*(request.form("kassefelt"))
            else
                Cart(4,Items) = ((medlemspris)*(RS("Kasseantal")))*(request.form("kassefelt"))
            end if
          else
            if flexflaske = 1 then
                Cart(4,Items) = (RS("pris"))*(request.form("kassefelt"))
            else
                Cart(4,Items) = ((RS("pris"))*(RS("Kasseantal")))*(request.form("kassefelt"))
            end if
          end if
          Cart(5,Items) = 1
          Cart(6,Items) = RS("Kasseantal")
          Cart(7,Items) = request.form("kassefelt")
          Cart(8,Items) = rs("huse_navn")
          Cart(9,Items) = rs("Aargang")
          Cart(10,Items) = rs("lager")
          Cart(11,Items) = rs("pris")
          Cart(12,Items) = flexflaske

Længere ned i koden:

Session("Cart") = Cart
if nyvin = true then
  Session("Items") = Items
end if
Items = Session("Items")

Sig til hvis jeg skal prøve at forklare det bedre...
Avatar billede mecenor Nybegynder
03. marts 2006 - 12:29 #7
OK, fik det aldrig til at virker, det blev et workaround, hvor der så ikke skal skelnes mellem en status.
Læg et svar Nielle, så er der lidt point som tak for forsøget.
Avatar billede nielle Nybegynder
03. marts 2006 - 17:20 #8
Ups - glemte denne. :^|

Nej tak til point på den - jeg løste jo ikke dit problem for dig. Tag du dem bare selv igen. Men ellers tak for tilbudet. :^)
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