Avatar billede annettef Nybegynder
23. december 2004 - 09:36 Der er 4 kommentarer og
1 løsning

Hjælp! Min beregning af fragt er ikke rigtig - hvad gør jeg?

Hej

Jeg har meget store problemer med beregning af fragten i det webshop jeg er ved at arbejde på. Fragtens beregnes ude fra den samlede vægt af varerne i indkøbsvognen. Mit problem er at hvis man har lagt en vare i indkøbsvognen og så går tilbage til butikken og lægger en vare mere i (en ny vare), så beregnes fragten kun ud fra den nye vares vægt.

Jeg har inddelt vægtberegningen i følgende intervaller:
intTimes = 0
if longVaegt > 19800 then
intTimes = int(longVaegt / 19800)
longVaegt = (longVaegt - (intTimes * 19800))
end if

if longVaegt < 800 then
intShipping1 = 42.50
elseIf longVaegt < 4800 then
intShipping1 = 46.50
elseIf longVaegt < 9800 then
intShipping1 = 57.50
elseIf longVaegt < 14800 then
intShipping1 = 84.00
elseIf longVaegt < 19800 then
intShipping1 = 92.00
end If

...hvor longVaegt er den samlede vægt af varerne. Problemet opstår fordi variablen intTimes ikke bliver beregnet på ny når man har tilføjet flere varer til indkøbsvognen.

Her er hele koden til siden (den er lang!)
::::KODE START::::
<%@ Language=VBScript %>
<!-- #include file="db.asp" -->
<!-- #include file="adovbs.inc" -->
<!--#include file="dbconn.inc"--><!-- Database forbindelse oprettes via ekstern fil-->
<%

    set Conn = Server.CreateObject("ADODB.Connection")
    Conn.Open ConString

    if cstr(Session("orderID")) = "" then
%>

<html>
<head>
<title>Kassen - Trin 1 af 3</title>
<Link Rel="stylesheet" href="datronic.css" Type="text/css" > <!-- link til ekstern style sheet -->
<style type="text/css">
<!--
body {
    margin-top: 0px;
    margin-left: 4px;
}
-->
</style>
</head>
<body>
<%
        Response.Write "<p><b>"
        Response.Write "Der er ingen varer i din indkøbsvogn. "
        Response.Write "Hvis du tidligere har lagt varer i indkøbsvognen, "
        Response.Write "er der måske sket en timeout - beklager fejlen.<br><br>"
        Response.Write "<a href='forside_butik.htm' target='tekst'><img src='grafik/fortsat_shop.gif' alt='Fortsæt med at shoppe' border='0' name='fortsat' ></a>&nbsp;"
        Response.Write "<b></p>"
%>
</body>
</html>
<% 
else
       
        intOrderID = cstr(Session("orderID"))

        set rsProd = Server.CreateObject("ADODB.Recordset")
        rsProd.Open "SELECT * FROM ordrelinie " _
            & "WHERE orderID="& intOrderID, _
            Conn, adOpenDynamic, adLockPessimistic, adCmdText
        while not rsProd.EOF

            element = "quant" & rsProd("vareid")
            intQuant = Request.form(element)

            if intQuant <> "" and isNumeric(intQuant) then
                if intQuant = 0 then
                    rsProd.Delete
                else
                    rsProd("antal") = intQuant
                end if
            end if
            rsProd.Update
            rsProd.MoveNext
        wend

        if Request.form("updateorder.x") <> "" and Request.form("updateorder.y") <> "" then

            rsProd.Close
            set rsProd = Nothing
   
            Conn.Close
            set Conn = Nothing

            Response.Redirect "vis_vogn.asp"
        else
       
        if rsProd.BOF and rsProd.EOF then
                rsProd.Close
                set rsProd = Nothing
           
                Conn.Close
                set Conn = Nothing
               
                Session("orderID") = ""
                Response.Redirect "checkout1.asp"
           
        else
%>
<html>
<head>
<title>Kassen - Trin 1 af 3</title>
<Link Rel="stylesheet" href="datronic.css" Type="text/css" > <!-- link til ekstern style sheet -->
<style type="text/css">
<!--
body {
    margin-top: 0px;
    margin-left: 4px;
}
-->
</style>
<style type="text/css">
<!--
.style1 {color: #FFFFFF}
-->
</style>
</head>
<body>
<br><table width="670" border="0" cellspacing="0"><!--indholdstabel start-->
<tr bgcolor="#545DB9">
    <td height="18" ><span class="style1">Kassen - Trin 1 af 3</span></td>
  </tr>
  <tr>
    <td align="left"><p>Din ordre:<br>
        <br>
    </p></td>
  </tr>
  <tr>
    <td>Er indholdet ikke korrekt? Jeg vil ændre indholdet af ordren - <a href="vis_vogn.asp">Klik her...</a></td>
  </tr>
  <tr>
    <td align="center">&nbsp;
   
    </td>
  </tr>
  <tr>
    <td>    <form action="checkout2.asp" method="post" name="form1">
            <input type="hidden" name="intOrderID" value="<%=intOrderID%>">
            <table border="1" cellpadding="1" cellspacing="1" width="660"><!--varetabel-->
            <tr bgcolor="#F2F2FA">
                <td width="13%" align="left" valign="middle" nowrap><font color="#000098" face="Verdana" size="2" style="background-color: #F2F2FA"><strong>Antal</strong></font></td>
                <td width="13%" align="left" valign="middle" nowrap><font color="#000098" face="Verdana" size="2" style="background-color: #F2F2FA"><strong>Vare ID</strong></font></td>
                <td width="44%" align="left" valign="middle"><font color="#000098" face="Verdana" size="2" style="background-color: #F2F2FA"><strong>Vare</strong></font></td>
                <td width="15%" align="left" valign="middle" nowrap><font color="#000098" face="Verdana" size="2" style="background-color: #F2F2FA"><strong>Pris pr stk</strong></font></td>
                <td width="15%" align="left" valign="middle" nowrap><font color="#000098" face="Verdana" size="2" style="background-color: #F2F2FA"><strong>Pris i alt</strong></font></td>
            </tr>
<%
            set rsProdInfo = Server.CreateObject("ADODB.Recordset")
            rsProdInfo.Open "vare", Conn, adOpenStatic, adLockOptimistic, adCmdTable

            intTotal = 0

            rsProd.MoveFirst
            while not rsProd.EOF
                rsProdInfo.MoveFirst
                rsProdInfo.Find "vareid = " & rsProd("vareid")
                intProdID = rsProd("vareid")
                strProdName = rsProdInfo("titel")
                intPrice = formatNumber(rsProdInfo("pris"), 2)
                intQuant = rsProd("antal")
                intProdVaegt = rsProdInfo("vaegt")
                prodVaegtAll = (intProdVaegt * intQuant)
                  longVaegt = longVaegt + prodVaegtAll
                intExtPrice = formatNumber((intPrice * intQuant), 2)
                intTotal = intTotal + intExtPrice
%>
                <tr>
                    <td width="13%" align="left" valign="middle" nowrap><font face="Verdana" size="2"><%= intQuant %></font></td>
                    <td width="13%" align="left" valign="middle" nowrap><font face="Verdana" size="2"><%= intProdID %></font></td>
                    <td width="44%" align="left" valign="middle" nowrap><font face="Verdana" size="2"><%= strProdName %></font></td>
                    <td width="15%" align="right" valign="middle" nowrap><font face="Verdana" size="2"><%= intPrice %></font></td>
                    <td width="15%" align="right" valign="middle" nowrap><font face="Verdana" size="2"><%= intExtPrice %></font></td>
                </tr>
                <input type="hidden" value="<%=intProdVaegt %>" name="intProdVaegt">
                <input type="hidden" name="strOrderItem" value="<%= intProdID %>,<%= intQuant %>">
                <input type="hidden" value="<%=longVaegt %>" name="longVaegt">
               
<%
intTimes = 0
if longVaegt > 19800 then
intTimes = int(longVaegt / 19800)
longVaegt = (longVaegt - (intTimes * 19800))
end if

if longVaegt < 800 then
intShipping1 = 42.50
elseIf longVaegt < 4800 then
intShipping1 = 46.50
elseIf longVaegt < 9800 then
intShipping1 = 57.50
elseIf longVaegt < 14800 then
intShipping1 = 84.00
elseIf longVaegt < 19800 then
intShipping1 = 92.00
end If
%>

<%
'linie til at tjekke hvad longVaegt er
response.write longVaegt
%>

<%
intShipping = ((intTimes * 92.00) + intShipping1)
%>
               
               
<%
                rsProd.MoveNext
                wend                       
%>
<%
            'display total for products in cart
%>                       
            <tr>
                <td colspan="4" align="left" valign="middle" nowrap><font face="Verdana" size="2">Subtotal:</font></td>
                <td align="right" valign="middle" nowrap><font face="Verdana" size="2">
                    <%= formatNumber(intTotal, 2) %>
                </font></td>
            </tr>
           
<%
            'add and display amount charged for sales tax:
            'in this case it's 25% of total for products in cart
           
%>

<%
'linie til at tjekke hvad times er
response.write intTimes
%>
                         
            <tr>
                <td colspan="4" align="left" valign="middle" nowrap><font face="Verdana" size="2">Heraf moms (25%):</font></td>
                <td align="right" valign="middle" nowrap><font face="Verdana" size="2">
                    <%= formatNumber((intTotal * .20), 2) %>
                    <input type="hidden" name="intTax" value="<%= formatNumber((intTotal * .20), 2) %>">
                </font></td>
            </tr>
<%
            'add and display amount charged for shipping:
%>         

             
            <tr>
                <td colspan="4" align="left" valign="middle" nowrap><font face="Verdana" size="2">Forsendelse:</font></td>
                <td align="right" valign="middle" nowrap><font face="Verdana" size="2">
                    <%= formatNumber((intShipping1 + (intTimes * 92.00)), 2) %>
                    <input type="hidden" name="intShipping" value="<%= formatNumber((intShipping1 + (intTimes * 92.00)), 2) %>">
                </font></td>
            </tr>

<%
            'display Grand Total
%>             
            <tr>
                <td colspan="4" align="left" valign="middle" nowrap><font face="Verdana" size="2"><b>Kr. Total:</b></font></td>
                <td align="right" valign="middle" nowrap><font face="Verdana" size="2"><b>
                    <%= formatNumber((intTotal + intShipping), 2) %>
                    <input type="hidden" name="intTotal" value="<%= formatNumber((intTotal + intShipping), 2) %>">
                </b></font></td>
            </tr>
           
            </table>
            </td></tr>
            <tr><td align="right"><input type="image" src="grafik/gaa_kassen.gif" name="kassen" value="Gå til kassen"></td></tr>
            </form></table>
           
<%
    'linie til at tjekke om fragten er regnet rigtigt sammen
    response.Write intShipping 
%>               
</body>
</html>
<%       
rsProd.Close
set rsProd = Nothing

rsProdInfo.Close
set rsProdInfo = Nothing
        end if
    end if
end if

Conn.Close
set Conn = Nothing
%>
::::KODE SLUT::::

Håber der er nogen der kan hjælpe mig

En test siden af shoppen kan ses på denne adresse - http://www.ferslev.com/datronic/shop_admin_test/test/

/Annette
Avatar billede ellebaek Nybegynder
23. december 2004 - 10:11 #1
du beregner jo kun intTimes hvis longVaegt er > 19800..
altså i følgende:

intTimes = 0
if longVaegt > 19800 then
intTimes = int(longVaegt / 19800)
longVaegt = (longVaegt - (intTimes * 19800))
end if


skal du ikke beregne den lige meget hvad værdien at longVaegt er..?
Avatar billede annettef Nybegynder
23. december 2004 - 10:19 #2
ellebaek

Det der er meningen med beregningen af intTimes er at den kun skal beregnes hvis den samlede vægt af varerne er over 19800. Hvis nu den samlede vægt er f.eks. 50000 så bliver intTimes = 2 (50000/19800=2) og så er der en rest (longVaegt) på 10400. intTimes beregnes fordi prisen for fragt beregnes ud fra postdanmarks takster som kun går op til max. 20 kg - så hvis varerne vejer mere end 20 kg skal de pakkes i flere pakker, men hvis nu pakkerne vejer under 20kg er det ikke nødvendigt at beregne intTimes.

Håber den forklaring var til at forstå - det er nemli lidt svært at forklare :o)
Avatar billede ellebaek Nybegynder
23. december 2004 - 10:29 #3
jo... det var en glimrende forklaring..

hmm...

jeg har lidt svært ved at se fejlen på din side..

tror jeg har fundet fejlen..
Hvis jeg ellers forstår din kode rigtigt..

Prøv at flytte denne del af koden:

<%
intTimes = 0
if longVaegt > 19800 then
intTimes = int(longVaegt / 19800)
longVaegt = (longVaegt - (intTimes * 19800))
end if

if longVaegt < 800 then
intShipping1 = 42.50
elseIf longVaegt < 4800 then
intShipping1 = 46.50
elseIf longVaegt < 9800 then
intShipping1 = 57.50
elseIf longVaegt < 14800 then
intShipping1 = 84.00
elseIf longVaegt < 19800 then
intShipping1 = 92.00
end If
%>

<%
'linie til at tjekke hvad longVaegt er
response.write longVaegt
%>

<%
intShipping = ((intTimes * 92.00) + intShipping1)
%>

ned så den står efter:
<%
                rsProd.MoveNext
                wend                     
%>
Avatar billede annettef Nybegynder
23. december 2004 - 10:36 #4
Tusind tusind tak for hjælpen - nu fungerer beregningen som den skal.

Læg et svar så du kan få point!

Og rigtig god jul :o)

/Annette
Avatar billede ellebaek Nybegynder
23. december 2004 - 10:47 #5
Der er et svar her ;-)

Og tak i lige måde...
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