PHP报错:尝试在数组上读取属性'total'等问题求助
问题排查与解决
错误原因
从var_dump($_SESSION["carrito"])的输出可以明确看到,购物车中的每个元素是关联数组(例如["id"]=>"1"),但你的代码在foreach循环中错误使用了对象属性访问语法($producto->total、$producto->id等),PHP无法从数组中读取对象属性,因此抛出这些警告。
修复代码
将foreach循环内的对象属性访问改为数组下标访问即可解决问题:
foreach ($_SESSION["carrito"] as $producto) { $total += $producto["total"]; // 替换为数组下标访问 $sentencia->execute([$producto["id"], $idVenta, $producto["cantidad"]]); // 全部替换为数组下标 $sentenciaExistencia->execute([$producto["cantidad"], $producto["id"]]); }
额外注意点
- 代码存在一处逻辑疑问:你已经通过
$total = $_POST["total"]获取了订单总金额,循环中又执行$total += $producto["total"],这会导致最终$total是POST提交金额与所有商品total的叠加值,大概率与实际订单金额不符。如果POST的total已是正确的订单总额,建议删除循环内的$total += $producto["total"]这一行。 - 后续添加商品到购物车时,需保持数据结构一致(要么全用数组,要么全用对象),避免再次出现类型不匹配的错误。
内容的提问来源于stack exchange,提问作者esploter
相关产品推荐
相关产品推荐

