这表示$ total和$ sub未定义为$ total + = $ sub。 $ sub在while循环中声明,$ sub都在函数内,因此它应该是一个局部变量。为什么我不能使用它?
public function cart() {
foreach($_SESSION as $name=>$value){
if (substr($name, 0, 5) == 'cart_') {
if((int)$value > 0){
$id = substr($name, 5, (strlen($name)-5));
$st = $this->db->prepare("select id, name, price from deals where id=?");
$st->bindParam(1, $id);
$st->execute();
while($cart_item = $st->fetch(PDO::FETCH_OBJ)){
$sub = $cart_item->price*$value;
echo $cart_item->name.' x '.$value.' @ '.$cart_item->price.' = '.$sub.' <a href="cart.php?add='.$id.'">[+]</a> <a href="cart.php?remove='.$id.'">[-]</a> <a href="cart.php?delete='.$id.'">[Delete]</a><br/>';
}
}
}
$total += $sub;
}
}
答案 0 :(得分:1)
如果
,这将是一个问题 $st = $this->db->prepare("select id, name, price from deals where id=?");
$st->bindParam(1, $id);
$st->execute();
返回0结果。
在$sub
之前定义foreach
并保持安全,$total
:
$sub = $total = 0;
foreach(...)
答案 1 :(得分:0)
未定义的变量是$ total,而不是$ sub。添加$ total = 0;到你的功能的顶部。
答案 2 :(得分:0)
你从未初始化$ total,因此错误。
答案 3 :(得分:0)
$total
变量应该在foreach
之上初始化。 $sub
变量应在foreach
内的顶部初始化。
$total = 0;
foreach ($_SESSION as $name => $value) {
$sub = 0;
...
此外,您可以将$total += $sub;
向上移动,使其位于内部while
循环的正下方。