0

サイクリング、ジョギング、水泳の 3 つのアクティビティで消費されるカロリーとポンドの量を計算する簡単なプログラムを作成しようとしています。Undefined variable: calcPounds というエラーが発生し続けます。

関数内に変数がありますが、まだ定義されていないことがわかります。今週PHPを始めたばかりなので、まだ少し混乱しています。

ありがとうございました!

PHP

function pounds_burned($calc){

    $biking = 200;
    $jogging = 475;
    $swimming = 275;
    $calories;
    $pounds = 3500;
    $calcPounds;       // **** ASSIGNMENT MISSING HERE ****

    $hoursBiking = floatval($_GET["bike"]);
    $hoursJogging = floatval($_GET["jog"]);
    $hoursSwimming = floatval($_GET["swim"]);

    if (!is_numeric($hoursBiking) or !is_numeric($hoursJogging) or !is_numeric($hoursSwimming)) {
        echo 'Enter numeric values only' . "<br />";
    }

    if (empty($hoursBiking) or empty($hoursJogging) or empty($hoursSwimming)) {
        echo "All fields are required to be valid numbers!!";
        echo "<p><a href=\"calories.html\">Try again?</a></p>\n";
    }
    else {  
        $calcPounds = round(($biking * $hoursBiking) + 
            ($jogging * $hoursJogging) + ($swimming * $hourssSwimming));
    }
  }
    echo "Number of pounds worked off is " . round($calcPounds);

    $calories = $calcPounds / $pounds;
    echo "Number of calories burned is " .round($calories);
  ?>

HTML

<form action="calorie_calc.php" method="GET" onsubmit="return validateForm()">

  <table border="0">
  <tr>
    <td>Enter number of hours bicycling</td>
    <td><input type="text" name="bike" id="bike" size = "10" /></td>
  </tr>  
  <tr>
    <td>Enter number of hours jogging</td>
    <td><input type="text" name="jog" id="jog" size = "10" /></td>
  </tr>     
  <tr>
   <tr>
     <td>Enter number of hours swimming</td>
     <td><input type="text" name="swim" id="swim" size = "10" /></td>
  </tr>
    <td><input type="submit" name="calc" id="calc" value="Compute Pounds" /></td>
    <td><input type="reset" name="resetButton" id="resetButton" value="Reset" /></td>
  </tr>             
  </table>

  </form>
4

3 に答える 3

2

あなたのファイルでcalorie_calc.php

<?php

if (isset($_GET["calc"])){
    $biking = 200;
    $jogging = 475;
    $swimming = 275;
    $calories = 0;
    $pounds = 3500;
    $calcPounds = 0;

    $hoursBiking = floatval($_GET["bike"]);
    $hoursJogging = floatval($_GET["jog"]);
    $hoursSwimming = floatval($_GET["swim"]);

    if (!is_numeric($hoursBiking) or !is_numeric($hoursJogging) or !is_numeric($hoursSwimming)) {
        echo 'Enter numeric values only' . "<br />";
    }

    if (empty($hoursBiking) or empty($hoursJogging) or empty($hoursSwimming)) {
        echo "All fields are required to be valid numbers!!";
        echo "<p><a href=\"calories.html\">Try again?</a></p>\n";
    }
    else {  
        $calcPounds = round(($biking * $hoursBiking) + 
            ($jogging * $hoursJogging) + ($swimming * $hourssSwimming));
    }
    echo "Number of pounds worked off is " . round($calcPounds);

    $calories = $calcPounds / $pounds;
    echo "Number of calories burned is " .round($calories);
}
?>
于 2013-09-01T00:49:51.520 に答える
0

変数$calcpoundsは確かに関数内にありますが、それが使用されている場所ではありません。コードは常に次の行を実行します。

echo "Number of pounds worked off is " . round($calcPounds);
$calories = $calcPounds / $pounds;
echo "Number of calories burned is " .round($calories);

これは関数の外にあるため、$calcpounds初期化されません。

$calcpoundsまた、関数内で初期化されることは保証されていませんが、初期化されたとしても外​​部には表示されません。

return後で使用するために関数から値を取得する必要がありますが、ここではpounds_burned()、値を返すように呼び出しさえしていません。

コードを再構築することをお勧めします。

  • 関数から検証を削除します。メイン プログラム フローの一部として実行します。
  • 3 つの変数 ($hoursJogging など) をパラメーターとして関数に渡します。
  • 関数に算術演算だけを実行させ、結果を返す
  • 結果を保存し、必要に応じてメッセージを出力します。
于 2013-09-01T00:18:38.563 に答える
0

本番モードの場合は、E_ALLのようなエラーを表示しないことをお勧めします。これはNoticeエラーです。もちろん、この問題を回避しようとしている場合は、

if (empty($hoursBiking) or empty($hoursJogging) or empty($hoursSwimming)) {
  $calcPounds = null; // Add this line for a quick fix, otherwise refactor whole code
  echo "All fields are required to be valid numbers!!";
  echo "<p><a href=\"calories.html\">Try again?</a></p>\n";
}
于 2013-09-01T00:19:07.570 に答える