2009-12-08 3 views
0

Я хотел бы перебирать каждый объект в моей переменной сеанса. «items» имеет тип item, который является классом, который я создал для хранения информации о книге. Я сделал счет ($ _ SESSION ['items']), который возвращает 1, поэтому я подумал, что он должен повторять хотя бы один раз. Но не повезло. Thanksforeach через переменную сеанса

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

Mayme вы должны попробовать 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

Я думаю, что вы забыли сериализовать/нестиализировать объект. Невозможно просто назначить объект в переменную сеанса. Это связано с тем, что сеанс записывается в файл, где ваш объект перестает существовать. Используйте serialization для хранения объекта в сеансе.

Page 1:

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

Page 2:

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

С наилучшими пожеланиями,
Fabian

0

Один последней вещь, убедитесь, что определение класса типа 'пункт' загружено перед де-сериализацией ваших объектов из сеанса. В противном случае вы получите ошибки при попытке доступа к полям или методам объекта.

Смежные вопросы