2

これは、$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;
    }

}
4

4 に答える 4

1

だとしたら問題だな

            $st = $this->db->prepare("select id, name, price from deals where id=?");
            $st->bindParam(1, $id);
            $st->execute();

0 件の結果を返します。

安全のために$subbeforeを定義します。foreach$total

$sub = $total = 0;
foreach(...)
于 2012-06-27T03:27:10.907 に答える
0

変数は、$total上で初期化する必要がありますforeach$sub変数は、上部の , 内で初期化する必要がありますforeach

$total = 0;
foreach ($_SESSION as $name => $value) {
    $sub = 0;
    ...

また、内側のループ$total += $sub;のすぐ下に配置するために、より高い位置に移動することもできます。while

于 2012-06-27T03:28:43.523 に答える
0

未定義の変数は $sub ではなく $total です。$total=0; を追加します。関数の先頭に。

于 2012-06-27T03:25:50.997 に答える
0

$total を初期化していないため、エラーが発生します。

于 2012-06-27T03:26:41.007 に答える