使用$_GET获取HTML select值实现PHP计算器的异常问题求解
代码问题说明
- 加法运算行存在运算符优先级冲突:PHP中字符串拼接符
.与算术加号+优先级相同且为左结合,未加括号时会先完成左侧所有字符串拼接,再执行加法运算;同时该行漏写了+运算符的输出逻辑,导致首行仅输出运算结果,无公式内容。 - 条件判断逻辑错误:所有
if语句使用||(或)运算符,只要$operate不为空,无论选中的运算符值是多少,四个if条件都会全部成立,导致四个运算同步执行,输出四行结果而非选中的对应运算结果。 - 分支结构逻辑错误:四个
if为独立分支,最后的else仅与第四个if配对,会出现逻辑混乱,且错误提示放置位置不符合需求。 - 存在冗余代码:
while循环内直接加了break,仅会执行一次,无存在必要。 - 缺少参数合法性校验:直接读取
$_GET参数,表单未提交时会抛出PHP Notice警告;也未校验输入是否为合法数字、除法运算未判断除数为0的场景,易出现运行错误。
修正后完整代码
<?php // 读取参数,处理未提交场景避免警告 $first = $_GET['num1'] ?? ''; $second = $_GET['num2'] ?? ''; $operate = $_GET['operator'] ?? ''; // 校验两个数字是否全部填写 if (empty($first) || empty($second)) { echo "You didn't input both numbers!"; exit; } // 校验输入为合法数字 if (!is_numeric($first) || !is_numeric($second)) { echo "Please input valid numbers!"; exit; } $first = (float)$first; $second = (float)$second; // 根据选中的运算符执行对应运算 switch ($operate) { case 1: $res = $first + $second; echo "{$first} + {$second} = {$res}"; break; case 2: $res = $first - $second; // 若不需要绝对值可去掉abs()方法 echo "{$first} - {$second} = " . abs($res); break; case 3: $res = $first * $second; echo "{$first} * {$second} = {$res}"; break; case 4: if ($second == 0) { echo "Division by zero is not allowed!"; exit; } $res = $first / $second; echo "{$first} / {$second} = {$res}"; break; default: echo "Invalid operator selected!"; } ?>
内容的提问来源于stack exchange,提问作者nsuspect
相关产品推荐
相关产品推荐

