使用PHP编写一个简单的计算器

时间:2013-12-27 09:26:19

标签: php html

我正在创建一个简单的BMR计算器,用于计算以下公式: BMR = 66 +(6.23 x体重磅)+(12.7 x高度(英寸)) - (6.8 x年龄)。这段代码已被借用和修改,因此我对此并不十分满意。

我很好奇为什么在按下提交之前已经在答案中显示'66'。在按下提交之前,如何更改代码以不在答案框中显示任何值?

计算器可以在这里找到: http://rgoo.co/calculators/bmr-calculator.php

<?php
if (isset($_POST['agev'])) $agev = $_POST['agev'];
if (isset($_POST['feetv'])) $feetv = $_POST['feetv'];
if (isset($_POST['inchesv'])) $inchesv = $_POST['inchesv'];
if (isset($_POST['weightv'])) $weightv = $_POST['weightv'];

$totalheightv = $inchesv + ($feetv*12);
$answer = 66 + (6.23*$weightv) + (12.7*$totalheightv) - (6.8*$agev);
echo <<<_END
<form method='post' action='/calculators/bmr-calculator.php'>
<table border='0' width='500px' cellpadding='2' cellspacing='1' class="table">
<tr class="calcheading"><td colspan="2"><strong>IIFYM test</strong></td></tr>
<tr class="calcrow"><td>AGE:</td><td align="center"><input type='text' name='agev' value="$agev"/>Years</td></tr>
<tr class="calcrow2"><td>Height:</td><td align="center"><input type='text' name='feetv' value="$feetv"/>Ft</td></tr><td align="center"><input type='text' name='inchesv' value="$inchesv"/>In</td></tr>
<tr class="calcrow"><td>Weight:</td><td align="center"><input type='text' name='valuec' value="$valuec"/>lbs</td></tr>
<tr class="submit"><td colspan="2"><input type='submit' value='Calculate'/></td></tr>
_END;
?>

<tr class="calcrow">
<td>Your BMR is:</td>
<td align="center"><input type="text" value="<?php echo round($answer)?>"></td>
</tr>
</table>
</form>

3 个答案:

答案 0 :(得分:3)

默认为答案的空值,仅在您拥有所有值时进行计算:

<!doctype html>
<?php
$answer = "";
$agev = "";
$feetv = "";
$inchesv = "";
$weightv = "";

if (isset($_POST['agev']) && isset($_POST['feetv']) && isset($_POST['inchesv']) && isset($_POST['weightv'])) {
    $agev = $_POST['agev'];
    $feetv = $_POST['feetv'];
    $inchesv = $_POST['inchesv'];
    $weightv = $_POST['weightv'];

    $totalheightv = $inchesv + ($feetv*12);
    $answer = 66 + (6.23*$weightv) + (12.7*$totalheightv) - (6.8*$agev);

}

echo <<<_END
<form method='post' action=''>
<table border='0' width='500px' cellpadding='2' cellspacing='1' class="table">
<tr class="calcheading"><td colspan="2"><strong>IIFYM test</strong></td></tr>
<tr class="calcrow"><td>AGE:</td><td align="center"><input type='text' name='agev' value="$agev"/>Years</td></tr>
<tr class="calcrow2"><td>Height:</td><td align="center"><input type='text' name='feetv' value="$feetv"/>Ft</td></tr><td align="center"><input type='text' name='inchesv' value="$inchesv"/>In</td></tr>
<tr class="calcrow"><td>Weight:</td><td align="center"><input type='text' name='weightv' value="$weightv"/>lbs</td></tr>
<tr class="submit"><td colspan="2"><input type='submit' value='Calculate'/></td></tr>
_END;
?>

<tr class="calcrow">
<td>Your BMR is:</td>
<td align="center"><input type="text" value="<?php echo round($answer)?>"></td>
</tr>
</table>
</form>

这样你可以确保

  • 如果没有提交任何内容,则答案字段为空
  • 所有必需值均可用于确保正确计算BMR
  • 您没有使用未定义变量的PHP警告

我修复了您的代码版本中的一个小问题,其中您使用名称valuec作为权重输入字段,而不是代码中的weightv。并且请添加任何缺少的HTML标记(例如doctype,<head><body>等。)

答案 1 :(得分:1)

执行类似

的操作
$answer = '';
if(isset($_POST["usubmit"]) && $_POST["usubmit"] != '')
{
  $answer = 66 + (6.23*$weightv) + (12.7*$totalheightv) - (6.8*$agev);
}

然后在html表单中为提交按钮添加一个名称“usubmit”

<tr class="submit">
   <td colspan="2">
        <input type='submit' name='usubmit'  value='Calculate'/>
   </td>
</tr>

显示数字66,因为在页面加载时它将被分配给您的变量。您可以通过添加条件来避免这种情况,以便仅在提交完成时进行计算。

答案 2 :(得分:0)

很简单地说,在你回复round($answer)之前你定义了一个数学作业:

$answer = 66 + (6.23*$weightv) + (12.7*$totalheightv) - (6.8*$agev);

将值设置为66.所以它已经设置,稍后在您调用的代码中

echo($answer);