2009-12-08 128 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 2009-12-08 07:14:46

+0

,如果你做了'var_dump($ _ SESSION ['items'])'你的代碼對我來說看起來很好。 – RageZ 2009-12-08 07:15:01

+0

Mayme你應該嘗試vardump($ _ SESSION ['items']); – Zeemee 2009-12-08 07:15:34

回答

1

我想指出,你應該從來沒有像這樣的嵌套循環執行查詢。相反,你應該符合您的查詢像這樣的....

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

當然,你需要確保$_SESSION['items']與至少一個值的數組,並在$_SESSION['items']所有值實際上整數(或可以傳遞給整數[如字符串"6"])。

+0

另外,請確保存儲在$ _SESSION ['items']中的值被驗證爲整數 - 否則,您正在查看SQL注入。 – 2009-12-08 08:00:33

1

我想你忘了序列化/反序列化對象。將對象分配給會話變量是不可能的。這是因爲會話被寫入到對象停止存在的文件中。使用serialization將對象存儲到會話中。

第1頁:

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

第2頁:

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

最良好的祝願,
費邊

0

最後一點,確保類型 '項' 類定義是裝在從會話中反序列化對象之前。否則,當您嘗試訪問對象上的字段或方法時,您會遇到錯誤。