Avatar billede annettef Nybegynder
03. april 2005 - 11:45 Der er 3 kommentarer og
1 løsning

If else sætning med loop - kan man det?

Hej

Jeg sidder og bøvler med noget beregning af fragt i en netbutik.
Til at starte med havde jeg lavet en if else sætning på denne måde:

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

Men nu vil jeg gerne have det lavet sådan at priserne og vægtintervallerne kommer fra min database. I min database har jeg en tabel der hedder fragtPriser. I tabellen findes kolonnerne fragtId, fragtPris og maxVaegt

Jeg har prøvet at lave min if else sætning på denne måde, men det giver en fejl.

<%
' SQL forespørgsel
strSQL = "SELECT * FROM fragtPriser ORDER BY fragtId"

' Udfør strSQL (rs5 kommer til at indeholde dataen)
Set rs5 = Conn.Execute(strSQL)
%>

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

Do While Not rs5.EOF

if longVaegt < rs5("maxVaegt") then
intShipping1 = rs5("fragtPris")
else
' Gå til næste record i rs
rs5.MoveNext

' Gå i loop indtil rs ikke indeholder flere records (= EOF)
    Loop
END IF

Hordan kan jeg løse mit problem? Og kan det i det hele taget lade sig gøre at man henter betingelserne ud via et loop?

Her får I lige hele koden til min side
::::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="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">
               

               
               
<%
                rsProd.MoveNext
                wend                       
%>
<%
' SQL forespørgsel
strSQL = "SELECT * FROM fragtPriser ORDER BY fragtId"

' Udfør strSQL (rs5 kommer til at indeholde dataen)
Set rs5 = Conn.Execute(strSQL)
%>

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

Do While Not rs5.EOF

if longVaegt < rs5("maxVaegt") then
intShipping1 = rs5("fragtPris")
else
' Gå til næste record i rs
rs5.MoveNext

' Gå i loop indtil rs ikke indeholder flere records (= EOF)
    Loop
END IF

'If 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)
%>



<%
            '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
%>
::::SLUT::::

/Annette
Avatar billede sitemaster Nybegynder
03. april 2005 - 12:11 #1
Do While Not rs5.EOF AND longVaegt < rs5("maxVaegt")
intShipping1 = rs5("fragtPris")
rs5.MoveNext
' Gå i loop indtil rs ikke indeholder flere records (= EOF)
Loop

hvad med at gøre det på denne måde, har dog ikke testet det
Avatar billede annettef Nybegynder
03. april 2005 - 13:23 #2
Peøver det lige...
Avatar billede annettef Nybegynder
03. april 2005 - 14:08 #3
Det giver også fejl...
Jeg har løst problemet på en anden måde nu, så hvis du lige lægger et svar så får du nogle point, fordi du trods alt forsøgte at hjælpe mig.

/Annette
Avatar billede sitemaster Nybegynder
03. april 2005 - 14:36 #4
behold du bare de point, men tror jeg ikke lige fattede det første gang, men her en der kun udføre den if sætning hvis maxVaegt er tættest på longVaegt

' SQL forespørgsel
strSQL = "SELECT * FROM fragtPriser WHERE maxVaegt <= " & longVaegt & " ORDER BY maxVaegt DESC"

' Udfør strSQL (rs5 kommer til at indeholde dataen)
Set rs5 = Conn.Execute(strSQL)

strVaegt = rs5("maxVaegt")

Do While Not rs5.EOF

If rs5("maxVaegt") < longVaegt AND rs5("maxVaegt") = strVaegt Then
intShipping1 = rs5("fragtPris")
End If

rs5.MoveNext
Loop
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