PHP开发BMI计算器表单提交后输出结果为1的问题求助
问题修复方案
你提交后页面只输出1是几个明确的语法和逻辑问题导致的,按下面步骤改完就能正常运行:
- 输出
1的核心原因:你代码里$bmiSubmitted = isset($_POST['bmi-submitted']);拿到的是布尔判断结果,PHP中布尔值true被直接输出时就会显示为1,你现有逻辑没有输出计算后的BMI结果,反而把这个判断值输出到了页面,才会出现这个现象。 - 其次你表单的提交按钮存在语法错误,
value属性和属性值之间漏了等号,可能导致表单提交时识别不到提交标记字段。
1. 修复表单代码
把原来写错的提交按钮标签替换即可,修正后的完整表单代码:
<?php return " <p>Calculate your BMI</p> <form method='post' action='index.php?page=process-bmi'> <p>Please enter your height and weight to calculate your BMI</p> <label for='height'>Height</label> <input type='text' id='height' name='height'> <label for='weight'>Weight</label> <input type='text' id='weight' name='weight'> <input type='submit' value='Submit' name='bmi-submitted'> </form>";
唯一改动点就是给提交按钮的value属性补上了缺失的等号。
2. 修复BMI处理逻辑代码
你原来的逻辑只把结果存到了$output变量,没有做输出,还缺少基础的合法性校验,修正后的代码:
<?php $bmiSubmitted = isset($_POST['bmi-submitted']); $output = ''; // 初始化输出变量,避免未定义变量报错 if ($bmiSubmitted) { // 强转浮点型,避免传入非数字内容导致计算异常 $weight = (float)$_POST['weight']; $height = (float)$_POST['height']; // 注意:如果你输入身高用的是厘米单位(比如175、180),取消下面这行注释转成米,否则计算结果完全不对 // $height = $height / 100; $output = bmi($weight, $height); } // 输出最终计算结果 echo $output; function bmi($weight, $height) { // 避免身高/体重为0触发除零错误 if ($height <= 0 || $weight <= 0) { return "<p>请输入有效的身高、体重正数数值</p>"; } $bmi = $weight / ($height * $height); // 保留两位小数,结果更易读 $bmi = number_format($bmi, 2); return "<p>Your bmi is $bmi</p>"; } ?>
补充说明
- 代码里加的参数校验是基础容错逻辑,能避免用户空提交、填0或者填非数字内容时抛出代码报错
- BMI计算公式要求身高单位为米,如果你平时输入身高习惯用厘米单位,一定要记得开启单位转换的注释行,不然算出来的数值会比正常范围小好几个数量级。
内容的提问来源于stack exchange,提问作者Bethany Jane
相关产品推荐
相关产品推荐

