2012-09-12 6 views
0

저는 Javascript/Ajax를 사용하여 월별 지불액을 계산할 때 "Amount Financed"및 "Interest Rate"를 사용하는 모기지 계산기를 만들고 있습니다. "금액"& "interest"는 사용자가 입력하며 PHP 프로그램에서 월별 지불액이 계산되어 "지불"필드로 다시 전송됩니다.자바 스크립트 : 유효성 검사 및 숨겨진 필드 값이있는 버튼을 제출하십시오.

계산 된 지불을 표시하려면 사용자 입력의 유효성을 검사하고 "지불"필드를 가져와야합니다.

바로 지금 제출 방법을 올바르게 입력했는데 계산 된 금액이 별도의 페이지 (인쇄 라인을 제외하고는 비어있는 PHP 페이지)에 표시됩니다. 다음은

var sendValues = amount + '|' + interest; 
XMLHttpRequestObject.send(sendValues); 

:

<link rel="stylesheet" type="text/css" href="css/king.css" /> 

    <script> 
    var XMLHttpRequestObject = false; 

     if (window.XMLHttpRequest) { 
      XMLHttpRequestObject = new XMLHttpRequest(); 
     } else if (window.ActiveXObject) { 
      XMLHttpRequestObject = new ActiveXObject("Microsoft.XMLHTTP"); 
     } 

     function calculateRate() 
     { 

      if(XMLHttpRequestObject) { 

      XMLHttpRequestObject.open("POST", "assignment_8_calculate.php"); 

      XMLHttpRequestObject.setRequestHeader('Content-Type', 
       'application/x-www-form-urlencoded'); 

      XMLHttpRequestObject.onreadystatechange = function() 
      { 
       if (XMLHttpRequestObject.readyState == 4 && 
       XMLHttpRequestObject.status == 200) { 

        var returnedData = XMLHttpRequestObject.responseText; 

        var payment = document.getElementById('payment'); 
        payment.value = returnedData; 
       } 
      } 

      var amount = document.getElementById('amount').value; 
      var interest = document.getElementById('interest').value; 

      XMLHttpRequestObject.send(amount); 
      XMLHttpRequestObject.send(interest); 

      } 

      return false; 

     } 


    function validateForm() 
    { 
     var errmsg = ''; 

     var amount = document.getElementById('amount').value; 

     if (amount == null || amount == "") 
     { 
      errmsg += "<br />You must enter an 'Amount Financed'"; 
     } else { 

      if (isNaN(amount)) 
      { 
       errmsg += "<br />'Amount Financed' must be a number"; 
      } 

     } 

     var interest = document.getElementById('interest').value; 

     if (interest == null || interest == "") 
     { 
      errmsg += "<br />You must enter an 'Interest Rate'"; 

     } else { 

      if (isNaN(interest)) 
      { 
       errmsg += "<br />'Interest Rate' must be a number"; 
      } 

     } 

     var messageDiv = document.getElementById('messagediv'); 

     messageDiv.innerHTML = errmsg; 

     if (errmsg == '') 
     { 
      return true; 
     } else { 
      return false; 
     } 

    } 

    </script> 

</head> 

<body> 
<body> 
<a href="assignment_8.php"><img src="images/KingLogo.jpg"></a><br> 

<div id="mortgagecalculatorresults"> 
<h2>Mortgage Calculation</h2> 

<div id="calculator"> 

    <form id="mortgage" method="post" action="assignment_8_calculate.php"> 

    <table> 
    <tr> 
    <td>Amount Financed:</td> 
    <td><input type="text" name="amount" id="amount" ></td> 
    </tr> 

    <tr> 
    <td>Interest Rate:</td> 
    <td><input type="text" name="interest" id="interest" ></td> 
    </tr> 

    <tr> 
    <td>Calculated Monthly Payment:</td> 
    <td><input type="text" disabled="disabled" name="payment" id="payment" ></td> 
    </tr> 
    </table> 

    <p><input type="submit" value="Calculate Payment" onclick="return validateForm()" onsubmit=" calculateRate();"> 

    <input type="reset" /> 
    </p> 

    </form> 

</div> 

<div style="color: red;" id="messagediv"> 
</div> 


</body> 
</html> 

나는이 같은 하나의 전송에 PHP 프로그램으로 값을 전송 시도 : 여기

는 HTML 페이지 내 코드입니다 PHP 페이지에 대한 코드 (코드에서 주석을 달았습니다. 예를 들어, 하나의 값만 보내고 PHP 내에서 코드를 내 보려고했을 때 주석을 달았습니다) :

<?php 
//$sendValues = $_POST['sendValues']; 
$amount = $_POST['amount']; 
$interest = $_POST['interest']; 

//list($amount, $interest) = explode('|', $sendValues); 

$payment = ($amount * $interest)/12; 
//$payment = $sendValues/12; 
$payment = number_format ($payment, 2); 

print $payment; 

?> 

난 그냥 버튼과 버튼을 코드가 아닌 경우 직접 claculateRate 함수에 연결하고 쓸모없는 값이 별도의 PHP 페이지로 보내지 않고 숨겨진 필드에 반환되는 유효성 검사를 생략하지만, 값, 제출 보낸 메일은 항상 0.00입니다.

고맙습니다.

업데이트 된 코드 : 작동하지 않음 - 가져 오기 오류 :

".

요청 방법 POST를 허용하지 방법은 URL /testfiles/Ungar_Bradley_1585_PHPwithMySQL/assignment_8_mortgage.html 허용되지 않습니다"

"버튼"유형을 "제출"으로 변경하는 경우 값이 반환되는 "지불"필드에 0.00 값이 표시됩니다.

<html> 
<head> 

    <link rel="stylesheet" type="text/css" href="css/king.css" /> 

     <script> 
     var XMLHttpRequestObject = false; 

      if (window.XMLHttpRequest) { 
       XMLHttpRequestObject = new XMLHttpRequest(); 
      } else if (window.ActiveXObject) { 
       XMLHttpRequestObject = new ActiveXObject("Microsoft.XMLHTTP"); 
      } 

      function calculateRate() 
      { 

       if(XMLHttpRequestObject) { 

       XMLHttpRequestObject.open("POST", "assignment_8_calculate.php"); 

       XMLHttpRequestObject.setRequestHeader('Content-Type', 
        'application/x-www-form-urlencoded'); 

       XMLHttpRequestObject.onreadystatechange = function() 
       { 
        if (XMLHttpRequestObject.readyState == 4 && 
        XMLHttpRequestObject.status == 200) { 

         var returnedData = XMLHttpRequestObject.responseText; 

         var payment = document.getElementById('payment'); 
         payment.value = returnedData; 
        } 
       } 

       var amount = document.getElementById('amount').value; 
       var interest = document.getElementById('interest').value; 

       XMLHttpRequestObject.send(amount); 
       XMLHttpRequestObject.send(interest); 

       } 

       return false; 

      } 


     function validateForm() 
     { 
      var errmsg = ''; 

      var amount = document.getElementById('amount').value; 

      if (amount == null || amount == "") 
      { 
       errmsg += "<br />You must enter an 'Amount Financed'"; 
      } else { 

       if (isNaN(amount)) 
       { 
        errmsg += "<br />'Amount Financed' must be a number"; 
       } 

      } 

      var interest = document.getElementById('interest').value; 

      if (interest == null || interest == "") 
      { 
       errmsg += "<br />You must enter an 'Interest Rate'"; 

      } else { 

       if (isNaN(interest)) 
       { 
        errmsg += "<br />'Interest Rate' must be a number"; 
       } 

      } 

      var messageDiv = document.getElementById('messagediv'); 

      messageDiv.innerHTML = errmsg; 

      if (errmsg == '') 
      { 
       calculateRate(); 
       return true; 
      } else { 
       return false; 
      } 

     } 

     </script> 

</head> 

<body> 
<body> 
<a href="assignment_8.php"><img src="images/KingLogo.jpg"></a><br> 

<div id="mortgagecalculatorresults"> 
<h2>Mortgage Calculation</h2> 

<div id="calculator"> 

    <form id="mortgage" method="post"> 

    <table> 
    <tr> 
    <td>Amount Financed:</td> 
    <td><input type="text" name="amount" id="amount" ></td> 
    </tr> 

    <tr> 
    <td>Interest Rate:</td> 
    <td><input type="text" name="interest" id="interest" ></td> 
    </tr> 

    <tr> 
    <td>Calculated Monthly Payment:</td> 
    <td><input type="text" disabled="disabled" name="payment" id="payment" ></td> 
    </tr> 
    </table> 

    <p><input type="submit" value="Calculate Payment" onclick="return validateForm()" onsubmit="return false;"> 

    <input type="reset" /> 
    </p> 

    </form> 

</div> 

<div style="color: red;" id="messagediv"> 
</div> 


</body> 
</html> 

답변

1

내가가 변화 할 몇 가지가있다 그러나 나는 선생님이

내가이 전체 프로젝트에 대한 jQuery를 사용하는 것이 허용 무슨 일이 일어나고 있는지에 따라 달라집니다 같아요.

http://docs.jquery.com/Plugins/Validation, 당신은 다음과 같은 코드가

$.ajax({ 
    data: {'amount':amount,'interest':interest}, 
    type: "POST", 
    url: "assignment_8_calculate.php", 
    success: function (data) { 
     if (data) { 
      alert(data); 
     } else { 
      alert('data not found'); 
     } 
    } 
}); 
+0

좋아 보이지만 jquery를 사용할 수 없습니다. : – Brad

+0

jQuery 시스템에서 읽을 수있는 방법이 있습니다. – James

1

양식 요소에서 action="assignment_8_calculate.php"을 제거 PHP 스크립트의 정보를 수집하는 더 나은 일을 할 것

이 필요하고 검증을 처리 할 수있을 것 제출 버튼에서 onsubmit=" calculateRate();"을 삭제하고 양식 요소에 을 추가하고 마지막으로 validateForm() 함수에 오류가 없다고 표시 한 후 true를 반환하는 곳에

로 변경하십시오.
if (errmsg == '') 
{ 
    calculateRate(); 
} 
return false; 
+0

안녕하세요 dbf, 답장을 보내 주셔서 감사합니다. 코드를 추가하려고했지만 새로운 오류가 발생했습니다. 잠시 시간이 있으면 위의 코드를 원래 게시글에서 확인할 수 있습니까? "시작 코드 : 작동하지 않음 - 오류 :"고맙습니다! – Brad

+0

@Brad'input = "submit"은 여전히 ​​onsubmit 속성을 가지고 있습니다.이 입력에서 onsubmit = "return false"를 다음으로 이동하십시오. 정말 솔직히 말해 jQuery를 사용하여이 작업을 수행 할 것을 강력히 권장하며 click 이벤트가 실행되지 않도록'return true; '가'return false;'가되는 업데이트 된 코드를 사용해 보시기 바랍니다. – dbf