Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: un/serialize
Forum PHP.pl > Forum > PHP
jureusz
Cytat
<?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);
?>


Wykorzystalem to rozwiazanie w tworzeniu obiektu koszyka ale mam problem. Lokalnie wedlug tego schematu dziala wszystko idealnie (php 4.3.4, IIS). Po uploadzie na serwer:

Cytat
Fatal error: Call to a member function dodaj() on a non-object in *.php on line 177

- przy wywolaniu metody dodaj. Do innych metod nie dochodze bo obiektu juz nie ma w sesji.

Wiem ze blad tkwi w serialize ... tyle ze nie umiem sobie z nim poradzic.
Bakus
heh... a gdzie jest zdefiniowana klasa Koszyk questionmark.gif
Z tego co widzę jej tu nie ma... to jest podstawowy błąd tego kodu jaki pokazałeś...
jureusz
[php:1:983e44c046]<?php
class Koszyk {

var $zawartosc;

function dodaj($id, $ilosc) {
if(empty($this->zawartosc)) {
$this->zawartosc[$id] = $ilosc;
}
else {
if (array_key_exists($id, $this->zawartosc)) {
$this->zawartosc[$id] += $ilosc;
}
else {
$this->zawartosc[$id] = $ilosc;
}
}
}

function usun($id){
if (array_key_exists($id, $this->zawartosc)) {
unset($this->zawartosc[$id]);
}
}

function zmien($id,$ilosc){
// if (array_key_exists($id, $this->zawartosc)) {
$this->zawartosc[$id]=$ilosc;
// }
}
}
?>[/php:1:983e44c046]

klase mam zdefiniowana dobrze .. no jezeli ktos ma jakies sugestie to oczywiscie prosze sie nie krepowac ... ale nie w tym lezy istota mojego problemu
Seth
Nie chodzi o to. Aby zdeserializowac ten element musisz wczesniej zaincludowac klase, ktora ma byc zdeserializowana.
Bakus
nie o to chodziło...
W pliku jakiego treść podałeś na samym początku nie ma nigdzie dołączonego pliku z w/w kalsą... dla tego też może pokazywać błędy...
jureusz
hmm moze sie zle wyrazilem...
Klasa jest zaincludowana i wszystko dziala idealnie na lokalnym serwerze. Piszac ze wszystko dziala idealnie mam na mysli powolywanie obiektu do zycia i wywolywanie metod w miejscu gdzie jest ternariusz. Niestety na serwerze sytuacje ma sie nieco inaczej. Mozliwe jest dodanie tylko jednego artykulu do koszyka (powolanie obiektu do zycia wywolanie metody dodaj()). W momencie kiedy wywolywana jest po raz drugi metoda dodaj() wystepuje blad ... ktory podalem wyzej.
BzikOS
Ooo poznaję swój kod winksmiley.jpg

Może na serverze, na którym to nie działa jest tak stare php, że nie obsługuje tablic $_SESSION?
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.