Avatar billede loukas Mester
08. februar 2006 - 22:29 Der er 1 kommentar og
1 løsning

slette fra array

Jeg har mere eller mindre selv lavet denne indkøbskurv.
Det fungerer fint med at tage 1 fra eller til antallet af en vare,
men når antallet er nede på 0, ja så skal varen fjernes helt fra kurven/arrayet.

Prøv evt. http://lachica.dk/kurv.asp

<%

'Her hentes Varevarianter
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open strconnect

SQL = "SELECT * FROM varevarianter WHERE variantnavn = 'variant1'"
set rs = objConn.Execute(SQL)
    strVar1 = rs("realname")

SQL = "SELECT * FROM varevarianter WHERE variantnavn = 'variant2'"
set rs = objConn.Execute(SQL)
    strVar2 = rs("realname")

set rs = nothing
objconn.close
%>

<center>

   

        <table border="1" CELLSPACING="0" CELLPADDING="0" width="80%" ID="Table1">
            <tr>
                <td bgcolor="#dcdcdc"><font face="verdana" size="1"><b>Vare</b></font></td>
                <%
                if strVar1 = "0" then
                %>
                <td bgcolor="#dcdcdc"></td>
                <td bgcolor="#dcdcdc"></td>
                <%
                else       
                %>
                <td bgcolor="#dcdcdc"><font face="verdana" size="1"><b><%=strVar1%></b></font>&nbsp;</td>
                <td bgcolor="#dcdcdc"><font face="verdana" size="1"><b><%=strVar2%></b></font>&nbsp;</td>
                <%
                end if
                %>
                <td bgcolor="#dcdcdc"><font face="verdana" size="1"><b>Antal</b></font></td>
                <td bgcolor="#dcdcdc"><font face="verdana" size="1"><b>Pris</b></font></td>
                <td bgcolor="#dcdcdc">-</td>
            </tr>
            <%   
If IsArray(Session("vare")) = false Then
  'Dim vare2(19,4)   
  vare2(1,0) = Request.QueryString("item")  'Vare nr eller anden ID
  vare2(1,1) = Request.Querystring("variant1")  '
  vare2(1,2) = Request.QueryString("variant2") '
  vare2(1,3) = Request.QueryString("count") 'Antalet af varen man vil k&oslash;be
  vare2(1,4) = Request.QueryString("pris")  'Varens pris
  Session("vare") = vare2
else
  vare2=session("vare")
  incart=false
  for i=lbound(vare2) to ubound(vare2)
    if vare2(i,0) = Request.QueryString("item") AND vare2(i,1) = Request.Querystring("variant1") AND vare2(i,2) = Request.Querystring("variant2") and not(incart) then
      'Opdater Countet
      vare2(i,3) = vare2(i,3) + CInt(Request.QueryString("count")) 'Antalet af varen man vil k&oslash;be
      incart=true
    end if
    if vare2(i,0)="" and vare2(i,1)="" and not(incart) then
      'Ligger nu vare i kurven
      vare2(i,0) = Request.QueryString("item")  'Vare nr eller anden ID
      vare2(i,1) = Request.Querystring("variant1")  'St&oslash;rrelse
      vare2(i,2) = Request.QueryString("variant2") 'Farven
      vare2(i,3) = Request.QueryString("count") 'Antalet af varen man vil k&oslash;be
      vare2(i,4) = Request.QueryString("pris")  'Varens pris
      incart=true
    end if
  next
  session("vare")=vare2
end if



Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open strConnect




pris = 0
vareid = 0
antalid = 0
farveid = 0
ialt = 0
for i=lbound(vare2) to ubound(vare2)
varenr = vare2(i,0)

    if len(varenr) > 0 then
        Set objRS = Server.CreateObject("ADODB.Recordset")
        Set objRS.ActiveConnection = objconn
        SQL = "SELECT * FROM varer WHERE vareid=" & varenr &";"
        objRS.Open  SQL
    nr = vare2(i,i)
    farve = vare2(i,2)
    antal = vare2(i,3)
    pris = vare2(i,4)
   
   
    total = antal * pris
    ialt = ialt + antal * pris
   
  Response.write "<tr>"
  Response.write "<td nowrap STYLE=""BORDER-LEFT: #666666 0px solid;""><font face=verdana size=1>" & objRS("varenavn") & "</font></td>"
  Response.write "<td STYLE=""BORDER-LEFT: #666666 0px solid;""><font face=verdana size=1>" & vare2(i,1) & "</font></td>"
  Response.write "<td STYLE=""BORDER-LEFT: #666666 0px solid;""><font face=verdana size=1>" & farve & "</font></td>"
  Response.write "<td STYLE=""BORDER-LEFT: #666666 0px solid;""><font face=verdana size=1>" & antal & "</font></td>"
  Response.write "<td STYLE=""BORDER-LEFT: #666666 0px solid;""><font face=verdana size=1>" & total & "</font></td>"
  Response.write "<td STYLE=""BORDER-LEFT: #666666 0px solid;""><font face=verdana size=1><a href=""?action=add&item="&varenr&"&pris="&pris&"&visVare=&variant1="&vare2(i,1)&"&variant2="&farve&"&count=1"">Plus 1</a>"
  Response.Write " <a href=""?action=add&item=" & varenr &"&pris="&pris &"&visVare=146605&variant1=" & vare2(i,1) & "&variant2="& farve &"&count=-1"">Minus 1</a></font></td>"
  Response.write "</tr>"
 
  vaegt = objRS("vaegt")
  vaegt = vaegt * antal
  strVaegt = strVaegt + vaegt

set objRS = nothing   
end if
next

'Beregner fragt'''''''''''''''''''''''''''''''''''''''''''''''''''
strFragtland = Request.Querystring("fragtland")

if strFragtland = "" then
    strFragtland = "Danmark"
end if

sql1 = "SELECT * FROM fragt_lande WHERE Land_navn='"&strFragtland&"'"
    set rs3 = objConn.Execute(sql1)
    strfragtfriAktiv = rs3("fragtfriAktiv")
    intfragtfriOver = rs3("fragtfriOver")
   
    strSkataktiv = rs3("skat")
    intskatSats = Cstr(rs3("skatSats"))
    intskatSats = "1," + intskatSats
    intskatSats = Cdbl(intskatSats)
    strskatberegn = rs3("skatberegn")
   
   
if strfragtfriAktiv=true AND intfragtfriOver < ialt then
    strFragtPris = 0
else

    if strVaegt = "" then
        strVaegt = 1
    end if
   
    strVaegt = replace(strVaegt , ",", ".")
    sqlF = "SELECT * FROM fragt where "&strVaegt &" BETWEEN fraKg AND tilKg AND Land='"&strFragtland&"'"
    set rs2 = objConn.Execute(sqlF)
        if rs2.EOF then
            strFragtPris = 150
        else
            strFragtPris = rs2("pris")
        End if
    set rs2 = nothing
   
end if

'finder pris uden moms/skat
if strSkataktiv=true then

    strIaltXmoms = ialt/intskatSats
    ialt = strIaltXmoms
   

  Response.write "<tr>"
  Response.write "<td nowrap STYLE=""BORDER-LEFT: #666666 0px solid;""><font face=verdana size=1><b>total excl.moms</b>("&strFragtland&")</font></td>"
  Response.write "<td STYLE=""BORDER-LEFT: #666666 1px solid;""></td>"
  Response.write "<td STYLE=""BORDER-LEFT: #666666 1px solid;""></td>"
  Response.write "<td STYLE=""BORDER-LEFT: #666666 1px solid;""></td>"
  Response.write "<td STYLE=""BORDER-LEFT: #666666 0px solid;""><font face=verdana size=1>"&strIaltXmoms&"</font></td>"
  Response.write "</tr>"
 
end if



''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

  Response.write "<tr>"
  Response.write "<td nowrap STYLE=""BORDER-LEFT: #666666 0px solid;""><font face=verdana size=1><b>Fragt</b>("&strFragtland&")</font></td>"
  Response.write "<td STYLE=""BORDER-LEFT: #666666 1px solid;""></td>"
  Response.write "<td STYLE=""BORDER-LEFT: #666666 1px solid;""></td>"
  Response.write "<td STYLE=""BORDER-LEFT: #666666 1px solid;""></td>"
  Response.write "<td STYLE=""BORDER-LEFT: #666666 0px solid;""><font face=verdana size=1>"&strFragtPris&"</font></td>"
  Response.write "</tr>"

Response.Write "<tr bgcolor=""dcdcdc""><td STYLE=""BORDER-LEFT: #666666 0px solid;""><font face=verdana size=1><b>Total:</b></font></td>"
Response.Write "<td>. . </td><td>. . </td><td>. . </td><td><font face=verdana size=1><b>"& ialt+strFragtPris &" Dkk</b></font></td></tr>"
Response.write "</table>"

set objRS = nothing
objConn.Close
%>
<br>
<a href="?action=add&item=146602&pris=160&visVare=&variant1=L&variant2=lysgr%E5&count=1">Læg vare i kurv</a>
Avatar billede softspot Forsker
09. februar 2006 - 12:06 #1
Jeg må erkende at jeg ikke har studeret din kode (ud over at konstatere at du har brugt et 2-dimensionelt array til at gemme dine varer i), men umiddelbart ville jeg anbefale dig at bruge et dictionaryobjekt i stedet for, da det er lettere at arbejde med, når det kommer til indsættelse og sletning af data.

Hvis du skal fjerne noget fra et array, er du nød til at gøre det manuelt, ved at

  1. slette det element der skal fjernes

  2. rykke alle andre elementer en plads tilbage i array'et

  3. redimensionere array'et, så der ikke ligger tomme elementer i slutningen


Alt i alt er det en rimelig tung affære, ifht. dictionary-objektets ene metodekald:

  objDict.Remove(nøgle eller id på element der skal fjenes)

Dictionaru-objektet kan oprettes med

  set objDict = Server.CreateObject("Scripting.Dictionary")

og der findes en referencemanual til objektet på Microsoft's site:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/b4a7ddb3-2474-49ef-8540-8d67a747c8db.asp?frame=true
Avatar billede loukas Mester
10. februar 2006 - 21:12 #2
Jeg har fundet en løsning.
Jeg springer over hvis antallet er nede på 0
Altså.:
if antal = 0 then
'gør ingenting
else
kode her
End if
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