Avatar billede mini-me Nybegynder
21. marts 2008 - 19:26 Der er 19 kommentarer og
1 løsning

Sammen tælling af ens Elementer i session objekt

Hej,

Jeg har en session streng som består af flg.: item, numbers, param1, param2

eks. på streng med 3 varer (2 af varene er ens)

0207000069:1:0:0,0207000069:1:0:0,10233:2:0:0

hvis jeg så har 2 id der er ens, hvordan sammentæller jeg dem så inden jeg skriver dem ud?

i dag ser min kode sådan ud:

if session.Contents("Basket.Content") <> "" then
            ' print basket
           
            arrBasket = split(session.Contents("Basket.Content"),",")
           
            for each basketItem in arrBasket
                               
                lineEntry = split(basketItem,":")
                strTMP = strTMP & " x " & left(getFieldValue("inventory", "description", "item", lineEntry(0)),12) & "..."  & " " & printPrice(encodeUTF8(lineEntry(0))) &  " DKK" & "<br />"
                       
            next
           
            smallBasket = strTMP
        else
            smallBasket = "Din kurv er tom"
        end if
       
    end function


det fungerere egentlig fint, men hvis der er 2 varer i samme kurv som b[de
Avatar billede mini-me Nybegynder
21. marts 2008 - 20:33 #1
Der er faktisk et krav mere der skal være opfyldt før at man tæller produktet sammen, det er at parametrene skal være ens.

varenummer:10, 1 stk, x-small, grå
varenummer:10, 1 stk, x-large, grå
varenummer:10, 1 stk, x-small, grå
varenummer:10, 1 stk, x-small, blå

skal give

2 stk x-small grå
1 stk, x-small, grå
1 stk, x-small, blå
Avatar billede mini-me Nybegynder
21. marts 2008 - 21:34 #2
Nogen der har nogle alternative forslag?
Avatar billede mini-me Nybegynder
22. marts 2008 - 11:41 #3
Hmmm, jeg har tænkt lidt over det og laver det om så det er når jeg lægger vare i kurven at jeg tjekker om der findes en streng. Dette har jeg også selv skrevet mig frem til, men hvordan forøger jeg antallet?

searchString = itemId & ":" & numbers & ":" & param1 & ":" & param2
            basketArr = split(session.Contents("Basket.Content"),",")
           
           
            Dim iLoop, bolFound
            bolFound = False
           
            For iLoop = LBound(basketArr) to UBound(basketArr)
              If CStr(basketArr(iLoop)) = CStr(searchString) then
                for each linesEntry in basketArr
                   
                next
              End If
            Next
           
            response.Write(bolFound)
Avatar billede jansangill Nybegynder
22. marts 2008 - 22:50 #4
Hvad skal forøges, og hvad er det der ikke lykekdes.
Avatar billede mini-me Nybegynder
22. marts 2008 - 23:10 #5
numbers burde hedde quantity i stedet, og det er quantity der skal forøges hvis der findes en streng som er ens med den der tilføjes.
Avatar billede jansangill Nybegynder
23. marts 2008 - 10:23 #6
hvis dit virker, er det ikke så bare at i din "for each linesEntry in basketArr", der skal du sætte din basketArr(iLoop)= det samme, men plusse numbers op?


for each linesEntry in basketArr 'regner med dette her er en split af f.x: "0207000069:1:0:0"

    basketArr(iLoop)=array(0) & ":" & array(1)+1 & ":" & array(2) & ":" & array(3)
                   
next


Synes dog at dit tjek på hvorvidt searchString er = en værdi i din basket burde tages samtidig med at du tilføjer varer i din kurv.

if searchString =basketArr(iLoop) then
  'split din basketArr(iLoop)
  'plus numbers op
  'gem din sessionværdi
else
  'tilføj endnu et vare i din session
end if
Avatar billede mini-me Nybegynder
23. marts 2008 - 10:36 #7
Det kan jeg umiddelbart ikke få til at virke...

if session.Contents("Basket.Content") <> "" then

            ' a basket is found, check if any product is in it first and add number
            searchString = itemId & vbTab & ":" & vbTab & numbers & vbTab & ":" & vbTab & param1 & vbTab & ":" & vbTab & param2
            basketArr = split(session.Contents("Basket.Content"),",")
           
           
            Dim iLoop, bolFound
            bolFound = False
           
            For iLoop = LBound(basketArr) to UBound(basketArr)
              If CStr(basketArr(iLoop)) = CStr(searchString) then
               
                for each linesEntry in basketArr 'regner med dette her er en split af f.x: "0207000069:1:0:0"
                    basketArr(iLoop)=array(0) & ":" & array(1)+1 & ":" & array(2) & ":" & array(3)
                next

               
              End If
            Next

           
            strBasket = ""
            strBasket = vbTab & "-" & vbTab & itemId & vbTab & ":" & vbTab & numbers & vbTab & ":" & vbTab & param1 & vbTab & ":" & vbTab & param2
           
            session.Contents("Basket.Content") = session.Contents("Basket.Content") & strBasket
        else
            ' a basket is not found - create
            strBasket = ""
            strBasket = itemId & vbTab & ":" & vbTab & numbers & vbTab & ":" & vbTab & param1 & vbTab & ":" & vbTab & param2
           
            session.Contents("Basket.Content") = strBasket

        end if
Avatar billede mini-me Nybegynder
23. marts 2008 - 10:36 #8
Typer stemmer ikke overens i denne linie basketArr(iLoop)=array(0) & ":" & array(1)+1 & ":" & array(2) & ":" & array(3)
Avatar billede jansangill Nybegynder
23. marts 2008 - 11:32 #9
Hehe ja undskyld, skulle nok have sagt at array(0) etc, bare er mig der har placeret dem der. Du skal bruge den array, som de er taget fra. Ved ikke helt hvad det er.

Kan du vise mig alt det kode du bruger til at tilføje varer til kurv, måske har du allerede vist det, men bare for at være på den sikre side.

Og du behøver ikke vise mig det kode du bruger til at skrive din kurv ud.
Avatar billede mini-me Nybegynder
23. marts 2008 - 11:44 #10
function addtobasket(itemId,numbers,param1,param2)
   
        if session.Contents("Basket.Content") <> "" then

            ' a basket is found, check if any product is in it first and add number
            searchString = itemId & vbTab & ":" & vbTab & numbers & vbTab & ":" & vbTab & param1 & vbTab & ":" & vbTab & param2
            basketArr = split(session.Contents("Basket.Content"),",")
           
           
            Dim iLoop, bolFound
            bolFound = False
           
            For iLoop = LBound(basketArr) to UBound(basketArr)
              If CStr(basketArr(iLoop)) = CStr(searchString) then
               
                for each linesEntry in basketArr 'regner med dette her er en split af f.x: "0207000069:1:0:0"
                    basketArr(iLoop)=array(0) & ":" & array(1)+1 & ":" & array(2) & ":" & array(3)
                next

               
              End If
            Next

           
            strBasket = ""
            strBasket = vbTab & "-" & vbTab & itemId & vbTab & ":" & vbTab & numbers & vbTab & ":" & vbTab & param1 & vbTab & ":" & vbTab & param2
           
            session.Contents("Basket.Content") = session.Contents("Basket.Content") & strBasket
        else
            ' a basket is not found - create
            strBasket = ""
            strBasket = itemId & vbTab & ":" & vbTab & numbers & vbTab & ":" & vbTab & param1 & vbTab & ":" & vbTab & param2
           
            session.Contents("Basket.Content") = strBasket

        end if
       
        'session.Contents.RemoveAll()
   
    end function
Avatar billede mini-me Nybegynder
23. marts 2008 - 11:44 #11
det er alt...
Avatar billede jansangill Nybegynder
23. marts 2008 - 12:07 #12
Kan ikke sige om dette virker, men hvis du forstår hvor jeg vil hen med det, kan du vel selv rette det til. Elelrs må du sige til.


<%
function addtobasket(itemId,numbers,param1,param2)
 
        if session.Contents("Basket.Content") <> "" then

            ' a basket is found, check if any product is in it first and add number
            searchString = itemId & vbTab & ":" & vbTab & numbers & vbTab & ":" & vbTab & param1 & vbTab & ":" & vbTab & param2
            basketArr = split(session.Contents("Basket.Content"),",")
         
         
            Dim iLoop, bolFound
            bolFound = False
         
            For iLoop = LBound(basketArr) to UBound(basketArr)
              If CStr(basketArr(iLoop)) = CStr(searchString) then
                  'split basketArr(iLoop)
                  temp_array=split(basketArr(iLoop),":")
                  strBasket = temp_array(0) & vbTab & ":" & vbTab & temp_array(1)+1 & vbTab & ":" & vbTab & temp_array(2) & vbTab & ":" & vbTab & temp_array(3)
                 
                  session.Contents("Basket.Content") = replace(session.Contents("Basket.Content"),basketArr(iLoop),strBasket)
                 
              else
                    strBasket = vbTab & "-" & vbTab & itemId & vbTab & ":" & vbTab & numbers & vbTab & ":" & vbTab & param1 & vbTab & ":" & vbTab & param2
                  session.Contents("Basket.Content") = session.Contents("Basket.Content") & strBasket
              End If
            Next

         
        else
            ' a basket is not found - create
            strBasket = ""
            strBasket = itemId & vbTab & ":" & vbTab & numbers & vbTab & ":" & vbTab & param1 & vbTab & ":" & vbTab & param2
         
            session.Contents("Basket.Content") = strBasket

        end if
     
        'session.Contents.RemoveAll()
 
    end function
   
%>
Avatar billede mini-me Nybegynder
23. marts 2008 - 12:32 #13
det virker ikke rigtig, du kan se resultatet her: http://85.83.94.48/showProduct.asp?id=1201%20brun

den tilføjer bare endnu en varelinie.
Avatar billede jansangill Nybegynder
23. marts 2008 - 13:27 #14
Prøv at fejlfind..

If CStr(basketArr(iLoop)) = CStr(searchString) then
  response.write "TEST"
  response.end()
etc etc


Det er svært for mig at vide om den kommer ind i den eller ej.

Hvis den ikke kommer ind, så er det jo fordi at der er en fejl et eller andet sted, som jeg ikke lige kan se da det er dig der sidder med alt det her.

Hvis den ikke kommer ind, så prøv at skrive det hele ud, og se hvad der sker:


For iLoop = LBound(basketArr) to UBound(basketArr)
  response.write basketArr(iLoop) & "=" & searchString & "<br>"
Next

Så kan du se om der er nogle der er ens eller ej.
Avatar billede mini-me Nybegynder
23. marts 2008 - 13:59 #15
Ville det ikke være nemmere at holde styr på det her hvis jeg lavede det til et 2 dimisionelt array?
Avatar billede jansangill Nybegynder
23. marts 2008 - 14:18 #16
Er der en grund til at rode med det?

Der er jo en grund til at den går ned til 'else' hver gang. Denne linie må jp åbenbart aldig være sand:
CStr(basketArr(iLoop)) = CStr(searchString)

Det ville være dejligt at se hvad der bliver skrevet ud, og se om de kan blive ens.
Avatar billede mini-me Nybegynder
23. marts 2008 - 14:29 #17
function addtobasket(itemId,numbers,param1,param2)

        if session.Contents("Basket.Content") <> "" then

            ' a basket is found, check if any product is in it first and add number
            searchString = itemId & vbTab & ":" & vbTab & numbers & vbTab & ":" & vbTab & param1 & vbTab & ":" & vbTab & param2
            basketArr = split(session.Contents("Basket.Content"),vbTab & "-" & vbTab)
                   
            Dim iLoop, bolFound
            bolFound = False
         
            For iLoop = LBound(basketArr) to UBound(basketArr)
              If CStr(basketArr(iLoop)) = CStr(searchString) then
                  'split basketArr(iLoop)
                 
                  response.Write("Der er fundet en matchende streng!")
                  exit for
                 
                 
                  temp_array=split(basketArr(iLoop),":")
                  strBasket = temp_array(0) & vbTab & ":" & vbTab & temp_array(1)+1 & vbTab & ":" & vbTab & temp_array(2) & vbTab & ":" & vbTab & temp_array(3)
                 
                  session.Contents("Basket.Content") = replace(session.Contents("Basket.Content"),basketArr(iLoop),strBasket)
                 
              else
                    strBasket = vbTab & "-" & vbTab & itemId & vbTab & ":" & vbTab & numbers & vbTab & ":" & vbTab & param1 & vbTab & ":" & vbTab & param2
                  session.Contents("Basket.Content") = session.Contents("Basket.Content") & strBasket
              End If
            Next

         
        else
            ' a basket is not found - create
            strBasket = ""
            strBasket = itemId & vbTab & ":" & vbTab & numbers & vbTab & ":" & vbTab & param1 & vbTab & ":" & vbTab & param2
         
            session.Contents("Basket.Content") = strBasket

        end if
     
        'session.Contents.RemoveAll()
 
    end function


Som du kan se så når den ind til det kode du har lavet, hvis den finder en streng udskriver den der er fundet en matchende streng nu.
Avatar billede jansangill Nybegynder
23. marts 2008 - 14:41 #18
jeps, den når derind:

SÅ må jeg indrømme at jeg ikke lige kan se hvad der er galt i funktionen.

Det jeg går ind og "prøver" på er jo bare at replace den streng som er ens med searchstring i din session, ved dette:

session.Contents("Basket.Content") = replace(session.Contents("Basket.Content"),basketArr(iLoop),strBasket)

Er bange for jeg ikke er smart nok, eller nok inde i din kode, til lige at sige hvad der går galt, når jeg ikke kan sidde med det.

Håber dog det lykekdes for dig. Hvis du vil have hjælp til denne spørgsmål, bliver du nok nødt til at spørge igen. Den er nok begravet for alle de andre.

Held og lykke!
Avatar billede mini-me Nybegynder
23. marts 2008 - 14:48 #19
Tak for hjælpe so far... men umiddelbart - så tror jeg at jeg vælger at skrive det om til at brug af et array, det er væsentlig mere overskueligt at holde styr på. Er dog stødt på et lille problem men det bliver i et nyt spørgsmål .-)

Smid et svar så får du lidt point for ulejligheden.
Avatar billede jansangill Nybegynder
23. marts 2008 - 14:51 #20
Nedj du, ta du bare alle.
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