26. maj 2005 - 19:06Der er
23 kommentarer og 1 løsning
Ingen dubletter i varialble
Hej
Jeg er ved at lave en indkøbskurv og bruger session variabler til det. Men hvis man tilføje en ens vare over to gange, for feks. at tilføje en mere af denne vare, så kommer det til at stå to gange.
Kan man ikke ligge dem sammen?
arrVarerIKurven arrAntalAfVaren
arrVarerIKurven er den var. som indeholder varenummeret. Og arrAntalAfVaren er den var. der indeholder antalet.
Hvis der så er to ens arrVarerIKurven skal d to tilhørende arrAntalAfVaren ligges sammen..
findes = false for i = 0 to Ubound(arrVarerIKurven) if NyKode = arrVarerIKurven(i) then ' NyKode var lig med "næværende kode i arrVarerIKurven" = findes allerede findes = true exit for end if next
if findes = true then for j = 0 to ubound(arrAntalAfVaren) if i = j then arrAntalAfVaren = CInt(arrAntalAfVaren) + 1 exit for end if next end if
findes = false for i = 0 to Ubound(arrVarerIKurven) if NyKode = arrVarerIKurven(i) then ' NyKode var lig med "næværende kode i arrVarerIKurven" = findes allerede arrAntalAfVaren = CInt(arrAntalAfVaren) + 1 exit for end if next
for i = 0 to Ubound(arrVarerIKurven) if NyKode = arrVarerIKurven(i) then ' NyKode var lig med "næværende kode i arrVarerIKurven" = findes allerede arrAntalAfVaren(i) = CInt(arrAntalAfVaren(i)) + 1 exit for end if next
Jeg går ud fra, at AntalAfVaren *kun* indeholder hele tal (f.eks 1, 4, 2, osv) og ikke kommatal (f.eks. "2,3", "5,4", osv).. Er det korrekt?
Mine variabler: NyKode = den nye kode, som skal lægges i kurven arrVarerIKurven(i) = den nuværende var i kurven, NyKode skal sammenlignes med arrAntalAfVaren(i) = det nuværende antal af varen, der skal lægges 1 til
Jeg mener at have forstået dig korrekt, og at min kode virker som det skal..
Jeg har lavet et eksempel til dig (smid det i en ny ASP-fil):
<% Option Explicit
dim output dim arrVarerIKurven, arrAntalAfVaren, NyKode
arrVarerIKurven = "hus,bil,cykel" ' disse vare har kunden lagt i kurven arrVarerIKurven = split(arrVarerIKurven, ",")
arrAntalAfVaren = "1,1,1" ' antallet af varene i kurven arrAntalAfVaren = split(arrAntalAfVaren, ",")
response.write "I kurven lægger der nu:<br><br>" for output = 0 to ubound(arrVarerIKurven) response.write arrVarerIKurven(output) & ": " & arrAntalAfVaren(output) & "<br>" next
NyKode = "bil" ' brugeren har lige tilføjet "bil" til kurven response.write "<br>kunden har lige tilføjet *" & NyKode & "* til kurven"
dim i
for i = 0 to Ubound(arrVarerIKurven) if NyKode = arrVarerIKurven(i) then ' NyKode var lig med "næværende kode i arrVarerIKurven" = findes allerede arrAntalAfVaren(i) = CInt(arrAntalAfVaren(i)) + 1 exit for end if next
response.write "<br><br>I kurven er der nu:<br><br>"
for output = 0 to ubound(arrVarerIKurven) response.write arrVarerIKurven(output) & ": " & arrAntalAfVaren(output) & "<br>" next %>
for j = 0 to Ubound(arrVarerIKurven) if NyKode = arrVarerIKurven(j) then ' NyKode var lig med "næværende kode i arrVarerIKurven" = findes allerede arrAntalAfVaren(j) = CInt(arrAntalAfVaren(j)) + Request.Form("count") exit for end if next
Men jeg bruger jo sessions til at flytte "kurven" mellem flere sider.. Virker de der arrAntalAfVaren(i) på alle sider eller hvordan?
for j = 0 to Ubound(arrVarerIKurven) if NyKode = arrVarerIKurven(j) then ' NyKode var lig med "næværende kode i arrVarerIKurven" = findes allerede arrAntalAfVaren(j) = CInt(arrAntalAfVaren(j)) + Request.Form("count") exit for end if next
dim tmpVarer, tmpAntal
tmpVarer = "" tmpAntal = ""
for i = 0 to ubound(arrVarerIKurven) tmpVarer = tmpVarer & arrVarerIKurven(i) & "|" tmpAntal = tmpAntal & arrAntalAfVaren(i) & "|" next
' man skal huske at fjerne de sidste auto-genererede "|" tmpVarer = left(tmpVarer, len(tmpVarer) - 1) tmpAntal = left(tmpAntal, len(tmpAntal) - 1)
Den siger "Hvis der IKKE allerede er noget i kurver, tiløj noget nyt".. den IF-blok har jeg fjernet/rettet til..
Så er der noget nyt kode til dig :-)
Jeg har flyttet positionen af deklarationen af nogle variabler, og tilføjet en variabel, så det ser sådan ud:
dim output, i dim arrVarerIKurven, arrAntalAfVaren, NyKode, count dim fundet
HUSK: Man skal aldrig stole på brugeren! :-) Du skal derfor ALTID sikre dig, at de oplysninger bruger giver dig, er i de korrekte formater. Hvis brugeren skriv "a" i stedet for antallet af varer, vil din nuværende kode lave fejl.. derfor tilføjer jeg IsNumeric = false:
if request.form("count") = "0" or request.form("count") = "" or IsNumeric(request.form("count")) = false then
Jeg har også tilføjet et "check", der checker om det er en ny vare:
fundet = "nej" for i = 0 to Ubound(arrVarerIKurven) if NyKode = arrVarerIKurven(i) then ' NyKode var lig med "næværende kode i arrVarerIKurven" = findes allerede fundet = "ja" arrAntalAfVaren(i) = CInt(arrAntalAfVaren(i)) + request.form("count") exit for end if next
if fundet = "nej" then ' vare blev ikke fundet i kurver.. altså er det en ny vare.. redim preserve arrVarerIKurven(ubound(arrVarerIKurven) + 1) ' indsæt en plads mere i arrayen redim preserve arrAntalAfVaren(ubound(arrAntalAfVaren) + 1) ' indsæt en plads mere i arrayen arrVarerIKurven(ubound(arrVarerIKurven)) = NyKode ' indsæt varenummeret i arrayen arrAntalAfVaren(ubound(arrAntalAfVaren)) = request.form("count") ' indsæt antallet i arrayen end if
Af en eller anden mærkelig årsag, havde jeg lavet koden sådan, at man kunne tilføje 1 stk til en eksisterende vare :-) Underligt.. menu nu er det rettet :-)
Resten af koden er den samme..
Og lige en sidste ting.. Du kan ikke stole på Request.Servervariables("HTTP_REFERER"), da det kan slået fra.. og det har jeg f.eks. gjort..
Jeg har lavet noget ASP kode, du kan bruge i stedet...
1) opret en ny ASP fil, med filnavnet "inc.asp". Den skal indeholder følgende linie:
if fundet = "nej" then ' vare blev ikke fundet i kurver.. altså er det en ny vare.. redim preserve arrVarerIKurven(ubound(arrVarerIKurven) + 1) ' indsæt en plads mere i arrayen redim preserve arrAntalAfVaren(ubound(arrAntalAfVaren) + 1) ' indsæt en plads mere i arrayen arrVarerIKurven(ubound(arrVarerIKurven)) = NyKode ' indsæt varenummeret i arrayen arrAntalAfVaren(ubound(arrAntalAfVaren)) = request.form("count") ' indsæt antallet i arrayen end if
For den tilføjer ikke en vare til kurven.. Nu kan den slet ikke tilføje noget til kurven..
Men kan det ikke have noget at gøre med at der ikke er noget i arry'en fra start af?
if fundet = "nej" then ' vare blev ikke fundet i kurver.. altså er det en ny vare.. redim preserve arrVarerIKurven(ubound(arrVarerIKurven) + 1) ' indsæt en plads mere i arrayen redim preserve arrAntalAfVaren(ubound(arrAntalAfVaren) + 1) ' indsæt en plads mere i arrayen arrVarerIKurven(ubound(arrVarerIKurven)) = NyKode ' indsæt varenummeret i arrayen arrAntalAfVaren(ubound(arrAntalAfVaren)) = count ' indsæt antallet i arrayen end if
virker fint hos mig..
Min komplette test-kode (gemme ikke i session, se sidst i koden):
<% dim output, i dim arrVarerIKurven, arrAntalAfVaren, NyKode, count dim fundet
arrVarerIKurven = "" ' disse vare har kunden lagt i kurven response.write "<br>Varer: " & arrVarerIKurven arrVarerIKurven = split(arrVarerIKurven, "|")
arrAntalAfVaren = "" ' antallet af varene i kurven response.write "<br>Antal: " & arrAntalAfVaren arrAntalAfVaren = split(arrAntalAfVaren, "|")
response.write "<br><br>I kurven lægger der nu:<br><br>" for output = 0 to ubound(arrVarerIKurven) response.write arrVarerIKurven(output) & ": " & arrAntalAfVaren(output) & "<br>" next
if request.servervariables("request_method") = "POST" then if request.form("id") = "" or request.form("count") = "0" or request.form("count") = "" or IsNumeric(request.form("count")) = false then response.write "<br><br><b>Du mangler at skrive varenummer og/eller antal!</b>" else dim id: id = request.form("id") ' NyKode = "bil" ' brugeren har lige tilføjet "bil" til kurven NyKode = id count = CInt(request.form("count"))
response.write "<br>kunden har lige tilføjet <b>" & count & "x " & NyKode & "</b> til kurven"
fundet = "nej" for i = 0 to Ubound(arrVarerIKurven) if NyKode = arrVarerIKurven(i) then ' NyKode var lig med "næværende kode i arrVarerIKurven" = findes allerede fundet = "ja" arrAntalAfVaren(i) = CInt(arrAntalAfVaren(i)) + request.form("count") exit for end if next
if fundet = "nej" then ' vare blev ikke fundet i kurver.. altså er det en ny vare.. redim preserve arrVarerIKurven(ubound(arrVarerIKurven) + 1) ' indsæt en plads mere i arrayen redim preserve arrAntalAfVaren(ubound(arrAntalAfVaren) + 1) ' indsæt en plads mere i arrayen arrVarerIKurven(ubound(arrVarerIKurven)) = NyKode ' indsæt varenummeret i arrayen arrAntalAfVaren(ubound(arrAntalAfVaren)) = count ' indsæt antallet i arrayen end if
response.write "<br><br>I kurven er der nu:<br><br>"
for output = 0 to ubound(arrVarerIKurven) response.write arrVarerIKurven(output) & ": " & arrAntalAfVaren(output) & "<br>" next
' genopbyg session: dim tmpVarer, tmpAntal
tmpVarer = "" tmpAntal = ""
for i = 0 to ubound(arrVarerIKurven) tmpVarer = tmpVarer & arrVarerIKurven(i) & "|" tmpAntal = tmpAntal & arrAntalAfVaren(i) & "|" next
' man skal huske at fjerne de sidste auto-genererede "|": tmpVarer = left(tmpVarer, len(tmpVarer) - 1) tmpAntal = left(tmpAntal, len(tmpAntal) - 1)
<% dim output, i dim arrVarerIKurven, arrAntalAfVaren, NyKode, count dim fundet
arrVarerIKurven = "" ' disse vare har kunden lagt i kurven response.write "<br>Varer: " & arrVarerIKurven arrVarerIKurven = split(arrVarerIKurven, "|")
arrAntalAfVaren = "" ' antallet af varene i kurven response.write "<br>Antal: " & arrAntalAfVaren arrAntalAfVaren = split(arrAntalAfVaren, "|")
if ubound(arrVarerIKurven) = -1 then response.write "<br><br><b>Kurven er tom!</b><br><br>" else response.write "<br><br>I kurven lægger der nu:<br><br>" for output = 0 to ubound(arrVarerIKurven) response.write arrVarerIKurven(output) & ": " & arrAntalAfVaren(output) & "<br>" next end if
if request.servervariables("request_method") = "POST" then if request.form("id") = "" or request.form("count") = "0" or request.form("count") = "" or IsNumeric(request.form("count")) = false then response.write "<br><br><b>Du mangler at skrive varenummer og/eller antal!</b>" else dim id: id = request.form("id") ' NyKode = "bil" ' brugeren har lige tilføjet "bil" til kurven NyKode = id count = CInt(request.form("count"))
response.write "<br>kunden har lige tilføjet <b>" & count & "x " & NyKode & "</b> til kurven"
fundet = "nej" for i = 0 to Ubound(arrVarerIKurven) if NyKode = arrVarerIKurven(i) then ' NyKode var lig med "næværende kode i arrVarerIKurven" = findes allerede fundet = "ja" arrAntalAfVaren(i) = CInt(arrAntalAfVaren(i)) + request.form("count") exit for end if next
if fundet = "nej" then ' vare blev ikke fundet i kurver.. altså er det en ny vare.. redim preserve arrVarerIKurven(ubound(arrVarerIKurven) + 1) ' indsæt en plads mere i arrayen redim preserve arrAntalAfVaren(ubound(arrAntalAfVaren) + 1) ' indsæt en plads mere i arrayen arrVarerIKurven(ubound(arrVarerIKurven)) = NyKode ' indsæt varenummeret i arrayen arrAntalAfVaren(ubound(arrAntalAfVaren)) = count ' indsæt antallet i arrayen end if
response.write "<br><br>I kurven er der nu:<br><br>"
for output = 0 to ubound(arrVarerIKurven) response.write arrVarerIKurven(output) & ": " & arrAntalAfVaren(output) & "<br>" next
' genopbyg session: dim tmpVarer, tmpAntal
tmpVarer = "" tmpAntal = ""
for i = 0 to ubound(arrVarerIKurven) tmpVarer = tmpVarer & arrVarerIKurven(i) & "|" tmpAntal = tmpAntal & arrAntalAfVaren(i) & "|" next
' man skal huske at fjerne de sidste auto-genererede "|": tmpVarer = left(tmpVarer, len(tmpVarer) - 1) tmpAntal = left(tmpAntal, len(tmpAntal) - 1)
<% dim output, i dim arrVarerIKurven, arrAntalAfVaren, NyKode, count dim fundet
arrVarerIKurven = "" ' disse vare har kunden lagt i kurven arrVarerIKurven = split(arrVarerIKurven, "|")
arrAntalAfVaren = "" ' antallet af varene i kurven arrAntalAfVaren = split(arrAntalAfVaren, "|")
if request.servervariables("request_method") = "POST" then
if request.form("id") = "" or request.form("count") = "0" or request.form("count") = "" or IsNumeric(request.form("count")) = false then response.write "<br><br><b>Du mangler at skrive varenummer og/eller antal!</b>" else dim id: id = request.form("id") ' NyKode = "bil" ' brugeren har lige tilføjet "bil" til kurven NyKode = id count = CInt(request.form("count"))
response.write "<br>kunden har lige tilføjet <b>" & count & "x " & NyKode & "</b> til kurven"
fundet = "nej" for i = 0 to Ubound(arrVarerIKurven) if NyKode = arrVarerIKurven(i) then ' NyKode var lig med "næværende kode i arrVarerIKurven" = findes allerede fundet = "ja" arrAntalAfVaren(i) = CInt(arrAntalAfVaren(i)) + request.form("count") exit for end if next
if fundet = "nej" then ' vare blev ikke fundet i kurver.. altså er det en ny vare.. redim preserve arrVarerIKurven(ubound(arrVarerIKurven) + 1) ' indsæt en plads mere i arrayen redim preserve arrAntalAfVaren(ubound(arrAntalAfVaren) + 1) ' indsæt en plads mere i arrayen arrVarerIKurven(ubound(arrVarerIKurven)) = NyKode ' indsæt varenummeret i arrayen arrAntalAfVaren(ubound(arrAntalAfVaren)) = count ' indsæt antallet i arrayen end if
response.write "<br><br>I kurven er der nu:<br><br>"
for output = 0 to ubound(arrVarerIKurven) response.write arrVarerIKurven(output) & ": " & arrAntalAfVaren(output) & "<br>" next
' genopbyg session: dim tmpVarer, tmpAntal
tmpVarer = "" tmpAntal = ""
for i = 0 to ubound(arrVarerIKurven) tmpVarer = tmpVarer & arrVarerIKurven(i) & "|" tmpAntal = tmpAntal & arrAntalAfVaren(i) & "|" next
' man skal huske at fjerne de sidste auto-genererede "|": tmpVarer = left(tmpVarer, len(tmpVarer) - 1) tmpAntal = left(tmpAntal, len(tmpAntal) - 1)
<% dim output, i dim arrVarerIKurven, arrAntalAfVaren, NyKode, count dim fundet dim tmpItems, tmpCount
arrVarerIKurven = "" & session("Varenr") '"" ' disse vare har kunden lagt i kurven arrVarerIKurven = split(arrVarerIKurven, "|")
arrAntalAfVaren = "" & session("Antal") '"" ' antallet af varene i kurven arrAntalAfVaren = split(arrAntalAfVaren, "|")
if ubound(arrVarerIKurven) > -1 then
response.write "I kurven ligger der: <br>"
for i = LBound(arrVarerIKurven) to ubound(arrVarerIKurven) response.write "<br>" response.write arrVarerIKurven(i) & ": " & arrAntalAfVaren(i) next else response.write "Kurven er tom!" end if
if request.servervariables("request_method") = "POST" then
if request.form("id") = "" or request.form("count") = "0" or request.form("count") = "" or IsNumeric(request.form("count")) = false then response.write "<br><br><b>Du mangler at skrive varenummer og/eller antal!</b>" else dim id: id = request.form("id") ' NyKode = "bil" ' brugeren har lige tilføjet "bil" til kurven NyKode = id count = CInt(request.form("count"))
response.write "<br>kunden har lige tilføjet <b>" & count & "x " & NyKode & "</b> til kurven"
fundet = "nej" for i = 0 to Ubound(arrVarerIKurven) if NyKode = arrVarerIKurven(i) then ' NyKode var lig med "næværende kode i arrVarerIKurven" = findes allerede fundet = "ja" arrAntalAfVaren(i) = CInt(arrAntalAfVaren(i)) + request.form("count") exit for end if next
if fundet = "nej" then ' vare blev ikke fundet i kurver.. altså er det en ny vare.. redim preserve arrVarerIKurven(ubound(arrVarerIKurven) + 1) ' indsæt en plads mere i arrayen redim preserve arrAntalAfVaren(ubound(arrAntalAfVaren) + 1) ' indsæt en plads mere i arrayen arrVarerIKurven(ubound(arrVarerIKurven)) = NyKode ' indsæt varenummeret i arrayen arrAntalAfVaren(ubound(arrAntalAfVaren)) = count ' indsæt antallet i arrayen end if
response.write "<br><br>I kurven er der nu:<br><br>"
for output = 0 to ubound(arrVarerIKurven) response.write arrVarerIKurven(output) & ": " & arrAntalAfVaren(output) & "<br>" next
' genopbyg session: dim tmpVarer, tmpAntal
tmpVarer = "" tmpAntal = ""
for i = 0 to ubound(arrVarerIKurven) tmpVarer = tmpVarer & arrVarerIKurven(i) & "|" tmpAntal = tmpAntal & arrAntalAfVaren(i) & "|" next
' man skal huske at fjerne de sidste auto-genererede "|": tmpVarer = left(tmpVarer, len(tmpVarer) - 1) tmpAntal = left(tmpAntal, len(tmpAntal) - 1)
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.