Larry Ullman's Book Forums

# Chapter 3 Exercise 9 Fuel Calculator Question

## Recommended Posts

Hello everyone. I understand most of the code for the fuel calculator in chapter 3 Exercise 9. It is designed to calculate fuel costs and time taken for journey. This is based upon the Distance, the Cost per gallon and the fuel efficiency which are entered before the form is submitted. ,

It is only one page and most of the code is straightforward. However I haven't yet worked out why the \$_POST[name] is not equivalent to 'gallon_price' after the form is submitted, since this is the default value as defined in the function create_radio and no value for the \$name is declared anywhere else.

If someone could explain what \$_POST[\$name] equals BEFORE the form is submitted and AFTER the form is submitted and WHY, this would be great. Thank you

<?php # Script 3.9 - calculator.php #4

// This function creates a radio button.
// The function takes two arguments: the value and the name.
// The function also makes the button "sticky".

function create_radio(\$value, \$name = 'gallon_price') {

// Start the element:
echo '<input type="radio" name="' . \$name .'" value="' . \$value . '"';

// Check for stickiness:
if (isset(\$_POST[\$name]) && (\$_POST[\$name] == \$value)) {
echo ' checked="checked"';
}

// Complete the element:
echo " /> \$value ";

} // End of create_radio() function.

\$page_title = 'Trip Cost Calculator';

// Check for form submission:
if (\$_SERVER['REQUEST_METHOD'] == 'POST') {

// Minimal form validation:
if (isset(\$_POST['distance'], \$_POST['gallon_price'], \$_POST['efficiency']) &&
is_numeric(\$_POST['distance']) && is_numeric(\$_POST['gallon_price']) && is_numeric(\$_POST['efficiency']) ) {

// Calculate the results:
\$gallons = \$_POST['distance'] / \$_POST['efficiency'];
\$dollars = \$gallons * \$_POST['gallon_price'];
\$hours = \$_POST['distance']/65;

// Print the results:
echo '<h1>Total Estimated Cost</h1>
<p>The total cost of driving ' . \$_POST['distance'] . ' miles, averaging ' . \$_POST['efficiency'] . ' miles per gallon, and paying an average of \$' . \$_POST['gallon_price'] . ' per gallon, is \$' . number_format (\$dollars, 2) . '. If you drive at an average of 65 miles per hour, the trip will take approximately ' . number_format(\$hours, 2) . ' hours.</p>';

} else { // Invalid submitted values.
echo '<h1>Error!</h1>
<p class="error">Please enter a valid distance, price per gallon, and fuel efficiency.</p>';
}

} // End of main submission IF.

// Leave the PHP section and create the HTML form:
?>

<h1>Trip Cost Calculator</h1>
<form action="calculator.php" method="post">
<p>Distance (in miles): <input type="text" name="distance" value="<?php if (isset(\$_POST['distance'])) echo \$_POST['distance']; ?>" /></p>
<p>Ave. Price Per Gallon: <span class="input">
<?php
?>
</span></p>
<p>Fuel Efficiency: <select name="efficiency">
<option value="10"<?php if (isset(\$_POST['efficiency']) && (\$_POST['efficiency'] == '10')) echo ' selected="selected"'; ?>>Terrible</option>
<option value="20"<?php if (isset(\$_POST['efficiency']) && (\$_POST['efficiency'] == '20')) echo ' selected="selected"'; ?>>Decent</option>
<option value="30"<?php if (isset(\$_POST['efficiency']) && (\$_POST['efficiency'] == '30')) echo ' selected="selected"'; ?>>Very Good</option>
<option value="50"<?php if (isset(\$_POST['efficiency']) && (\$_POST['efficiency'] == '50')) echo ' selected="selected"'; ?>>Outstanding</option>
</select></p>
<p><input type="submit" name="submit" value="Calculate!" /></p>
</form>

<?php include ('../includes/footer.html'); ?>

• 1
##### Share on other sites

Help would be greatly appreciated

##### Share on other sites

Sorry for the confusion here. \$name is a variable defined within the create_radio() function (specifically, as an argument). For this reason, \$name only has a value within that function. This means that anywhere outside of the function, before the form submission, after, whatever, \$_POST[\$name] has no value because \$name has no value.

However, using the code, the radio buttons created have a name value of 'gallon_price'. So after the form is submitted, \$_POST['gallon_price'] has the value of whatever button was checked.

Let me know if that's still unclear.

(Also, you've posted this in a forum for a different book. It'd help if you use the correct forum for any future questions. Thanks!)

• 1
• 1
##### Share on other sites
• 1 year later...

I am curious how you can pass a value to the function "create_radio('3.00');  and still use the arguments in the function at the same time?  Thanks

Edited by RastaManCan
##### Share on other sites

Nevermind, I figured it out.  Just gotta let go of the bone every now and again.  The answer is because you were assigning values to the arguments and you can't assign values to one variable in the argument and not the other.

##### Share on other sites

Awesome. Glad you figured it out and thanks for letting us know!

##### Share on other sites
• 1 year later...

While the code you posted did not come from PHP for the Web Fourth Edition, I found this code helpful for the eighth task quoted below in the Pursue section at the end of Chapter 3 from the Fourth Edition.  I was curious how much fuel will cost for an upcoming trip to Texas.  Thanks for posting the code!

Quote

Create a new HTML form that performs a task you envision yourself needing (or a lighter-weight version of that functionality).  Then create the PHP script that handles the form, printing just the received data.

## Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible. ×   Pasted as rich text.   Paste as plain text instead

Only 75 emoji are allowed.

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.