Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Problem przy dodawaniu produktu do koszyka, Błąd Call to a member function on a non-object
keresh
post
Post #1





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

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


Oto Klasa:

Kod
<?php
class Koszyk
{
    var $zawartosc;

    function dodaj($sub,$ilosc)
    {
        $this->zawartosc[$sub]+=$ilosc;
    }

    function usun($sub,$ilosc)
    {
        if ($this->zawartosc[$sub]>$ilosc)
             $this->zawartosc[$sub]-=$ilosc;
        else
            unset($this->zawartosc[$sub]);
    }

    function zmien($sub,$ilosc)
    {
        $this->zawartosc[$sub] =$ilosc;
     }

    function stan()
     {
         return $this->zawartosc;
     }
}
class NazwanyKoszyk extends Koszyk
{
 var $wlasciciel;
 function ustaw_wlasciciela($nazwa)
 {
     $this->wlasciciel=$nazwa;
 }
}
?>




a oto skrypt obsługujący klasę:

Kod
session_start();
     include("koszyk.inc");
     $select=mysql_query("select nazwa,cena,foto,id,opis from produkty where id='$sub'") or die(mysql_error());
     $prod=mysql_fetch_row($select);
     if(!isset($nowykoszyk) || !is_object($nowykoszyk))
     {
         $nowykoszyk = new NazwanyKoszyk();
         $nowykoszyk->ustaw_wlasciciela($_SESSION['prawid_uzyt']);
     }
     $nowykoszyk->dodaj($prod[3],$ilosc);




niestety podczas drugiego dodania do koszyka produktu wyskakuje błąd: Fatal error: Call to a member function dodaj() on a non-object odnszący się do linijki 82 czyli:
Kod
$nowykoszyk->ustaw_wlasciciela($_SESSION['prawid_uzyt']);


proszę o pomoc (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)  

Ten post edytował keresh 27.08.2008, 11:19:37
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
wookieb
post
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Kod
$nowykoszyk->dodaj($prod[3],$ilosc);

Tzn ze $nowykoszyk nie jest obiektem. Dopilnuj, żeby był.
a dopilnujesz poprawiajac literówke
Kod
$nowykoszyk = new NazawnyKoszyk();

na
Kod
$nowykoszyk = new NazwanyKoszyk();
Go to the top of the page
+Quote Post
keresh
post
Post #3





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

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


Zmieniłem literówke lecz niestety nadal podczas drugiej próby dodania produktu do koszyka wyskakuje ten sam błąd (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)
Go to the top of the page
+Quote Post
wookieb
post
Post #4





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Wiec dopilnuj by $nowyKoszyk był obiektem.
Kod
    if(!isset($nowykoszyk) || !is_object($nowykoszyk))
Go to the top of the page
+Quote Post
keresh
post
Post #5





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

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


Niestety nadal to samo (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) najdziwniejsze że za pierwszym razem wszystko jest dobrze dopiero przy próbie drugiego dodania nie działa

Ten post edytował keresh 27.08.2008, 11:09:50
Go to the top of the page
+Quote Post
webdice
post
Post #6


Developer


Grupa: Moderatorzy
Postów: 3 045
Pomógł: 290
Dołączył: 20.01.2007




Proszę o zmianę tytułu tematu na taki który opisuje problem oraz dodanie bbcode. W innym wypadku temat zostanie zamknięty.
Go to the top of the page
+Quote Post
barthpl
post
Post #7





Grupa: Zarejestrowani
Postów: 142
Pomógł: 35
Dołączył: 5.12.2006
Skąd: Wrocław

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


To może taka zamiana:
  1. <?php
  2. if( !is_a($nowykoszyk, 'NazwanyKoszyk) ) {
  3. // utworzenie nowego koszyka;
  4. $nowykoszyk = new NazwanyKoszyk();
  5. $nowykoszyk->ustaw_wlasciciela( $_SESSION['prawid_uzyt] );
  6. }
  7. $nowykoszyk->dodaj($prod[3],$ilosc);
  8. ?>


BTW: Przy pisaniu obiektowym polecam się przesiąść na PHP5. Ma kilka fajnych funkcji jak na przykład: __construct(), __get(), __set(), etc...
Go to the top of the page
+Quote Post
keresh
post
Post #8





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

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


Cytat(barthpl @ 27.08.2008, 16:35:35 ) *
To może taka zamiana:
  1. <?php
  2. if( !is_a($nowykoszyk, 'NazwanyKoszyk) ) {
  3. // utworzenie nowego koszyka;
  4. $nowykoszyk = new NazwanyKoszyk();
  5. $nowykoszyk->ustaw_wlasciciela( $_SESSION['prawid_uzyt] );
  6. }
  7. $nowykoszyk->dodaj($prod[3],$ilosc);
  8. ?>


BTW: Przy pisaniu obiektowym polecam się przesiąść na PHP5. Ma kilka fajnych funkcji jak na przykład: __construct(), __get(), __set(), etc...


Dziękuje (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Pomogło
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: 24.08.2025 - 01:33