2012-06-27 3 views
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; 
    } 

} 

답변

0

$total 변수가 당신의 foreach 이상 초기화 할 필요가

$subforeach 전에 안전을 위해, $total뿐만 아니라 정의합니다. $sub 변수는 상단의 foreach 내부에서 초기화해야합니다.

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

또한, 당신은 최대 $total += $sub; 이상이 단지 내부 while 루프 아래에 위치 할 이동할 수 있습니다.

0

정의되지 않은 변수는 $ sub가 아니라 $ total입니다. $ total = 0을 추가하십시오; 당신의 기능의 맨 위로

+0

'$ st-> fetch (PDO :: FETCH_OBJ)'가 항목을 반환하지 않을 때 $ sub는 정의되지 않을 수 있습니다. – Neverever

0

$ total을 초기화하지 않으므로 오류가 발생했습니다.

1

문제가 될 것

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

0을 반환 결과 경우.

$sub = $total = 0; 
foreach(...) 
관련 문제