2009-12-08 5 views
0

내 세션 변수에있는 각 객체를 반복하고 싶습니다. 'items'는 책 정보를 저장하기 위해 만든 클래스 유형의 항목입니다. 나는 적어도 한 번 반복해야한다고 생각했기 때문에 count ($ _ SESSION [ 'items'])를 1로 반환했습니다. 그러나 운이 없다. 감사합니다foreach를 통해 세션 변수

foreach ($_SESSION['items'] as $item) { 
     echo TEST; 
     $sql = 'SELECT * FROM item WHERE Item_ID = '.$item->Get_Item_ID; 
    var_dump($sql); 
    } 
+0

var_dump ($ _ SESSION [ 'items']); 결과를 제공 할 수 있습니까? ? 개체를 세션에 저장하기 전에 직렬화 했습니까? – halfdan

+0

그리고'var_dump ($ _ SESSION [ 'items'])'를하면 코드가 괜찮아 보입니다. – RageZ

+0

Mayhem 당신은 Vardump를 시도해야합니다 ($ _ SESSION [ 'items']); – Zeemee

답변

3

왜 세션 변수에 개체를 저장하고 있습니까?

http://php.net/manual/en/function.serialize.php

직렬화 및 쿠키 내에 저장할 수있는 형식으로 객체를 직렬화 할 수 있어야한다.

$ _SESSION은 문자열과 배열 만 저장할 수 있다고 생각합니다.

1

그런 중첩 루프에서 쿼리를 수행해야한다는 것을 알고 싶습니다. 오히려, 당신은

물론
$sql = "SELECT * FROM item WHERE Item_ID IN (".implode(",", $_SESSION['items']).")"; 

, 당신은 $_SESSION['items'] 적어도 하나 개의 값으로 배열 있는지 확인해야하고, $_SESSION['items'] 모든 값이 실제로 정수에 있는지 .... 등처럼 쿼리를 자격 (또는한다 정수 [예 : 문자열 "6"])를 전달할 수 있습니다.

+0

또한, $ _SESSION [ 'items']에 저장된 값이 정수로 유효한지 확인하십시오. 그렇지 않으면 SQL 삽입이 발생합니다. –

1

개체를 serialize/unserialize하는 것을 잊어 버린 것 같습니다. 객체를 세션 변수에 할당하는 것은 불가능합니다. 이것은 세션이 객체가 존재하지 않는 파일에 기록되기 때문입니다. serialization을 사용하여 개체를 세션에 저장하십시오.

페이지 1 :

$user = new User(); 
$_SESSION['user'] = serialize($user); 

2 페이지 :

$user = unserialize($_SESSION['user']); 

행복을 빌며,
파비안

0

마지막으로 것은, 유형 '항목'에 대한 클래스 정의가로드 있는지 확인 세션에서 개체를 비 직렬화하기 전에. 그렇지 않으면 객체의 필드 나 메소드에 액세스 할 때 오류가 발생합니다.