Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Problem z odwołaniem się do funkcji
Dominator
post 10.06.2017, 18:33:09
Post #1





Grupa: Zarejestrowani
Postów: 565
Pomógł: 15
Dołączył: 11.10.2010

Ostrzeżenie: (20%)
X----


Cześć,
jestem w trakcie przeprojektowania strony, konfiguracji i innych rzeczy i zmagam się z problemem od ponad godziny. A mianowicie mam dwa pliki - DatabaseConnector.php w którym łączę się z bazami danych oraz PlayerPanel.php.
Tak wygląda struktura pierwszego:

  1. class DatabaseConnector
  2. {
  3. public $pdo;
  4. public $pdo2;
  5. public $host = "xxx";
  6. public $port = 1234;
  7. public $username = "xxx";
  8. public $password = "xxx";
  9. public $database = "xxx";
  10. public $database2 = "xxx";
  11.  
  12. public function __construct()
  13. {
  14. $this->connect();
  15. }
  16.  
  17. public function connect()
  18. {
  19. try
  20. {
  21. $this->pdo = new PDO('mysql:host='.$this->host.';dbname='.$this->database.';port='.$this->port, $this->username, $this->password );
  22. $this->pdo2 = new PDO('mysql:host='.$this->host.';dbname='.$this->database2.';port='.$this->port, $this->username, $this->password );
  23. }
  24. catch(PDOException $e)
  25. {
  26. echo 'Połączenie nie mogło zostać utworzone.<br />'.$e->getMessage();
  27. }
  28. }
  29.  
  30. public function __destruct() {
  31. $this->closeConnection();
  32. }
  33.  
  34. public function closeConnection()
  35. {
  36. $this->pdo = null;
  37. $this->pdo2 = null;
  38. }
  39. }
  40.  



PlayerPanel.php

  1. include "DatabaseConnector.php";
  2. class PlayerPanel extends DatabaseConnector
  3. {
  4. public $nick;
  5. public $kills;
  6. public $deaths;
  7. public $kd;
  8. public $guild;
  9.  
  10. public function __construct($id)
  11. {
  12. if($id == null)
  13. {
  14. die("");
  15. exit();
  16. }
  17.  
  18. $this->nick = $id;
  19.  
  20. echo $this->getPlayerInfo($this->nick);
  21. }
  22.  
  23. public function getPlayerKills()
  24. {
  25. return $this->kills;
  26. }
  27.  
  28. public function getPlayerDeaths()
  29. {
  30. return $this->deaths;
  31. }
  32.  
  33. public function getKDRatio()
  34. {
  35. return $this->kd;
  36. }
  37.  
  38. public function getGuild()
  39. {
  40. return $this->guild;
  41. }
  42.  
  43.  
  44. public function getPlayerInfo($tag)
  45. {
  46. $stmt = $this->pdo2 -> prepare("SELECT * FROM `XXXX` WHERE player=:tag");
  47. $stmt -> bindValue(':tag', $tag, PDO::PARAM_STR); // 2
  48. $stmt->execute();
  49.  
  50. $result = $stmt->fetchAll(PDO::FETCH_COLUMN, 0);
  51. return $result;
  52. }
  53.  
  54. public function getPlayerGuild($nick)
  55. {
  56. $stmt = $this->pdo2 -> prepare("SELECT * FROM `XXXX` WHERE player=:tag");
  57. $stmt -> bindValue(':tag', $nick, PDO::PARAM_STR); // 2
  58. $stmt->execute();
  59.  
  60. $results=$stmt->fetchAll(PDO::FETCH_ASSOC);
  61. $json=json_encode($results);
  62. return $json;
  63. }
  64.  
  65.  
  66. }


Chcę sobie wyświetlić statystyki gracza metodą echo $this->getPlayerInfo($this->nick);, ale wygląda, że to wcale nie działa.

Próbowałem różnych metod, cały czas mój php twierdzi, że $this->pdo2 nie istnieje... błąd wygląda następująco: Fatal error: Uncaught Error: Call to a member function prepare() on null in .... 54 (pogrubiłem to w kodzie)

Ten post edytował Dominator 10.06.2017, 18:34:24
Go to the top of the page
+Quote Post
nospor
post 10.06.2017, 18:36:29
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Pomijajac fakt, ze twoje klasy sa do bani, to w klasie PlayerPanel nigdzie nie odpalasz connect() z rodzica to co sie dziwisz ze nia masz polaczenia?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Dominator
post 10.06.2017, 18:43:23
Post #3





Grupa: Zarejestrowani
Postów: 565
Pomógł: 15
Dołączył: 11.10.2010

Ostrzeżenie: (20%)
X----


Cytat(nospor @ 10.06.2017, 19:36:29 ) *
Pomijajac fakt, ze twoje klasy sa do bani, to w klasie PlayerPanel nigdzie nie odpalasz connect() z rodzica to co sie dziwisz ze nia masz polaczenia?


W czym są beznadziejne?
Go to the top of the page
+Quote Post
nospor
post 10.06.2017, 18:46:03
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




A chociazby w tym, obiekt klasy bazodanowej przekazuje sie do innych obiektow a nie dziedziczy sie po tym

Plus cala masa innych rzeczy.

A takich kwiatkow
die("");
exit();
to juz nawet odechciewa sie komentowac wink.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Dominator
post 10.06.2017, 18:52:20
Post #5





Grupa: Zarejestrowani
Postów: 565
Pomógł: 15
Dołączył: 11.10.2010

Ostrzeżenie: (20%)
X----


Cytat(nospor @ 10.06.2017, 19:46:03 ) *
A chociazby w tym, obiekt klasy bazodanowej przekazuje sie do innych obiektow a nie dziedziczy sie po tym

Plus cala masa innych rzeczy.

A takich kwiatkow
die("");
exit();
to juz nawet odechciewa sie komentowac wink.gif


Na siłę próbujesz czepiać się rzeczy, które nie dotyczą tematu. Wspomniałem w pierwszym poście, że jestem w trakcie przeprojektowania, dlatego też owe "kwiatki" zostaną zmodyfikowane, aczkolwiek dziękuję za krytykę.
Po wywołaniu metody connect() w dalszym ciągu nie jestem w stanie wyświetlić informacji z bazy danych, co robię źle?
Go to the top of the page
+Quote Post
nospor
post 10.06.2017, 18:54:46
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Nie czepiam sie na sile. Udzielilem ci odpowiedzi co robisz zle. Przy okazji tylko wspomnialem ze twoj kod jest do bani. To ty to ciagnales dalej nie ja tongue.gif

Zrobiles connect()? Super, to moze pokazesz nam jeszcze jak to zrobiles, bo najwyrazniej nadal zle.

ps:
Cytat
Wspomniałem w pierwszym poście, że jestem w trakcie przeprojektowania

Takie rzeczy jak die i exit nie powinny sie pojawic w zadnej wersji tego kodu. Skoro pytales sie mnie, co jest zle, najwyrazniej nie zdawales sobie z tego nadal sprawy.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Dominator
post 10.06.2017, 19:05:49
Post #7





Grupa: Zarejestrowani
Postów: 565
Pomógł: 15
Dołączył: 11.10.2010

Ostrzeżenie: (20%)
X----


Cytat(nospor @ 10.06.2017, 19:54:46 ) *
Nie czepiam sie na sile. Udzielilem ci odpowiedzi co robisz zle. Przy okazji tylko wspomnialem ze twoj kod jest do bani. To ty to ciagnales dalej nie ja tongue.gif

Zrobiles connect()? Super, to moze pokazesz nam jeszcze jak to zrobiles, bo najwyrazniej nadal zle.

ps:

Takie rzeczy jak die i exit nie powinny sie pojawic w zadnej wersji tego kodu.


Chwilę pomyślałem i wystarczyło dodać parent::__construct(); do klasy PlayerPanel, wygląda to tak:

  1. class PlayerPanel extends DatabaseConnector
  2. {
  3. public $nick;
  4. public $kills;
  5. public $deaths;
  6. public $kd;
  7. public $guild;
  8.  
  9. public function __construct($id)
  10. {
  11. parent::__construct();
  12.  
  13. $this->nick = $id;
  14. $data_info = json_decode($this->getPlayerInfo($this->nick));
  15.  
  16. $this->kills = $data_info[0]->kills;
  17. //...
  18. }
  19. }


Zaczęło działać i mogę kontynuować pracę, bardzo dziękuję za pomoc wink.gif Nie skapnąłem się, że nie wywołuję nigdzie tego.
A tak btw - czytałem trochę o tym całym OOP (niedawno wróciłem do programowania) i trochę nie mogę zrozumieć co w moim kodzie jest nie tak... chodzi o metodę getPlayerInfo, która w jakiś nieprawidłowy sposób pobiera dane? Albo klasa bazodanowa sama w sobie jest błędnie napisana? Byłoby miło gdyby ktoś mnie pokierował co robię źle, nie jestem na tak świetnym poziomie jak zapewne połowa tego forum i cały czas się uczę smile.gif
Pozdrawiam
Go to the top of the page
+Quote Post
nospor
post 10.06.2017, 19:08:42
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Napisalem ci na samym poczatku co jest zle. No dobra, napisalem tylko dwa, jeden z nich byl
Cytat
A chociazby w tym, obiekt klasy bazodanowej przekazuje sie do innych obiektow a nie dziedziczy sie po tym

Poczytaj o wzorcu Dependcy Injection

Bledow jest cala inna masa, ale popraw wpierw jeden.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

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 Wersja Lo-Fi Aktualny czas: 15.06.2025 - 15:53