You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用$_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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 07:18:05