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

PHP表单if-else语句无法输出$shipment变量问题求助

问题排查与解决建议

核心错误分析

你代码里的关键问题是输出运费时错误地从$_POST数组中取值:$_POST[$shipment]是完全错误的用法——$shipment是你自己定义的存储运费的变量,并不是表单提交的参数,所以$_POST里根本不存在这个键,自然输出为空。

排查思路

  • 检查变量输出逻辑:直接查看echo语句中的变量引用,确认是否误用了数组访问。这里应该直接输出$shipment,而非从$_POST中获取。
  • 调试变量赋值:在每个if分支里添加var_dump($shipment),确认变量是否被正确赋值为对应运费。
  • 验证$_POST结构:用var_dump($_POST)查看提交后的数据,你会发现$_POST里只有package和submit两个键,不存在和运费数值对应的键。
  • 处理页面首次加载:当页面未提交表单时,$_POST为空,直接访问$_POST["package"]会触发Notice级错误,需要先判断表单是否提交。

解决建议

1. 修正输出语句

把所有echo "Total Shipping Cost: $".$_POST["$shipment"]或$_POST[$shipment]改成直接输出$shipment:

echo "Total Shipping Cost: $".$shipment;

2. 添加表单提交判断

避免页面首次加载时的错误,先判断是否点击了提交按钮:

if (isset($_POST["submit"])) {
    // 原来的运费计算和输出逻辑放在这里
}

3. 优化代码结构(可选)

用数组映射替代冗长的if-else,让代码更简洁易维护:

$shippingRates = [
    'Flate Rate Envelope' => 6.70,
    'Small Rate Envelope' => 7.20,
    'Medium Rate Envelope' => 13.65,
    'Large Rate Envelope' => 18.90
];

if (isset($_POST["submit"]) && isset($shippingRates[$_POST["package"]])) {
    $shipment = $shippingRates[$_POST["package"]];
    echo "<br>".$_POST["package"]."<br>";
    echo "Total Shipping Cost: $".$shipment;
}

4. 修正HTML表单的小问题

<select>标签的value="type"属性是无效的,直接删除即可,因为下拉框的选中值由<option>的value决定。

修正后的完整代码

<html>
<body>

<form action="" method="post">
Package Type :  
<select name="package" id="package">  
  <option value="Flate Rate Envelope">Flate Rate Envelope</option>  
  <option value="Small Rate Envelope">Small Rate Envelope</option>  
  <option value="Medium Rate Envelope">Medium Rate Envelope</option>  
  <option value="Large Rate Envelope">Large Rate Envelope </option>  
</select>
<input type="submit" value="submit" name="submit">
</form>
</body>
</html>

<?php
if (isset($_POST["submit"])) {
    echo "<br>"; 
    echo $_POST["package"];
    echo "<br>";
    $shipment = 0;
    if ($_POST["package"] == 'Flate Rate Envelope'){
        $shipment = 6.70;
        echo "Total Shipping Cost: $".$shipment;
    }
    else if ($_POST["package"] == 'Small Rate Envelope'){
        $shipment = 7.20;
        echo "Total Shipping Cost: $".$shipment;
    }
    else if ($_POST["package"] == 'Medium Rate Envelope'){
        $shipment = 13.65;
        echo "Total Shipping Cost: $".$shipment;
    }
    else if ($_POST["package"] == 'Large Rate Envelope'){
        $shipment = 18.90;
        echo "Total Shipping Cost: $".$shipment;
    }
}
?>

内容的提问来源于stack exchange,提问作者law

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 03:20:13