Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: No i znowu sesje...
Forum PHP.pl > Forum > PHP
kliszaq
Napisalem sobie ostatnio klase koszyka internetowego (no comments), ale jaskos nie udaje mi sie zarejestowac go w sesji. Any ideas? :?:
BzikOS
Ja to zrobiłem tak:
[php:1:28a3987f23]<?php
// jesli obiektu koszyka nie ma w sesji to tworzy nowy obiekt klasy koszyk, a jesli jest to unserializujemy go
$koszyk = (isset($_SESSION['koszyk'])) ? unserialize($_SESSION['koszyk']) : new Koszyk();

// a tak wrzucam obiekt do sesji
$_SESSION['koszyk'] = serialize($koszyk);
?>[/php:1:28a3987f23]
kliszaq
okej.
Ale jezeli mam kilka stron, i na poczatku dam session_start();, to jesli chcem wywolac funkcje klasy np.: (na samym poczatku $zamow = new koszyk()) czyli $zamow->dodaj("Ram 128", 90, 1), gdzie 1 to nazwa produktu, 2 to cena, a 3 to ilosc, w takim ukladzie wyskoczy blad o tym ze nie mozna wywolac tej funkcji?
BzikOS
Dlatego nie ma ponieważ nie ma takiego obiektu - musisz go unserializować, co też Ci podałem.
kliszaq
poswiruje troche i jak nie bede jeszcze czegos wiedzial, to jeszcze sie zapytam aaevil.gif
BzikOS
Masz tu mały schemacik tak postępować:

plik1.php
[php:1:bbc7518c1e]<?php
session_start();

// tworzymy nowy obiekt koszyka, ale sprawdzamy czy nie ma go już czasem w zmiennej sesyjnej
$zamow = (isset($_SESSION['zamow'])) ? unserialize($_SESSION['zamow']) : new Koszyk();

// załóżmy że w sesji go nie było więc wykonywane jest new Koszyk();

// przeprowadzamy jakieś operacje na obiekcie, np.
$zamow->dodaj("Ram 128", 90, 1);

// jeśli wykonaliśmy wszystkie operacje to możemy wrzucić obiekt $zamow z powrotem do sesji:
$_SESSION['zamow'] = serialize($zamow);

// i przchodzimy sobie na jakąś inną stronę
Header('Location: strona2.php');
?>[/php:1:bbc7518c1e]

strona2.php
[php:1:bbc7518c1e]<?php
session_start();

// w tej chwili nie ma żadnego obiektu więc żadna metoda nie może zostać wywołana, więc tworzymy obiekt:
$zamow = (isset($_SESSION['zamow'])) ? unserialize($_SESSION['zamow']) : new Koszyk();

// tym razem obiekt jest w sesji więc wykona się unserialize($_SESSION['zamow']);

// i teraz już normalnie możesz odwoływać się do obiektu, tylko pamiętaj o wrzuceniu go do sesji jeśli wykonasz w nim jakieś zmiany
?>[/php:1:bbc7518c1e]

Jaśniej się nie dało smile.gif
kliszaq
okej thx smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.