Jump to content
Larry Ullman's Book Forums

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

Share this post


Link to post
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

Share this post


Link to post
Share on other sites

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 this post


Link to post
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 this post


Link to post
Share on other sites

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.

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×