Mød TrackMan og Veo på Computerworld Cloud & AI Festival og hør, hvordan tech ændrer måden, vi træner og udvikler talent – fra skolebold til The Masters.
for i = 0 to Ubound(myA) if i <> Cint(request("i")) then myAT(i) = myA(i) myIT(i) = myI(i) ReDim Preserve myAT(Ubound(myAT)+1) ReDim Preserve myIT(Ubound(myIT)+1) i = i + 1 end if i = i + 1 next
Session("id") = myIT Session("antal") = myAT
Meningen er, at [i] bliver medsendt, og det er så et element, der skal ikke skal kopieries over i henholdsvis myIT og myAT.
Du behøver ikke selv at tælle (med "i").. her er et eksempel:
<% ' Variablerne, der skal bruges, defineres: dim i dim tmpItems, tmpCount dim myA, myI
tmpItems = "" tmpCount = ""
myA = session("antal") ' format: 2,4,10 (dette er antallet af varer) myA = split(myA, ",")
myI = session("id") ' format: 45,87,291 (id'erne på varerne) myI = split(myI, ",")
for i = 0 to ubound(myI) if CInt(request.querystring("id")) <> myI(i) then tmpItems = tmpItems & items(i) & "," tmpCount = tmpCount & count(i) & "," end if next
' fjerner det sidste (overflødige) komma: tmpItems = left(tmpItems, len(tmpItems) - 1) tmpCount = left(tmpCount, len(tmpCount) - 1)
Hvis dit format (i sessionerne) er anderledes, skriv lige et eksempel, så jeg kan rette koden til..
PS: Du får "subscript out of range" fordi du har 2x "i = i + 1". Hvis du vil bruge "i = i + 1", skal du indsætte den anden "i = i + 1" i en ELSE:
for i = 0 to Ubound(myA) if i <> Cint(request("i")) then myAT(i) = myA(i) myIT(i) = myI(i) ReDim Preserve myAT(Ubound(myAT)+1) ReDim Preserve myIT(Ubound(myIT)+1) i = i + 1 else i = i + 1 end if next
for i = 0 to ubound(myI) if CInt(request.querystring("i")) <> myI(i) then tmpItems = tmpItems & myI(i) & "," tmpCount = tmpCount & myA(i) & "," end if next
Rettelserne: request.querystring("i") ' i stedet for "id" myI(i) ' i stedet for items(i) myA(i) ' i stedet for count(i)
Det er bedst at bruge den rette request-metode, fremfor bare at bruge request("noget her").
Dvs, hvis du bruger urls, brug Request.Querystring("noget her"). Hvis du bruger form, brug da Request.Form("noget her").
Ellers skal servere arbejde ekstra meget, da den så skal checke url, form, session, osv..
Det forstår jeg. Jeg har helt konkret gjort det, at jeg har lagt min egen kode over i en afdeling siden der ikke bliver kørt, og kører kun med din kode nu.
Det er det der er problemet. Resten af funktionaliteten er baseret på et array gemt i en Session. At ændre til en kommasepareret liste over hele linjen vil tage en krig.
Det var derfor jeg var ude efter hvordan man fjernede et element :-)
Prøvede for sjov lige at ændre min egen kode, og sætte tælleren i ELSE, men det giver desværre også samme resultat. Har du flere idéer? :-)
Fedt!! :-) Jeg er ikke så skide skarp i lige præcis arrays i vbscript (har brugt det under 4 gange, så jeg håber det er ok hvis jeg lige er lidt blank!)
Rodede lige lidt mere med min egen kode. Den virker partielt nu. Altså, jeg kan slette det sidste element, men ikke de foregående. Koden ser såden her ud nu:
myA = Session("antal") myI = Session("id") myAT = Array(0) myIT = Array(0) i=0 for i = 0 to Ubound(myA) if i = Cint(request("i")) then i = i + 1 else myAT(i) = myA(i) myIT(i) = myI(i) ReDim Preserve myAT(Ubound(myAT)+1) ReDim Preserve myIT(Ubound(myIT)+1) end if next
if Ubound(myAT) = 0 then response.redirect("basket.asp?action=clear") end if
Jeg bliver nød til at smutte nu.. men regner med at vende tilbage, engang i aften.. håber at vi finder en løsning.. er bare mega træt.. sidder næsten og sover foran computeren.. :-)
Eksempler: A) FjernElementFraArray mitArray, "World"
B) ElementetDerSkalFjernes = "World" FjernElementFraArray mitArray, ElementetDerSkalFjernes
Begge eksempler vil fjerne elementet "World", fra arrayen.
Her er koden:
<% option explicit ' Variabler (som vi skal bruge) SKAL dimmes! = undgå stavefejl response.buffer = true ' hele siden dannes, inden den sendes til browseren
' Variablerne vi skal bruge:
dim i dim intIndex ' kommer til at indeholde indekset til elementet, i arrayen dim ElementetDerSkalFjernes ' kommer til at indeholde, elementet i arrayen dim fejl ' kommer til at indeholde fejlmeddelser, når der opstår fejl fejl = "" ' nulstil fejlmeddelelse
'-- Dette er selve funktionene, der fjerner elementet fra arrayen: public sub FjernElementFraArray(arrNavnet, arrElement) on error resume next
if not IsArray(arrNavnet) then ' Den valgte array, er ikke en array.. vis en fejlmeddelelse: response.write "<br><b>Fejl! Den valgte array er ikke en array!</b><br><br>" exit sub end if
'-- Her findes indekset for det valgte elements (i variablen "ElementetDerSkalFjernes")
' sæt intIndex (indekset) til - 1, hvilket er uden for arrayen. Det vil give fejl, ' hvis elementet ikke findes i arrayen (og kun hvis det ikke findes): intIndex = - 1
for i = 0 to ubound(arrNavnet) if arrNavnet(i) = ElementetDerSkalFjernes then ' elementet er fundet, skriv indekset i variablen intIndex, og hop ud af loopen intIndex = i exit for end if next
if intIndex < LBound(arrNavnet) or intIndex > UBound(arrNavnet) then ' indekset er uden for arrayen = det findes ikke response.write "<br><b>Fejl! Det valgte element findes ikke i arrayen!</b><br><br>" exit sub end if
for i = intIndex to UBound(arrNavnet) - 1 ' ret arrayen til: arrNavnet(i) = arrNavnet(i + 1) next
redim preserve arrNavnet(Ubound(arrNavnet) - LBound(arrNavnet) - 1) ' fjern det overflødige element end sub
ElementetDerSkalFjernes = "World" ' dette er elementet i arrayen, der skal fjernes. I eksemplet: "World"
' --- Kodeblok - før sletning (denne kodeblok kan fjernes) - Start response.write "Før sletning:<br><br>" for i = 0 to ubound(mitArray) response.write i & ": " & mitArray(i) & "<br>" next response.write "<hr>" ' --- Kodeblok - før sletning (denne kodeblok kan fjernes) - Slut
' -- Du kan nu bruge mitArray, som array, til at gemme data i sessionen
' --- Kodeblok - efter sletning (denne kodeblok kan fjernes) - Start response.write "Efter sletning:<br><br>" for i = 0 to ubound(mitArray) response.write i & ": " & mitArray(i) & "<br>" next response.write "<hr>" ' --- Kodeblok - før sletning (denne kodeblok kan fjernes) - Slut
if err.number <> 0 then response.write "Der opstod en fejl:<br>" & err.number & " - " & err.description & "</b><br>" %>
Eksempel: Du har følgende: id 211 (2 stk), id 342 (5 stk), id 754 (3 stk) For at fjerne id 342 (og antallet af varer), bruger du en af disse metoder:
1) Fjern 342
2) Elementet = 342 Fjern Elementet
Begge metoder vil fjerne varen, med id'en 342, samt antallet (som er 5 stk).
<% option explicit ' Variabler (som vi skal bruge) SKAL dimmes! = undgå stavefejl response.buffer = true ' hele siden dannes, inden den sendes til browseren
' Variablerne vi skal bruge:
dim i dim intIndex ' kommer til at indeholde indekset til elementet, i arrayen dim Elementet ' kommer til at indeholde, elementet i arrayen dim fejl ' kommer til at indeholde fejlmeddelser, når der opstår fejl fejl = "" ' nulstil fejlmeddelelse
'-- Dette er selve funktionene, der fjerner elementet fra arrayen: public sub Fjern(arrElement) on error resume next
if not IsArray(myI) then ' Den valgte array, er ikke en array.. vis en fejlmeddelelse: response.write "<br><b>Fejl! Den valgte array er ikke en array!</b><br><br>" exit sub end if
'-- Her findes indekset for det valgte elements (i variablen "Elementet")
' sæt intIndex (indekset) til - 1, hvilket er uden for arrayen. Det vil give fejl, ' hvis elementet ikke findes i arrayen (og kun hvis det ikke findes): intIndex = - 1
for i = 0 to ubound(myI) if myI(i) = Elementet then ' elementet er fundet, skriv indekset i variablen intIndex, og hop ud af loopen intIndex = i exit for end if next
if intIndex < LBound(myI) or intIndex > UBound(myI) then ' indekset er uden for arrayen = det findes ikke response.write "<br><b>Fejl! Det valgte element findes ikke i arrayen!</b><br><br>" exit sub end if
for i = intIndex to UBound(myI) - 1 ' ret arrayen til: myI(i) = myI(i + 1) myA(i) = myA(i + 1) next
' id: redim preserve myI(Ubound(myI) - LBound(myI) - 1) ' fjern det overflødige element
' antal: redim preserve myA(Ubound(myA) - LBound(myA) - 1) ' fjern det overflødige element end sub
Elementet = 342 ' dette er elementet (id) i arrayen, der skal fjernes. I eksemplet: 342
' --- Kodeblok - før sletning (denne kodeblok kan fjernes) - Start response.write "Før sletning (formatet er: indexnummeret kolon id x antal):<br><br>" for i = 0 to ubound(myI) response.write i & ": " & myI(i) & " x" & myA(i) & "<br>" next response.write "<hr>" ' --- Kodeblok - før sletning (denne kodeblok kan fjernes) - Slut
Fjern Elementet ' Fjerner elementet fra arrayen (via funktionen "Fjern"):
' *********** Du kan nu bruge myI og myA som array, til at gemme data i sessionerne
' --- Kodeblok - efter sletning (denne kodeblok kan fjernes) - Start response.write "Efter sletning (formatet er: indexnummeret kolon id x antal):<br><br>" for i = 0 to ubound(myI) response.write i & ": " & myI(i) & " x" & myA(i) & "<br>" next response.write "<hr>" ' --- Kodeblok - før sletning (denne kodeblok kan fjernes) - Slut
' Fejlkoden "0" betyder "inden fejl". Vi checker lige om der er fejl: if err.number <> 0 then ' Hvis der opstår fejl (fejlkoden er IKKE 0), skriv fejlnummer og fejlbeskrivelse: response.write "Der opstod en fejl:<br>" & err.number & " - " & err.description & "</b><br>" end if %>
Jeg vil mene, at det her eksempel ligner din situation, mest:
<% option explicit ' Variabler (som vi skal bruge) SKAL dimmes! = undgå stavefejl response.buffer = true ' hele siden dannes, inden den sendes til browseren on error resume next ' den skal fortsætte med scriptet, selvom der opstår fejl
function TypenTal(input) ' Denne funktion tester om id'en (der hentes via request.querystring("id")) er af typen tal. ' Hvis der er bogstaver og/eller andre tegn, er der fejl, og det skal den melde.
for i = 1 to len(input) if instr("1,2,3,4,5,6,7,8,9,0,", mid(input, i, 1) & ",") < 1 then response.write "<br><br><b>Fejl! Varenummeret passer ikke!</b>" input = "" end if next
response.write "Følgende id'er kan bruges til testen (formatet er: indexnummeret kolon id x antal):<br><br>" for i = 0 to ubound(myI) response.write i & ": " & myI(i) & " x" & myA(i) & "<br>" & vbCrLf next
response.write "<br><a href=""" & request.servervariables("script_name") & "?id="">Klik på dette link, og skriv id-nummeret i urlen</a>" & vbCrLf
' Variablerne vi skal bruge:
dim i dim intIndex ' kommer til at indeholde indekset til elementet, i arrayen dim Elementet ' kommer til at indeholde, elementet i arrayen dim id ' kommer til at indeholder id'en fra urlen dim fejl ' kommer til at indeholde fejlmeddelser, når der opstår fejl fejl = "" ' nulstil fejlmeddelelse
'-- Dette er selve funktionene, der fjerner elementet fra arrayen: sub Fjern(arrElement)
'-- Da jeg har indsæt myI og myA direkte i koden, er denne IF-sætning overflødig: 'if not IsArray(myI) then ' ' Den valgte array, er ikke en array.. vis en fejlmeddelelse: ' response.write "<br><b>Fejl! Den valgte array er ikke en array!</b><br><br>" ' exit sub 'end if
'-- Her findes indekset for det valgte elements (i variablen "Elementet")
' sæt intIndex (indekset) til - 1, hvilket er uden for arrayen. Det vil give fejl, ' hvis elementet ikke findes i arrayen (og kun hvis det ikke findes): intIndex = - 1
for i = 0 to ubound(myI) if myI(i) = Elementet then ' elementet er fundet, skriv indekset i variablen intIndex, og hop ud af loopen intIndex = i exit for end if next
if intIndex < LBound(myI) or intIndex > UBound(myI) then ' indekset er uden for arrayen = det findes ikke response.write "<br><b>Fejl! Den valgte vare findes ikke i kurven!</b><br><br>" exit sub end if
for i = intIndex to UBound(myI) - 1 ' ret arrayen til: myI(i) = myI(i + 1) myA(i) = myA(i + 1) next
' id: redim preserve myI(Ubound(myI) - LBound(myI) - 1) ' fjern det overflødige element
' antal: redim preserve myA(Ubound(myA) - LBound(myA) - 1) ' fjern det overflødige element end sub
id = TypenTal(request.querystring("id")) ' test værdien af id, fra request.querystring("id") if id <> "" then
Elementet = id ' dette er elementet (id) i arrayen, der skal fjernes. I eksemplet: 342
' --- Kodeblok - før sletning (denne kodeblok kan fjernes) - Start response.write "<br><br>Før sletning (formatet er: indexnummeret kolon id x antal):<br><br>" for i = 0 to ubound(myI) response.write i & ": " & myI(i) & " x" & myA(i) & "<br>" next response.write "<hr>" ' --- Kodeblok - før sletning (denne kodeblok kan fjernes) - Slut
' --- Kodeblok - efter sletning (denne kodeblok kan fjernes) - Start response.write "<br><br>Efter sletning (formatet er: indexnummeret kolon id x antal):<br><br>" for i = 0 to ubound(myI) response.write i & ": " & myI(i) & " x" & myA(i) & "<br>" next response.write "<hr>" ' --- Kodeblok - før sletning (denne kodeblok kan fjernes) - Slut
end if ' denne END-IF tilhører id-testen.
'-- Her kan du vælge, om du vil vise brugeren en fejlmeddelelse, når der opstår fejl:
' Fejlkoden "0" betyder "ingen fejl". Vi checker lige om der er fejl: if err.number <> 0 and id <> "" then ' Hvis der opstår fejl (fejlkoden er IKKE 0), skriv fejlnummer og fejlbeskrivelse: response.write "<br><br>Der opstod en fejl:<br>" & err.number & " - " & err.description & "</b><br>" end if %>
(der var åbenbart problemer med at logge ind i går)
Synes godt om
Ny brugerNybegynder
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.