Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: obiekty jako zmienna sesji
Forum PHP.pl > Forum > PHP
abusiek
Witam!

W pliku main.php mam cos takiego:

session_start();
session_register('produkty');
include 'klasy.inc';
...

$produkty to tablica do ktorej ladowane sa obiekty klasy Produkty, ktorych pola sa pobierane z plikow .csv
Na tej stronie nie ma z obiektami zadnego problemu i np. taki kod dziala:

  1. <?php
  2. $count=count($produkty);
  3. for($i=0; $i<$count; $i++)
  4. {
  5.  echo 'jestem w petli';
  6.  //$produkty[$i]->pokazProdukt;
  7. echo '<br>';
  8. }
  9. ?>


na kolejnej stronie pokazProdukt.php mam cos takiego:
  1. <?php
  2. include 'klasy.inc';
  3. session_register('produkty');
  4. $count=count($produkty);
  5. $echo $count;
  6. for($i=0; $i<$count; $i++)
  7. {
  8.  echo 'jestem w petli';
  9.  $produkty[$i]->pokazProdukt;
  10. echo '<br>';
  11. }
  12. ?>

do petli program wchodzi tylko raz, mimo ze $count=5, czyli wysypuje sie na linii
  1. <?php
  2. $produkty[$i]->pokazProdukt;
  3. ?>

Po wywolaniu na tej stronie polecenia
  1. <?php
  2. print_r($produkty)
  3. ?>

dostaje cos takiego:
__PHP_Incomplete_Class Object ( [__PHP_Incomplete_Class_Name] => Produkt /i tutaj wypisana zawartosc tablicy/
Wie ktos jak to poprawic?? bo z tego co czytalem moze to byc problem z zainkludowaniem pliku 'klasy.inc', ale ja to include mam obudowane i nie zwraca zadnego bledu wiec raczej powinno byc w porzadku...
I jeszcze: pisze pod php5
ikioloak
Nie pokazales calego kodu wiec nie wiem w jaki sposob dodajesz produkty do zmiennej sesyjnej. W kazdym razie, zamiast session_register" title="Zobacz w manualu php" target="_manual powinienes korzystac z $_SESSION - doczytaj w manualu dlaczego. Natomiast gdy chcesz zapisac obiekt w zmiennej sesyjnej musisz skorzystac z serialize" title="Zobacz w manualu php" target="_manual a przed odczytem unserialize." title="Zobacz w manualu php" target="_manual

I jeszcze jeden blad - literowka zapewne - nie $echo a echo smile.gif

Edit: Blad lezy jednak chyba gdzie indziej. Include'uj 'klasy.inc' przed session_start" title="Zobacz w manualu php" target="_manual.
Sabistik
Cytat
Natomiast gdy chcesz zapisac obiekt w zmiennej sesyjnej musisz skorzystac z serialize a przed odczytem unserialize.

Nic nie musi.
abusiek
Obiekty dodaje w petli for w sposob najprostszy z mozliwych:
$produkty[] = new Produkt($nazwa);
Tak jak pisalem w tym raczej nie tkwi problem poniewaz na stronie main.php wszystkie funkcje zwiazane z elemntami tablicy dzialaja.

Piszac pod php5 nie musze uzywac serialize i unserialize poniewaz polecenie session_register('produkty') robi to automatycznie i jak pisalem sama zawartosc tablicy $produkty jest dostepna na stronie pokazProdukt.php, ale nie moge korzystac z funkcji zwiazanych z klasa Produkt, czyli np. nie moge zrobic czegos takiego:
$produkty[0]->pokazProdukt();....


solution found!!!

plik pokazProdukt.php powinien wygladac tak:
  1. <?php
  2. if((include 'klasy.inc') == 'OK'){
  3. echo 'zainkludowane';
  4. }
  5. else{
  6. echo 'nie udalo sie zainkludowac pliku klasy.inc';
  7. }
  8. session_register('before');
  9.  
  10.  
  11. session_register('produkty');
  12. ?>


Czyli rozchodzilo sie to, zeby include bylo pierwszym poleceniem w pliku, bo umieszczenie go przed session_register('przystanki') nic nie dawalo. (co jest o tyle dziwne ze we wszelkich manualach do php czytam, ze session_start() musi byc pierwszym poleceniem w pliku)

Czasami po prostu nienawidze programowac tongue.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.