Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> obiekty jako zmienna sesji, problem z przekazaniem tablicy obiektow na inna strone
abusiek
post
Post #1





Grupa: Zarejestrowani
Postów: 89
Pomógł: 5
Dołączył: 23.10.2006
Skąd: Gda?sk

Ostrzeżenie: (0%)
-----


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

Ten post edytował abusiek 5.01.2007, 22:51:38
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
ikioloak
post
Post #2





Grupa: Zarejestrowani
Postów: 416
Pomógł: 0
Dołączył: 8.01.2004

Ostrzeżenie: (0%)
-----


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.

Ten post edytował ikioloak 5.01.2007, 23:09:00
Go to the top of the page
+Quote Post
Sabistik
post
Post #3


Administrator wortalu


Grupa: Przyjaciele php.pl
Postów: 960
Pomógł: 39
Dołączył: 21.10.2003
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Cytat
Natomiast gdy chcesz zapisac obiekt w zmiennej sesyjnej musisz skorzystac z serialize a przed odczytem unserialize.

Nic nie musi.
Go to the top of the page
+Quote Post
abusiek
post
Post #4





Grupa: Zarejestrowani
Postów: 89
Pomógł: 5
Dołączył: 23.10.2006
Skąd: Gda?sk

Ostrzeżenie: (0%)
-----


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

Ten post edytował abusiek 5.01.2007, 23:43:30
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 19:06