I’m working on a project where I have to calculate the hours and minutes a train ride will take based on distance (in miles/hour), stops taken (5 minutes added per stop), and weather (Good weather train speed is 50 mph, in bad weather it is 40 mph). I’m getting correct output when I run it with good weather but when I enter 50 miles, 2 stops, bad weather, I’m getting 1 hour and 20 minutes when I should get 1 hour and 25 minutes. Here is my full form code:
<!DOCTYPE html>
<html lang="en">
<head>
<title>Passenger Train</title>
</head>
<header>
</header>
<body>
<h1>Passenger Train</h1>
<hr>
<p>Enter the distance and number of stops and specify if the weather is good or bad.</p>
<form method="POST" action="PassengerTrain.php">
<input type="text" name="distance" /> Distance (in miles)<br />
<input type="text" name="stops" /> Number of Stops<br />
<input type="radio" name="weather" id="goodWeather" value="goodWeather">
<label for="goodWeather">Weather is Good</label><br />
<input type="radio" name="weather" id="badWeather" value="badWeather">
<label for="badWeather">Weather is Bad</label><br />
<input type="submit" name="submit" value="Calc. Travel Time" />
</form>
<?php
if(isset($_POST['submit'])) {
if(is_numeric($_POST['distance']) && is_numeric($_POST['stops'])) {
if($_POST['weather'] == "badWeather") {
$speed = 40;
}
else {
$speed = 50;
}
$distance = $_POST['distance'];
$stops = $_POST['stops'];
$hours = intval($distance / $speed);
$minutes = $distance % $speed;
$extraTime = $stops * 5;
$minutes += $extraTime;
if ($minutes > 60) {
$minutes = $minutes - 60;
$hours = $hours + 1;
}
echo "Based on the information given your trip will take " . $hours . " hours and " .
$minutes . " minutes.";
}
else {
echo "You must enter numeric values for distance and number of stops.";
}
}
?>
</body>
</html>
Where could I fix this issue or what did I do wrong?
Advertisement
Answer
As pointed out, the problem is that you are not working the minutes out as minutes.
To reduce the main calculation to 1 step, you can add the stops into the time taken by the speed and distance, dividing the total time for the stops (stops * 5) by 60 (to make it into a decimal representing parts of an hour). Then split this into the hours and minutes without need for any further adjustments…
$time = $distance / $speed + ($stops * 5) / 60; $hours = intval($time); $minutes = ($time - $hours) * 60;
which with your values, will give…
Based on the information given your trip will take 1 hours and 25 minutes.