Jump to content
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';
include ('../includes/header.html');

// 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
create_radio('3.00');
create_radio('3.50');
create_radio('4.00');
?>
</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'); ?>

  • Upvote 1
Link to comment
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!)

  • Like 1
  • Upvote 1
Link to comment
Share on other sites

  • 1 year later...
  • 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.

 

Link to comment
Share on other sites

 Share

×
×
  • Create New...