Хранить объект PHP в сеансе? - PullRequest
2 голосов
/ 22 декабря 2011

У меня есть многостраничная форма, которую я пытаюсь реализовать на своем веб-сайте, которая работает следующим образом:

1 Введите данные клиента - $ _POST -> 2 Подтвердите данные клиента -$ _SESSION -> 3 Создать PDF из данных клиента

Как вы можете видеть на моей второй странице, я получаю значения в моей форме из $ _POST.На этой же странице я создаю объект под названием "customer" из моего класса с именем customer , в котором хранятся все значения, отправленные с моей первой страницы.

Затем я устанавливаю переменную $ _SESSION с именем "customer"и назначьте его моему объекту.

session_start();  

        //includes html header part of page
        include("includes/page/header.php");



        //customer class 
        include("classes.php");


        $customer = new customer();


        $_SESSION['customer'] = $customer;

Теперь на моей последней странице моего сайта у меня есть следующий код:

    session_start();

//assign customer to equal object stored in session
$customer = $_SESSION['customer'];


//to test if successfull , nothing is displayed!
echo $customer->first_name;


return 0;

Проверка этого ничего не отображается на моей странице, поэтомумоя сессия не выполняется так, как я думал.

К вашему сведению:

  • С моим клиентом все в порядке, он работает правильно и правильно хранит все значения!
  • МойМассив записей работает нормально

var_dump сессии на последней странице.

object(__PHP_Incomplete_Class)#1 (15) { ["__PHP_Incomplete_Class_Name"]=> string(8) "customer" ["first_name"]=> string(5) "Iain" ["second_name"]=> string(6) "Taylor" ["company_name"]=> string(10) "Wired Ltd." ["address_1"]=> string(15) "14 Joseph St" ["address_2"]=> string(8) "West End" ["city"]=> string(7) "Glasgow" ["postcode"]=> string(7) "G45 NP4" ["county"]=> string(29) "Scotland" ["country"]=> string(14) "United Kingdom" ["email"]=> string(31) "somebody@somebody.com" ["phone"]=> NULL ["cid"]=> NULL ["reg_date"]=> NULL ["tel"]=> string(11) "01413395678" } 

Есть идеи, как заставить это работать?

Спасибо

Счастливого Рождества!

Ответы [ 2 ]

5 голосов
/ 22 декабря 2011

Вам нужно сделать include("classes.php"); на последней странице до session_start(), потому что при десериализации переменных сеанса PHP пытается создать экземпляр объекта того же класса, который вы поместили в данные сеанса.Итак, если PHP не может найти класс, возникает ошибка.

1 голос
/ 22 декабря 2011

@ Тимур абсолютно прав, кроме того, что он пропустил одну вещь. Вам нужно переместить класс include выше session_start () на каждую страницу, а не только на последнюю.

"Автоматическая сериализация / десериализация происходит при вызове session_start (). Это означает, что порядок, в котором вы включаете свои файлы и вызываете session_start (), очень важен. "- Сеанс PHP с незавершенным объектом

Проведите некоторое исследование в следующий раз, прежде чем задать вопрос. Это был третий результат в Google по запросу "PHP неполный класс".

Как правило, вы должны включать все файлы в самом начале каждого скрипта. Таким образом, вы никогда не столкнетесь с такими проблемами зависимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...