Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Utknąłem na obsłudze baz danych
Forti
post
Post #1





Grupa: Zarejestrowani
Postów: 655
Pomógł: 73
Dołączył: 2.05.2014

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


Witam

Od pewnego czasu samodzielnie ucze się php, napisałem pewną obszerną strone strukturalnie - działa fajnie ale straszny bałagan w kodzie.. Teraz zaczałem uczyć się oop i mvc, przeczytałem mase teorii, staram się przeglądać przykłady (skrypty phpbb3 czy smf to jakaś porażka z kodu dla mnie..) i poległem na prostych rzeczach, tak prostych, że aż zły jestem ^^ od wczoraj szukam rozwiązania i nie bardzo wiem w co uderzyć..

kod pliku models/config.class.php

  1. <?php
  2. if(!defined("access"))
  3. {
  4. include("errors/access.html");
  5. exit();
  6. }
  7. /**
  8. *
  9. * połączenie z bazą danych
  10. *
  11. */
  12. try
  13. {
  14. $baza = new PDO('mysql:host=localhost;dbname=forti_arturs;charset=utf8', 'forti', 'Schroeder78');
  15. }
  16. catch(PDOException $e)
  17. {
  18. echo 'Połączenie nie mogło zostać utworzone: ' . $e->getMessage();
  19. }
  20.  
  21.  
  22. class config {
  23.  
  24. public function load_config($tabela) {
  25. global $baza;
  26.  
  27. try
  28. {
  29. $cms_config_request = $baza->query("SELECT * FROM '$tabela'");
  30. $this -> $cms_config = $cms_config_request->fetch();
  31. return $this -> $cms_config;
  32. }
  33. catch(Exception $exception)
  34. {
  35. echo 'Nie można pobrać danych z bazy '.$tabela.' '.$exception ->getMessage().'';
  36. }
  37. }
  38. }
  39. ?>



i mam problem w klasie config.. wiem że load_config jest kompletnie źle napisane..

wywołanie tego w pliku index.php (później przeniosę to do kontrolera):

  1. <?php
  2.  
  3. define("access", true);
  4.  
  5. require_once("models/config.class.php");
  6.  
  7. /**
  8. *
  9. * ładujemy domyślny styl strony
  10. *
  11. */
  12. $cms_config = config::load_config(cms_config);
  13.  
  14.  
  15. include("views/{$cms_config["cms_style"]}/index.php");
  16.  
  17. ?>



wiem, że config::load_config i klasa config wogóle ze sobą nie współgrają i że całość tego to jakiś kompletny bajzel nad którym część z was się uśmieje (IMG:style_emoticons/default/wink.gif)

Co chce osiągnąć: zwrócić tabele cms_config w postaci oczywiście tablicy.

siedzę nad tym od dłuższej chwili i jedyne co potrafie zrobić to pobieranie tej tabeli wyciągnąć poza klase.. -,-



edit:
serwer zwraca mi błąd:
Fatal error: Call to a member function fetch() on a non-object in /home/forti/domains/arturs.pl/public_html/models/config.class.php on line 30

wiem co on oznacza ale nie mam pojęcia jak to rozgryść inaczej.

Ten post edytował Forti 9.09.2014, 10:30:38
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
Turson
post
Post #2





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


SELECT * FROM '$tabela'
pomyliłeś ' z `

btw. używanie global dla uzyskania połączenia z bazą, to zło. Model powinien dziedziczyć klasę do połączenia z db, albo napisz statyczną metodę to wzięcia obiektu pdo, np. Db::get()

Ten post edytował Turson 9.09.2014, 10:34:20
Go to the top of the page
+Quote Post
nospor
post
Post #3





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




Robisz straszmie duzo bledow. Polecam ci zapoznanie się z tym linkiem
Temat: Jak poprawnie zada pytanie
masz tam całą masę pożytecznych wskazówek, w tym i wyswietlanie blędów php oraz bazy.

ps: zamiast brać się za obiektówkę warto by się wpierw podszkolić trochę jeszcze bardziej z podstaw.

ps2: przenosze
Go to the top of the page
+Quote Post
Forti
post
Post #4





Grupa: Zarejestrowani
Postów: 655
Pomógł: 73
Dołączył: 2.05.2014

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


Wiem o tym, nospor. Z tym linkiem już dawno się zapoznałem, racja jedynie że zły dział, mój błąd. Pisząc strukturalnie, ucząc się składni itp. (` zamiast ', = zamiast == itp. błędy) będę stać w miejscu. Wole rzucić się w końcu na głęboko wode, mam sporop skryptów napisanych w mvc, oop bez mvc, jednak nie znalazłem tam informacji na ten temat (lub nie patrze dokładnie).

Turson dziękuje za pomoc.


Zrobiłem to tak:

  1. class config {
  2.  
  3. private static $_cms_config = array();
  4.  
  5.  
  6. public function load_config($tabela) {
  7. global $baza;
  8.  
  9. try
  10. {
  11. $cms_config_request = $baza->query("SELECT * FROM `$tabela`");
  12. self::$_cms_config = $cms_config_request->fetch();
  13. return self::$_cms_config;
  14. }
  15. catch(Exception $exception)
  16. {
  17. echo 'Nie można pobrać danych z bazy '.$tabela.' '.$exception ->getMessage().'';
  18. }
  19. }
  20. }


  1. $cms_config = config::load_config('cms_config');
  2.  
  3. include("views/{$cms_config["cms_style"]}/index.php");


Co do global to wiem.. ale nie bardzo rozumiem jeszcze jak to inaczej rozwiązać. Cały czas więcej czytam / szukam / analizuje niż piszę.
Go to the top of the page
+Quote Post
Turson
post
Post #5





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


Co do bazy, to np. stwórz klasę DbConnection ze statyczną metodą get, która zwraca obiekt pdo.
Jak piszesz ze wzorcem MVC, to model powinien dziedziczyć główny model, a ten klasę bazodanową.

@down
Przecinki w złych, miejscach (IMG:style_emoticons/default/tongue.gif)

Ten post edytował Turson 9.09.2014, 11:21:33
Go to the top of the page
+Quote Post
nospor
post
Post #6





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




Skoro uzywasz wyjatkow, do lapania bledow PDO, to ustaw w PDO by PDO rzucalo wyjatkami w czasie bledow. Teraz tego nie robisz, i bledy bazy ci nie lecą.

@Turson czemu model ma dziedziczyc po klasie bazy? Model powinien a i owszem, korzystac z obiektu bazy, ale nie powinien z niego dziedziczyc.
Go to the top of the page
+Quote Post
Turson
post
Post #7





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


Jeżeli mówimy o dziedziczeniu w strukturze JakiśModel -> GłownyModel -> KlasaDb, to dziedziczymy KlasaDb, żeby mieć dostęp do obiektu bazy w JakiśModel.
No dobra, nie musi, wystarczy, że GłównyModel ma metodę zwracającą obiekt. Git.
Go to the top of the page
+Quote Post
nospor
post
Post #8





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




No i teraz sobie wyobraz, ze klasa bazy zawsze w konstruktorze generuje połączenie do bazy.
Odpalasz 5 modeli w czasie jednego żądania a przez co odpalasz 5 połączen do bazy. NIe ma to zadnego sensu.

Klasa bazy to klasa bazy. Model moze miec dostep do metod klasy bazy poprzez posiadanie jej obiektu. To wystarczy.
Go to the top of the page
+Quote Post
Turson
post
Post #9





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


Nieee, nie mówię, że konstruktor ma zawsze zwracać nowy obiekt, a ma działać na zasadzie sigletona, jeżeli nie ma obiektu - tworzy nowy.
Suma sumarum, zgodziliśmy się co do jednego.
Go to the top of the page
+Quote Post
pyro
post
Post #10





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

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


Cytat(nospor @ 9.09.2014, 12:27:24 ) *
Klasa bazy to klasa bazy. Model moze miec dostep do metod klasy bazy poprzez posiadanie jej obiektu. To wystarczy.


Należałoby najpierw zacząć od tego, że model nie powinien w ogóle mieć dostępu do obiektu bazy danych, jej klasy, ani tym bardziej jej dziedziczyć.
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: 15.09.2025 - 06:50