Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][MYSQL][Smarty] niewyświetla
-k1ilo-
post
Post #1





Goście







Witam mam problem mam klasę
  1. <?php
  2. class news
  3. {
  4. private $Baza;
  5. public function __construct() {
  6. $this->Baza = mysql_connect("localhost", "user", "pass")
  7. or die('connect_error'.mysql_error());
  8. mysql_select_db('dbname')or die('database_error'.mysql_error());
  9. }
  10.  
  11. public function wyswietl($ile) {
  12. $query = 'SELECT id, tytul, tresc, data FROM news ORDER BY id DESC LIMIT 0, "'.$ile.'"';
  13. mysql_query($query);
  14. $aNews = array();
  15. while($r = mysql_fetch_array($query)) {
  16. $aNews[] = $r;
  17. }
  18. return $aNews;
  19. }
  20. }
  21. ?>

i teraz nie potrafię wyświetlić wyników
  1. <?php
  2. require './news.php';
  3.  
  4. $smarty = new blog;
  5.  
  6. $a = new news;
  7. $a -> wyswietl(1);
  8.  
  9. $smarty -> assign('news', $a -> wyswietl());
  10. $smarty -> display('news.tpl');
  11. ?>


Pewnie coś źle robię tylko nie mam już pomysłu co.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 12)
Shili
post
Post #2





Grupa: Zarejestrowani
Postów: 1 085
Pomógł: 231
Dołączył: 12.05.2008

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


Klasa blog dziedziczy po klasie smarty? Zmieniłeś nazwę domyślnej klasie smarty?
Wyświetlają się może jakieś błędy?

Jeśli nie, to uważaj jaki obiekt inicjujesz i również napisz czy wyświetlają się błędy. Zamiast zainicjować obiekt Smarty zanicjowałeś obiekt blog i za jego pomocą próbujesz coś wyświetlić na ekranie. Prawdopodobnie powinno wyglądać to tak:

  1. <?php
  2. $smarty = new Smarty();
  3. ?>


Ten post edytował Shili 14.08.2008, 09:04:25
Go to the top of the page
+Quote Post
-k1ilo-
post
Post #3





Goście







klasa blog dziedziczy po smarty i w niej ustawiam debug itd...
kiedy robie

  1. <?php
  2. $a = new news;
  3. $smarty -> assign('wNews', $a -> wyswietl(1));
  4. ?>


otrzymuje błąd
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in news.php on line 32

a z okna debug smarty wiem iż na pewno tablica $wNews nic nie zawiera.
Go to the top of the page
+Quote Post
nospor
post
Post #4





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




nie:
  1. <?php
  2. $query = 'SELECT id, tytul, tresc, data FROM news ORDER BY id DESC LIMIT 0, "'.$ile.'"';
  3. ?>

a:
  1. <?php
  2. $query = 'SELECT id, tytul, tresc, data FROM news ORDER BY id DESC LIMIT 0, '.$ile.'';
  3. ?>


Dodatkowo na przyszlosc sprawdzaj jaki masz blad zapytania:
http://nospor.pl/php-faq-n29.html#faq-6
Go to the top of the page
+Quote Post
-k1ilo-
post
Post #5





Goście







  1. <?php
  2. public function wyswietl($ile) {
  3. $query = 'SELECT id, tytul, tresc, data FROM news ORDER BY id DESC LIMIT 0, '.$ile.'';
  4. $this->Baza = mysql_query($query);
  5. $aNews = array();
  6. * while($r = mysql_fetch_array($query)) {
  7. $aNews[] = $r;
  8. }
  9. print_r ($aNews);
  10. return $aNews;
  11. }
  12. ?>

nadal Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource news.php

linia z * wskazana jest przez parser
chciałem sprawdzić czy ta tablica naprawdę nic nie zawiera wiec zrobiłem
print_r ($aNews);
i dostaje tylko Array();
Go to the top of the page
+Quote Post
nospor
post
Post #6





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




ale czemu robisz: $this->Baza = mysql_query($query);
ma byc: $query = mysql_query($query); tak jak do tej pory (hehe, w zasadzie do tej pory tez tak nie miales. Wiec ma tak byc jak teraz ci napisalem)
Go to the top of the page
+Quote Post
Shili
post
Post #7





Grupa: Zarejestrowani
Postów: 1 085
Pomógł: 231
Dołączył: 12.05.2008

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


Skorzystałeś z podpowiedzi nospora?

Poza tym nie
  1. <?php
  2. $this->Baza = mysql_query($query);
  3. $aNews = array();
  4. while($r = mysql_fetch_array($query)) {
  5. $aNews[] = $r;
  6. }
  7. ?>

Do fetch array nie wciskasz zapytania, tylko wynik zapytania. Wynik, który masz w $this->Baza.
Go to the top of the page
+Quote Post
nospor
post
Post #8





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




@Shili to podajmy juz caly kod bo po naszych odpowiedziach sie zamota (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

  1. <?php
  2. public function wyswietl($ile) {
  3. $query = 'SELECT id, tytul, tresc, data FROM news ORDER BY id DESC LIMIT '.$ile;
  4. $res = mysql_query($query) or die('Zapytanie: '.$query.' --- błąd: '.mysql_error());
  5. $aNews = array();
  6. while($r = mysql_fetch_array($res)) {
  7. $aNews[] = $r;
  8. }
  9. print_r ($aNews);
  10. return $aNews;
  11. }
  12. ?>
Go to the top of the page
+Quote Post
-k1ilo-
post
Post #9





Goście







dobra udało się rzeczywiście cały czas plułem do fetch'a zapytanie
dzięki za pomoc.
Go to the top of the page
+Quote Post
Shili
post
Post #10





Grupa: Zarejestrowani
Postów: 1 085
Pomógł: 231
Dołączył: 12.05.2008

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


Oczywiście, ja w takim razie jeszcze pozwolę sobie na drobną optymalizację (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
  1. <?php
  2. public function wyswietl($ile) {
  3. $query = 'SELECT id, tytul, tresc, data FROM news ORDER BY id DESC LIMIT '.$ile;
  4. $res = mysql_query($query) or die('Zapytanie: '.$query.' --- błąd: '.mysql_error());
  5. $aNews = array();
  6. while($aNews[] = mysql_fetch_array($res));
  7. print_r ($aNews);
  8. return $aNews;
  9. }
  10. ?>


Ten post edytował Shili 14.08.2008, 10:45:12
Go to the top of the page
+Quote Post
nospor
post
Post #11





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




ooo, Shili za ten jęzor to ci dowale:

Twoja optymalizacja wrzuca jako ostatni element tablicy false. Srednio mily wynik. Pozatym mam pewne obawy czy wlasnie nie zrobilas never ending loop (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

edit: tak, juz mam pewnosc, wlasnie zrobilas never ending loop
I jeszcze jeden jęzorek na koniec (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
Shili
post
Post #12





Grupa: Zarejestrowani
Postów: 1 085
Pomógł: 231
Dołączył: 12.05.2008

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


Neverending raczej nie. Po tym false już się powinno zatrzymać.
Teoretycznie nie powinno być tego jednego (z doświadczenia z innymi językami z tego co pamiętam), jednakże jeśli jest, to przepraszam za wprowadzanie w błąd. Zapamiętam sobie przynajmniej (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Zawsze można dodać array_pop($aNews), ale nie wiem czy jest sens przy tak drobnych danych ^^

@edit
Zmieniłam kawałek swojej klasy dla testu
  1. <?php
  2. public function select($query)
  3. {
  4. $result = $this->query($query);
  5. $row = array();
  6. while($row[] = mysql_fetch_assoc($result));
  7. array_pop($row);
  8. return $row;
  9. }
  10. ?>

Pętla się kończy, wywala mi wszystkie wyniki.
Błędy: E_ALL | E_STRICT, PHP 5coś tam.

@down
Faktycznie, jakby nie patrzeć powinieneś mieć rację.
Ciekawe czemu u mnie to cudo działa jak powinno o_0

Ten post edytował Shili 14.08.2008, 10:58:10
Go to the top of the page
+Quote Post
nospor
post
Post #13





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




Cytat
Neverending na pewno nie
Jak juz pisalem: napewno tak (do czasu skonczenia sie czasu na skrypt )
Przeciez w while sprawdzasz calą tablice a nie jej ostatni element. Sprawdź sobie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

polecam prosty test:
  1. <?php
  2. $ar = array('aa');
  3. while ($ar[] = false){
  4. echo 'uppps, petelka';
  5. }
  6. echo 'koniec';
  7. ?>


edit: hmmm.... i mi zaczelo dzialac po Twojemu :/ co jest... chyba mi sie apacha przepalil (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
w takim razie zwracam honor (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

edit2:
Cytat
@down
Faktycznie, jakby nie patrzeć powinieneś mieć rację.
Ciekawe czemu u mnie to cudo działa jak powinno o_0
Nie, nie. Jednak ty masz racje jak napisalem w edicie wyżej.
$ar[] = false
zwraca ostatni element a nie całą tablicę.
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: 28.12.2025 - 03:06