Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Klasa newsów
LeNy
post
Post #1





Grupa: Zarejestrowani
Postów: 102
Pomógł: 4
Dołączył: 17.01.2009

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


Witam. Tworzę właśnie klasę do newsów, lecz nie wiem jak zrobić aby wyświetlały się wszystkie dostępne newsy w bazie Mysql.
Czytałem dużo poradników, lecz nie znalazłem interesującej mnie odpowiedzi.
Aktualnie mój kod wygląda tak:
  1. class printNews
  2. {
  3. public function __construct()
  4. {
  5. $news_query = $mysql->query("SELECT * FROM `News`");
  6. return $news_query->fetch_assoc();
  7. }
  8. }
  9.  
  10. $newsy = new printNews;
  11. var_dump($newsy);


Proszę o pomoc (IMG:style_emoticons/default/sadsmiley02.gif)

Ten post edytował LeNy 24.03.2012, 21:28:21
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
mrWodoo
post
Post #2





Grupa: Zarejestrowani
Postów: 160
Pomógł: 6
Dołączył: 13.01.2012
Skąd: Bytom

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


nie ma zmiennej $mysql zdeklarowanej w obrębie klasy, więc to pewnie jest zmienna zewn. czyli musisz zrobić
  1. global $mysql;

Zadajesz nieprecyzjne pytania.
Jeśli faktycznie pytasz o
Cytat
jak zrobić aby wyświetlały się wszystkie dostępne newsy w bazie Mysql.

to polecam poczytać więcej artykułów
Go to the top of the page
+Quote Post
LeNy
post
Post #3





Grupa: Zarejestrowani
Postów: 102
Pomógł: 4
Dołączył: 17.01.2009

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


Dzięki wielkie, mrWodoo zapomniałem o global

Odnalazłem pewien poradnik, trochę mnie naprowadził.
  1. public function __construct()
  2. {
  3. global $mysql;
  4. $news_query = $mysql->query("SELECT * FROM `News`");
  5. $returned = array();
  6. while ($row = $news_query->fetch_assoc())
  7. {
  8. $mx = array();
  9. foreach ($row as $key => $val)
  10. {
  11. $mx[$key] = $val;
  12. }
  13. $returned[] = $mx;
  14. }
  15. return $returned;
  16. }


Dlaczego podczas użycia funkcji foreach nic mi się nie wyświetla:
  1. $news = new printNews;
  2. foreach($news as $var)
  3. {
  4. echo $var['UID'];
  5. }
Go to the top of the page
+Quote Post
mortus
post
Post #4





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


Zapomnij o słowie global. W OOP takie sytuacje rozwiązuje się za pomocą np. DI (Dependency Injection, wstrzykiwania zależności). W tym przypadku obiekt $mysql odpowiedzialny za obsługę połączenia z bazą danych powinieneś przekazać jako argument konstruktora. Skoro klasa ma reprezentować nowinki, to niech się tak właśnie nazywa, nazwa printNews nadaje się bardziej dla odpowiedniej metody, która te news-y wyświetla. Swoją drogą tym już klasa News nie powinna się zajmować. Przykład:
  1. class News {
  2. private $_db = null;
  3. public function __construct($db) {
  4. $this->_db = $db;
  5. }
  6. public function fetchAll() {
  7. $results = $this->_db->query("SELECT * FROM `News`");
  8. while($row = $results->fetch_assoc()) {
  9. $news[] = $row;
  10. }
  11. return $news;
  12. }
  13. }
  14.  
  15. $news = new News($mysql);
  16. foreach($news->fetchAll() as $data) {
  17. echo $data['UID'];
  18. // ...
  19. }


Chyba trochę przedobrzyłeś.

Ten post edytował mortus 24.03.2012, 22:32:41
Go to the top of the page
+Quote Post
solr
post
Post #5





Grupa: Zarejestrowani
Postów: 43
Pomógł: 8
Dołączył: 11.08.2010

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


Kluczami w $var są nazwy pól z tabeli News w bazie danych.
Go to the top of the page
+Quote Post
LeNy
post
Post #6





Grupa: Zarejestrowani
Postów: 102
Pomógł: 4
Dołączył: 17.01.2009

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


Mortus, dzięki wielgachne. Dzięki Tobie zrozumiałem o co chodzi dokładnie z tymi class'ami, jak je budować (IMG:style_emoticons/default/smile.gif)
Za dużo kombinowałem, jak zwykle (IMG:style_emoticons/default/wstydnis.gif)

Jeszcze raz dzięki wielkie (IMG:style_emoticons/default/specool.gif)

Ten post edytował LeNy 24.03.2012, 22:38:11
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: 22.08.2025 - 16:35