Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Fatal error: Call to undefined method ConectDB::query()
Forum PHP.pl > Forum > PHP
darkdevil21
Witam,

w pliku database mam zrobione połączenie do bazy danych

//USTAWIENIE DANYCH DO POLACZENIA BAZA -- STALE ZDEFINIOWANE
include("constants.php");

class ConectDB {

var $connection;

public function __construct() {
// Połaczenie z baza danych
$this->connection = new mysqli(server, db_u, db_pass, db_na) ;
if (mysqli_connect_errno()) {
echo ("Nawiązanie połacznia zakończyło się niepowodzeniem". mysqli_connect_error());
}
if (!$this->connection->set_charset("utf8")) {

}

}

}
$database = new ConectDB();
?>

Następnie w pliku core.php chciałem napisać wszystkie niezbędne funkcje, a tych funkcji użyć w już zrobionych widokach np index.php.

I tu mam problem własnie z tym błędem Fatal error: Call to undefined method ConectDB::query()
Dlaczego wewnątrz klasy ConectDB "query" działą bez problemu w Core już nie? Gdy funkcje która wyciąga dane z tabeli napisałem w klasie ConectDB wszystko działa

Klasa Core wygląda tak

include("database.php");

class Core {

public function __construct() {

}

public function getTable($table){
global $database;
$this->table = $table;
$q = "SELECT * FROM firma";
$results = $database->query($q);
while ($data = $results->fetch_object()){
echo $data->tresc;
}
}

}
$core = new Core;
$core->getTable("tabela");

Jezeli pomine klase core i wywołam fukcje np w index.php to wszystko dzała ale w taki sposób wszystkie funkcje musze napisać w klasie ConectDB. Proszę o rady i z góry dzięki
szok
Ja w twojej klasie ConectDB nie widze metody: query()

2. Nie zuwaj global, użyj namespaców, i dziedzicz np po klasie connectDB.
darkdevil21
Czy metoda query nie jest wbudowana? Jeśli napiszę funkcję w clasie ConectDB nie muszę pisać funkcji query. Z namespace nie za bardzo wiem jak korzystać.
nospor
ConnectDB to jest jakaś twoja niezależna klasa. Niby dlaczego z jakiegoś magicznego powodu ma mieć ona wbudowaną metodę query()? Jak jej nie napiszesz, to jej nie będzie.

Co innego gdybyś dziedziczył z jakiejś tam innej klasy, która by miała query(). Ale ty nie dziedziczysz.

ps: zapewne ci chodziło o to, że $this->connection ma query. Tak, to ma, ale to jest obiekt klasy i on ma swoje metody, które w żaden sposób nie przechodzą na metody klasy, która ma ten obiekt
darkdevil21
czyli w klasie ConectDB mam napisać coś w tym rodzaju

public function query($q){
return $this->connection->query($q);
}
Czy coś źle rozumuje ?
nospor
tak
darkdevil21
No ok i to teoretycznie działa ale teraz gdy wywołam funkcję w pliku np index.php
to znowu mam błąd tylko do innej funkcji
<?php
include("baza/database.php");
include("view/pageheader.php");

//wyciagam dane z konkretnej tabeli
$core>getTable("table");


php include("view/pagefooter.php");
?>
Zwraca mi błąd Call to undefined method ConectDB::getTable()

Dlaczego odwołuje się do to klasy ConectDB a nie Core?
nospor
1) Zacznij wkońcu używać bbcode...
2) Nie:
$core>getTable("table");
a:
$core->getTable("table");
3) A skad mamy niby wiedzieć co ty tam pod $core trzymasz? Z opisu błędu wynika, że trzymasz obiekt klasy ConnectDB wieć zapewne tak jest. Albo sam szukaj błędu, albo pokaż kod. I PAMIETAJ: BBCODE

edit: sorka, kod jest w pierwszym poscie.... mam lekką gorączkę i niedowidzę.
Nie mniej jednak pokaż kod na nowo, z poprawkami, z bbcode, bo mimo wszystko komunikat błędu nie odpowiada temu kodowi.
darkdevil21
Aktualny kod

  1. include("constants.php");
  2.  
  3.  
  4. class ConectDB {
  5.  
  6. var $connection;
  7.  
  8. public function __construct() {
  9.  
  10. $this->connection = new mysqli(server, db_u, db_pass, db_na) ;
  11. if (mysqli_connect_errno()) {
  12. echo ("Nawiązanie połacznia zakończyło się niepowodzeniem". mysqli_connect_error());
  13. }
  14. if (!$this->connection->set_charset("utf8")) {
  15.  
  16. }
  17.  
  18. }
  19.  
  20. public function query($query){
  21. return $this->connection->query($query);
  22. }
  23.  
  24. }


  1. Clasa Core
  2.  
  3. include("database.php");
  4.  
  5. class Core {
  6.  
  7. public $database;
  8.  
  9. public function __construct() {
  10. $this->database = new ConectDB();
  11. }
  12.  
  13.  
  14. public function getTable($table){
  15. $this->table = $table;
  16. $q = "SELECT * FROM ".$this->table;
  17. $results = $this->database->query($q);
  18. while ($data = $results->fetch_object()){
  19. echo $data->tresc;
  20. }
  21. }
  22.  
  23. }
  24. $core = new Core;


Teraz w klasie Core wyciaganie danych z bazy działa ale jesli wywyłam funkcję w pliku np index.php to mam błedy
1 błąd
Undefined variable: database in C:\wamp\www\Negocjator\index.php on line 10

2 błąd
Call to a member function getTable() on a non-object in C:\wamp\www\Negocjator\index.php on line 10

index.php


  1. include("baza/core.php");
  2. include("view/pageheader.php");
  3. ?>
  4.  
  5. <div id="middle">
  6. <div id="middle2">
  7. <div id="leftCon">dsffsdfsfsfsdfsdfdsfdsf</div>
  8. <div id="rightCon">
  9. <?php
  10. //wyciagam dane z konkretnej tabeli
  11. $core->getTable("firma");
  12. ?>
  13. </div>
  14. </div>
  15. <div class="clear"></div>
  16. </div>
  17. <?php include("view/pagefooter.php"); ?>


Proszę o wyrozumiałość dopiero zaczynam przygodę z php obietkowym
nospor
ad1) w linii 10 index.php nie odwolujesz się do zmiennej $database, wiec nie wiem jakim cudem masz ten błąd. Moze zamiast database tam w bledzie jest core, co?

ad2) zmienna $core nie jest widoczna na tym etapie. Poczytaj o zasięgu zmiennych
darkdevil21
Problem rozwiązany, dzięki za pomoc.
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.