Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Call to a member function on a non-object
Forum PHP.pl > Forum > Przedszkole
cornholio666
Witam,

plik1:

  1. <?php
  2. include "../adodb/adodb.inc.php"; 
  3.  
  4.  $db = NewADOConnection('mysql');  
  5.  $db->Connect("", "", "", "baza");  
  6.  
  7.  include "./news.class.php";
  8.  include "./newsy.class.php";
  9.  
  10.  
  11.  $newsy = new Newsy($db);
  12.  $newsy->show_all_news();
  13. ?>


newsy.class.php:

  1. <?php
  2. class Newsy{
  3.  
  4.  var $tab_news = array();
  5.  var $db;
  6.  
  7.  function __construct($db){
  8.  $this->db = $db;
  9.  }
  10.  
  11. function show_all_news(){
  12.  
  13. $query = "SELECT news_id,title,prev_content,content,date FROM news ORDER BY news_id D
    ESC"
    ;
  14. //echo $query;
  15. $result =$this->db->Execute($query);
  16.  
  17. if (!$result){
  18. die("failed1");
  19. }
  20.  
  21. while(!$result->EOF){
  22.  
  23. $news = new News($this->db);
  24.  
  25. $news->news_id = $result->fields[0];
  26. $news->title = $result->fields[1];
  27. $news->prev_content = $result->fields[2];
  28. $news->content= $result->fields[3];  
  29. $news->date = $result->fields[4];
  30. array_push($this->tab_news,$news);
  31.  
  32. $result->MoveNext();
  33. }
  34.  
  35.  
  36.  }
  37.  
  38.  }
  39. ?>


Wyskakuje błąd:

Call to a member function on a non-object in newsy.class.php on line 16

16 linijka:
  1. <?php
  2. $result =$this->db->Execute($query);
  3. ?>


Na lokalu mi chodzi elegancko a na serwerze taki blada wywala. Jakies pomysły?
em1X
Bo na lokalu masz php5 a na serwerze php4.

Napisz tak i bedzie chodzic:
  1. <?php
  2. // $result =$this->db->Execute($query);
  3.  
  4. $db =& $this->db;
  5. $result = $db->Execute($query);
  6. ?>


pozdro
cornholio666
Cytat
Bo na lokalu masz php5 a na serwerze php4.


Dokładnie.

Zrobiłem tak jak napisałeś i dalej to samo...

  1. <?php
  2. class Newsy{
  3.  
  4.  var $tab_news = array();
  5.  var $db;
  6.  
  7.  function __construct($db){
  8.  $this->db = $db;
  9.  }
  10.  
  11. function show_all_news(){
  12.  
  13. $query = "SELECT news_id,title,prev_content,content,date FROM vnews ORDER BY news_id 
    DESC"
    ;
  14. //echo $query; 
  15. $db =& $this->db;
  16. $result = $db->Execute($query);
  17. ?>


Cytat
Bo na lokalu masz php5 a na serwerze php4.


Dokładnie.

Zrobiłem tak jak napisałeś i dalej to samo...

  1. <?php
  2. class Newsy{
  3.  
  4.  var $tab_news = array();
  5.  var $db;
  6.  
  7.  function __construct($db){
  8.  $this->db = $db;
  9.  }
  10.  
  11. function show_all_news(){
  12.  
  13. $query = "SELECT news_id,title,prev_content,content,date FROM vnews ORDER BY news_id 
    DESC"
    ;
  14. //echo $query; 
  15. $db =& $this->db;
  16. $result = $db->Execute($query);
  17. ?>
em1X
sprobuj tak: sprawdzimy czy z twoim kodem jest wszystko ok:

  1. <?php
  2. echo "Czy jestem obiektem ? ".(is_object($this->db)) ? "Tak" : "Nie";
  3.  
  4. //echo $query; 
  5. $db =& $this->db;
  6. $result = $db->Execute($query);
  7. ?>
cornholio666
Tak jest obiektem
em1X
Skoro jest obiektem to raczej niemozliwe, zeby nie moglo na jego rzecz wykonywac metod blink.gif ohmy.gif :roll2:

  1. <?php
  2. $dbhandle =& $this->db; // referencja do naszego obiektu
  3. $result = $dbhandle->Execute($query); // i na rzecz tego obiektu wywolujemy metode Execute()
  4. ?>
cornholio666
jak wpisalem tak:

  1. <?php
  2. if(is_object($this->db)){
  3. echo "tak";
  4. }else{
  5.  echo "nie";
  6. }
  7. ?>


pokazuje nie

jak wpisze to co mi napisales to pokazuje tak ;/

Wiec chyba nie jest obiektem.

Zrobiłem tak:

  1. <?php
  2. include "../adodb/adodb.inc.php"; // biblioteka operacji na bazie
  3.  
  4.  $db = NewADOConnection('mysql');  //będziemy się laczyc z MYSQLem
  5.  $db->Connect("", "", "", "gggg");  //laczymy się z baza
  6.  
  7.  
  8.  if(is_object($db)){
  9.  echo "tak";
  10.  
  11. }else{
  12. echo "nie";
  13. }
  14.  include "./news.class.php";
  15.  include "./newsy.class.php";
  16.  
  17.  
  18.  $newsy = new Newsy($db);
  19.  $newsy->show_all_news();
  20. ?>


newsy.class.php

  1. <?php
  2. class Newsy{
  3.  
  4.  var $tab_news = array();
  5.  var $db;
  6.  
  7.  function __construct($db){
  8.  $this->db = $db;
  9.  }
  10.  
  11. function show_all_news(){
  12.  
  13. $query = "SELECT news_id,title,prev_content,content,date FROM vnews ORDER BY news_id 
    DESC"
    ;
  14. //echo $query; 
  15. // echo "Czy jestem obiektem ? ".(is_object($this->db)) ? "Tak" : "Nie";
  16.  
  17. if(is_object($this->db)){
  18.  echo "tak";
  19.  
  20. }else{
  21. echo "nie";
  22. }
  23. $db =& $this->db;
  24. $result = $db->Execute($query);
  25. ?>


W pierwszym przypadku $db jest obiektem a newsy.class.php nie jest. Wiec obiekt jest "zle przekazywany do klasy"...
em1X
newsy.class.php

  1. <?php
  2. class Newsy{
  3.  
  4.  var $tab_news = array();
  5.  var $db;
  6.  
  7.  function Newsy(& $db){
  8.  $this->db = $db;
  9.  }
  10.  
  11. function show_all_news(){
  12.  
  13. $query = "SELECT news_id,title,prev_content,content,date FROM vnews ORDER BY news_id 
    DESC"
    ;
  14.  
  15. $db =& $this->db;
  16. $result = $db->Execute($query);
  17. }
  18. ?>



zapomnielismy oboje ze w wersji php4 nie ma konstruktorow o nazwie __construct withstupidsmiley.gif withstupidsmiley.gif
cornholio666
TAK JEST!!! DZIEKI biggrin.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.