Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> problem z klasą koszyk [rowziazane], wcześniej wszystko działało teraz nie bardzo chce
liechmaster
post
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 4.01.2007

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


Edytowanie2: Problem już rozwiązany, brakowało: else $koszyk = $_SESSION['koszyk'];

Edytowane: Warto dodać, że ten błąd występuje dopiero za drugim razem ( czyli pierwsza inicializacja jest ok.. ) dopiero jak strona jest przeładowana to się wywala.


Witam, mam nastepujący problem:

napisałem aplikację, która korzysta z klasy koszyk.
w środowisku testowym działa poprawnie (na php 5.x )
natomiast na serwerze na którym ma stać domyślnie ( serwer stoi na php 4.3.7) wywala się z błędem:

Fatal error: Call to a member function on a non-object in blabla/costam.php on line 75
w tej linijce jest coś takiego:
  1. <?php
  2. if (!isset($_SESSION['koszyk'])) {
  3. $koszyk = new Koszyk
  4. } 
  5. //nizej linijka 75
  6. $koszyk->wyswietl();
  7.  
  8. //jakis kod
  9. //i na koncu
  10. $_SESSION['koszyk']= $koszyk;
  11. ?>

natomiast definicja klasy to:

  1. <?php
  2. class Koszyk {
  3.  
  4. var $artykuly;
  5.  
  6.  function dodaj($numer, $ilosc) {//jakis kod }
  7.  
  8.  function wyswietl() {//jakis kod}
  9.  
  10. function usun() {//jakis kod}
  11.  
  12. }
  13. ?>


jaka może być przyczyna?

Ten post edytował liechmaster 5.01.2007, 11:43:29
Go to the top of the page
+Quote Post
tomekp
post
Post #2





Grupa: Zarejestrowani
Postów: 171
Pomógł: 0
Dołączył: 17.12.2003
Skąd: Krakół

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


Nie powinno być problemu, wydebuguj sobie czy przekazuje Ci $koszyk, bo z tego co widzę to nie, dojdź do tego w którym miejscu Ci gubi, conajmniej dziwne jest to, że działa to na php5.
Go to the top of the page
+Quote Post
Ace
post
Post #3





Grupa: Zarejestrowani
Postów: 216
Pomógł: 0
Dołączył: 9.08.2003
Skąd: Warszawa

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


Moze chodzi bardziej o session_start? Moze nie inicjalizujesz sesji i wtedy nie masz dostepu do danych sesyjnych. Jeden serwer moze miec autostart sesji w php.ini drugi nie.
Go to the top of the page
+Quote Post
php programmer
post
Post #4





Grupa: Zarejestrowani
Postów: 1 045
Pomógł: 5
Dołączył: 8.11.2004
Skąd: trójmiasto

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


może zamiast
  1. <?php
  2. $koszyk = new Koszyk
  3. ?>


daj
  1. <?php
  2. $koszyk = new Koszyk();
  3. ?>


wogole dziwne że błędu składni tobie nie pokazło,
poza tym dlaczego klasa koszyk nie ma konstruktora?

Ten post edytował php programmer 4.01.2007, 12:49:24
Go to the top of the page
+Quote Post
batman
post
Post #5





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




Problemem jest to, że nie tworzy Ci instancji klasy Koszyk. W Twoim przypadku zmienna $_SESSION['koszyk'] jest ustawiona i dlatego nie tworzy obiektu.
Go to the top of the page
+Quote Post
sf
post
Post #6





Grupa: Zarejestrowani
Postów: 1 597
Pomógł: 30
Dołączył: 19.02.2003
Skąd: Tychy

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


@php programmer: można pisać new COS; i new COS(); poza tym od kiedy klasa musi miec zdefiniowany konstruktor? nie siej herezji tylko sprawdź (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
liechmaster
post
Post #7





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 4.01.2007

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


@Ace sesję ładuję na samym początku, nie wspominałem o tym bo wydawało mi się to oczywiste : ) (session_start() ).
najdziwniejsze jest to że to kurde działa mi na dwóch różnych serwerach (oba na php 5.x)
tylko wywalia się na tym 4.7.
w tej chwili nie mogę sprawdzić ale jak spojrzałem w phpinfo() to jest tam coś takiego jak dissable_classes i może właśnie na tamtym serverze jest to "on"?
póki co mam na wszelki wypadek niekoszerną wersję zastępczą na czystych funkcjach i tablicy $koszyk , która jest przekazywana przez referencję i na końcu zapisywana w sesji - tylko to nijak się ma do oop ; )

@sf o ile mi wiadomo to każdy tworzony obiekt wywołuje konstruktor klasy ; ) ( inna bajka czy jest on jawny czy też nie ;p)

tak mnie coś jeszcze tknęło.. żeby może jawnie odwołać się do zmiennej $koszyk, czyli dodać elsa w tym ifie:
  1. <?php
  2. if (!isset($_SESSION['koszyk'])) {
  3. $koszyk = new Koszyk
  4. } 
  5. else { $koszyk=$_SESSION['koszyk']; }
  6. //nizej linijka 75
  7. $koszyk->wyswietl();
  8.  
  9. //jakis kod
  10. //i na koncu
  11. $_SESSION['koszyk']= $koszyk;
  12. ?>


Ten post edytował liechmaster 4.01.2007, 14:46:46
Go to the top of the page
+Quote Post
DeyV
post
Post #8





Grupa: Zarząd
Postów: 2 277
Pomógł: 6
Dołączył: 27.12.2002
Skąd: Wołów/Wrocław




pamiętaj o tym, że w przypadku register globals = off (zalecane ustawienie) $_SESSION['koszyk'] nie równa się $koszyk
Go to the top of the page
+Quote Post
liechmaster
post
Post #9





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 4.01.2007

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


no to jak korzystać z sesji dla register_globals= off?

i ewentualnie jak zapisać i odtworzyć obiekt z sesji?
bo nie bardzo rozumiem czemu $koszyk nie jest $_SESSION['koszyk'];
a raczej , czy nie mogę napisać $koszyk=$_SESSION['koszyk']?

Ten post edytował liechmaster 4.01.2007, 15:28:43
Go to the top of the page
+Quote Post
sf
post
Post #10





Grupa: Zarejestrowani
Postów: 1 597
Pomógł: 30
Dołączył: 19.02.2003
Skąd: Tychy

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


LOL (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) Sprwadź po prostu czy w $_SESSION['koszyk'] jest na pewno ten obiekt, swoją drogą ja bym użył serialize gdyby wsadzał obiekt do sesji, ale może nie jest to konieczne... po prostu sprawdź co tam siedzi
Go to the top of the page
+Quote Post
Ace
post
Post #11





Grupa: Zarejestrowani
Postów: 216
Pomógł: 0
Dołączył: 9.08.2003
Skąd: Warszawa

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


  1. <?php
  2. echo print_r( $_SESSION['koszyk'] );
  3. ?>


Ten post edytował Ace 5.01.2007, 10:48:53
Go to the top of the page
+Quote Post
liechmaster
post
Post #12





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 4.01.2007

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


problem rozwiązany,
tak jak pisałem, musiałem dodać elsa do tego ifa z koszyk$=$_SESSION['koszyk'] i wszystko już działa
Go to the top of the page
+Quote Post
faster
post
Post #13





Grupa: Zarejestrowani
Postów: 49
Pomógł: 0
Dołączył: 9.09.2002
Skąd: Pszczyna

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


przed wystartowanie m sesji session_start() musisz załadować definicję klasy Koszyk aby manager sesji wiedział jak utworzyć instancję klasy Koszyk

pozdro
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 26.09.2025 - 01:32