View Full Version : Form refresh and submit

02-26-2007, 04:11 PM

I have a PHP page with submission form for collectiong billing information from the customer. When the customer selects his state of residence from a dropdown list, the page is refreshed and some tax calculation as performed. I’m using the “onChange” event for dropdown list to call a JavaScript, which then checks which state is selected, updates a value for a hidden field in the form and reloads the page. The value of this hidden field is then used by php code in the form to calculate the tax.
Here is JavaScript code:

<script type='text/javascript'>
function calculateTax()
state = document.forms['checkoutform'].elements['billstate'];
var stateVal = state.options[state.selectedIndex].value;
if(stateVal == 'VT')
document.forms['checkoutform'].elements['tax'].value = 0.07;

Everything so far is working great, but I have a problem. In order for the page to reloaded (to update the changed value of the hidden field), the form has to post to itself, as I understand it.

<form name="checkoutform" action="" method="post" onsubmit="return validateCard(this.cardnumber.value,this.cardType.value,this.cardmonth.value,this.cardyear.value);">

But after the form is filled with customer information, when the submit button is pressed, all information in the form should be validated (I have credit card validation script and required fields validation script included) and then the form should be posted to other php page, for inserting the customer information into database and sending the confirmation e-mail.

<form name="checkoutform" action="confirmorder.php" method="post" onsubmit="return validateCard(this.cardnumber.value,this.cardType.value,this.cardmonth.value,this.cardyear.value);">
<input type="submit" value="Make Purchase" onClick="MM_validateForm('namefull','','R','email','','RisEmail','phonework','','R','billaddress1','','R','bi llcity','','R','billzip','','R');return document.MM_returnValue;"/>

1. How can I refresh the page/form and make some calculation when the dropdown list changes his value and at the same time to be able to submit the form to other php page?
2. How to return the changed value of the hidden field from JavaScript, so the php code knows that some state is selected from the dropdown list and that it should run the tax calculation accordingly? And if this can be done without refreshing the page (or posting the form), my problem is solved.


02-26-2007, 04:44 PM
One solution would be to handle the tax calculation when a state is selected entirely on the Javascript side. I guess it depends on what PHP is doing with the selected state. If it's a fairly simple matter, such as getting a tax rate out of a table, you can simple pre-load a Javascript array using PHP.

I'm probably not making much sense... it would look something like this:

<script type="text/Javascript">
var taxRates = new Array(
$sql = 'select taxrates from blah blah blah';
$result = mysql_query($sql);
if (!$result) {
die ('error ' . mysql_error());
for ($i = 0; $i < mysql_num_rows($result); $i++) {
$taxVal = mysql_fetch_assoc($result);
//need a comma between array values on all but the first element
if ($i != 0) {
print ",\n";
//create the Javascript array values here
//i.e. print "('Arizona', 'AZ', 6.75)
print "('{$taxVal['stateDesc']}', '{$taxVal['stateCode']}', {$taxVal['stateTaxRate']})\n";

This should create an Javascript array that you can then use entirely on the client side when the drop down is used, which allows you to avoid going back and forth from server to client just to handle the drop down behavior.

If you're not keen on that idea, there are other ways of doing it...