PHP购物小练习:按商品对应单价与购买数量计算应付总金额求助
问题解决方案
核心问题分析
- 商品价格与商品ID没有做统一映射,大量重复的if-else判断难以维护,也无法快速拿到所选商品的对应单价
- 最终计价逻辑硬编码使用书籍单价
$book计算,没有根据用户选择的商品动态调整
优化实现思路
用数组统一维护所有商品的ID、名称、单价信息,后续新增商品仅需要修改数组即可,无需调整业务逻辑
修改后完整PHP代码(carrito.php)
<?php session_start(); $_SESSION["nombre"] = "Comprador"; echo "<p><b><u>欢迎 $_SESSION[nombre]</u></b></p>"; // 统一维护商品信息:键为商品ID,值存商品名和对应单价 $products = [ 1 => ['name' => '书籍', 'price' => 1.50], 2 => ['name' => '钢笔', 'price' => 0.50], 3 => ['name' => '订书机', 'price' => 3.00], 4 => ['name' => '硬纸板', 'price' => 0.90], 5 => ['name' => '文件夹', 'price' => 0.20], 6 => ['name' => '铅笔', 'price' => 0.10], 7 => ['name' => '套装', 'price' => 5.00] // 注意和前端HTML的价格保持一致,原PHP写的5.5和前端5.0冲突,这里统一为5.0 ]; $selectedId = $_POST['articulo'] ?? 0; $buyNumber = $_POST['number'] ?? 0; if(isset($_SESSION['nombre'])) { // 输出选中商品 if(isset($products[$selectedId])) { echo "您购买的商品是:" . $products[$selectedId]['name']; } else { echo "错误:您的购物车为空 :("; } // 输出购买数量 if(!empty($buyNumber)) { echo "<br/>"; echo "购买数量:" . $buyNumber; } else { echo "<br/>"; echo "错误:您必须选择购买数量"; echo "<br>"; echo "<a href='inicio.php'> 取消 </a>"; } } // 计算并输出应付金额 if (isset($products[$selectedId]) && !empty($buyNumber)) { $totalPrice = $products[$selectedId]['price'] * $buyNumber; echo "<br/>"; echo "应付总金额:" . $totalPrice . " €."; echo "<br>"; echo "<br>"; echo "<a href='pedidos.php'> 去支付 </a>"; echo "<br>"; echo "<a href='inicio.php'> 返回 </a>"; } else if(!isset($_SESSION['nombre'])) { echo "会话未启动"; } ?>
补充说明
- 原前端HTML中套装商品标注价格为5.0€,PHP中定义的
$Kit为5.5€,存在数据不一致问题,修改后代码已统一为5.0€,可根据实际需求调整数组中的价格值 - 该方案扩展性更强,后续新增商品仅需要在
$products数组中按格式添加对应条目,同时在前端select中添加对应option即可,无需修改计价逻辑
内容的提问来源于stack exchange,提问作者Semicolon
相关产品推荐
相关产品推荐

