Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL][Smarty] niewyświetla
Forum PHP.pl > Forum > Przedszkole
k1ilo
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.
Shili
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. ?>
k1ilo
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.
nospor
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
k1ilo
  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();
nospor
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)
Shili
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.
nospor
@Shili to podajmy juz caly kod bo po naszych odpowiedziach sie zamota 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. ?>
k1ilo
dobra udało się rzeczywiście cały czas plułem do fetch'a zapytanie
dzięki za pomoc.
Shili
Oczywiście, ja w takim razie jeszcze pozwolę sobie na drobną optymalizację 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. ?>
nospor
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 tongue.gif

edit: tak, juz mam pewnosc, wlasnie zrobilas never ending loop
I jeszcze jeden jęzorek na koniec tongue.gif
Shili
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 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
nospor
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 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 winksmiley.jpg
w takim razie zwracam honor 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ę.
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.