Avatar billede annettef Nybegynder
20. september 2004 - 15:03 Der er 8 kommentarer og
1 løsning

Hjælp til beregning af fragt og totalpris

Hej Eksperter

Jeg arbejder på en webshop, men har lidt problemer med at beregne fragt og den samlede totalpris.

Alle varer i min database har en tilhørende vægt. Ud fra den samlede vagt på de varer som er indkøbsvognen skal fragten beregnes. På nuværende tidspunkt er fragten 5% af den totale pris for varerne, men det skal ændres så det beregnes ud fra vægt i stedet for.

Min kode:
--------
<%@ 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="490" 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="470"><!--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")
                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" name="strOrderItem" value="<%= intProdID %>,<%= intQuant %>">
<%
                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 8% of total for products in cart
            'change the .08 to meet your state/province requirements
%>                         
            <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:
            'in this case it's 5% of total for products in cart
            'change the .05 to meet your requirements
%>                       
            <tr>
                <td colspan="4" align="left" valign="middle" nowrap><font face="Verdana" size="2">Fragt & forsendelse (5%):</font></td>
                <td align="right" valign="middle" nowrap><font face="Verdana" size="2">
                    <%= formatNumber((intTotal * .05), 2) %>
                    <input type="hidden" name="intShipping" value="<%= formatNumber((intTotal * .05), 2) %>">
                </font></td>
            </tr>

<%
            'display Grand Total: to get the multiplier 1.0 is the product(s) total plus .08
            'for sales tax and .05 for shipping which equals 1.13. Be sure to change this
            'to meet your requirements
%>             
            <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*1.05), 2) %>
                    <input type="hidden" name="intTotal" value="<%= formatNumber((intTotal * 1.05), 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>                   
</body>
</html>
<%       
rsProd.Close
set rsProd = Nothing

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

Conn.Close
set Conn = Nothing
%>
--------
Jeg har en ide om at noget lignende dette:
if intTotalVaegt < 800 then
intFragt = 42,50
elseIf intTotalVaegt < 4800 then
intFragt = 46,50
elseIf intTotalVaegt < 9800 then
intFragt = 57,50
elseIf intTotalVaegt < 14800 then
intFragt = 84,00
elseIf intTotalVaegt < 19800 then
intFragt = 92,00
end If
....skal ind et eller andet sted, men jeg kan bare ikke lige gennemskue hvor.

Når fragten er beregnet ud fra den samlede vægt, skal den totale pris beregnes.

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

/Annette
Avatar billede tofte Juniormester
20. september 2004 - 15:26 #1
har du et felt i databasen som indeholder vægten for hver vare? Og hvis ja, hvad hedder det, og hvilken type er det?
Avatar billede mikkel_strack Nybegynder
20. september 2004 - 15:39 #2
Du har en while-løkke som samler alle varer op der er købt og der beregner du også den totale pris. Kan i den løkke ikke se noget om vægt, så det må du vist lige ha med.

Der hvor du nu beregner fragten -- formatNumber((intTotal * .05), 2) -- kan du istedet lave en funktion:

Function calculateWeight(totalAmmount,weight)

If weight < 800 Then
intPostage = 42.50
Elseif weight < 4800 Then
intPostage = 92.50
Elseif weight > 9600 Then
intPostage = 100
End if

totalAmmount = totalAmmount+intPostage

calculateWeight = totalAmmount

End Function

Det er aldrig helt let at gennemskue andres koder...især ikke når den ikke rigtig er kommenteret...
Men som jeg lige kan overskue det, må det være noget i den stil
Avatar billede mikkel_strack Nybegynder
20. september 2004 - 15:41 #3
Du skal seføli kalde funktionen der hvor du nu beregner fragten...og ikke lave den :o)
Avatar billede annettef Nybegynder
20. september 2004 - 15:46 #4
Jeg har et felt i tabellen vare i databasen som hedder Vaegt og det er et tal felt.

Og okay - jeg vil forsøge at sætte det med vægten ind i min while-løkke og se om jeg kan finde ud af det med funktionen.

/Annette

...og så skal jeg til en anden gang nok huske at kommentere min kode, så jeg bedre kan få hjælp her på eksperten - jeg ved godt det er en enormt dårlig vane ikke at gøre det:o)
Avatar billede mikkel_strack Nybegynder
20. september 2004 - 16:12 #5
Du kan såmænd også bare sætte dine if-sætninger ind...resultater blir det samme - men koden knapt så pæn :o)
Og i så fald kan du sætte dem ind hvorsomhelst mellem din whileløkke (hvor du finder vægten) og der hvor total pris skal beregnes.
Avatar billede annettef Nybegynder
20. september 2004 - 16:14 #6
Ok - det vil jeg lige forsøge min med.
Får nok ikke kigget så meget mere på det lige nu, men vender tilbage i morgen...

/Annette
Avatar billede annettef Nybegynder
30. september 2004 - 09:06 #7
Til Mikkel Strack - vil du ikke lægge et svar, så jeg kan få lukket spørgsmålet (havde vist helt glemt at jeg ikke havde lukket det)... Jeg har brugt mine ifsætninger, men du ledte mig på rette spor, så derfor er der point til dig.


--------
Så vil jeg bare lige smide en del af min kode ind, så den kan komme andre til gode...

Min kode hvor jeg beregner fragten - inden da er den totale vægt for varerne blevet regnet sammen til '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
%>
--------

/Annette
Avatar billede annettef Nybegynder
08. oktober 2004 - 15:13 #8
Lukker spørgsmålet - hvis Mikkel Strack vil have point må du lige skrive en kommentar, så jeg kan oprette et spørgsmål med point til dig!

/Annette
Avatar billede mikkel_strack Nybegynder
08. oktober 2004 - 15:17 #9
Jeg troede sån set jeg havde svaret...men måske noget gik galt..eller jeg blev forstyrret midt i :o)

Er ligeglad med point...så længe jeg har nok til at jeg selv kan stille et par spørgsmål..så ligemeget med dem..

God weekend
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