Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]i[mysql] Programowanie obiektowe, problem z wyświetleniem rekordów
Forum PHP.pl > Forum > Przedszkole
Danone
Projekt, który wykonuje razem ze znajomymi na studiach wymaga ode mnie, abym przyswoił w dość szybkim czasie programowanie obiektowe:) jednak jak to zawsze bywa przy nauce, napotkałem pewien problem smile.gif

Mam taki skrypt:

  1. <?php
  2.  
  3. class Druga{
  4.  
  5. public $host = "localhost";
  6. public $user = "root";
  7. public $pass = "";
  8.  
  9. public $zapytanie="SELECT * FROM users";
  10. public $baza="dzienniczek";
  11.  
  12. function polaczenie(){
  13.  
  14. mysql_connect("$this->host", "$this->user", "$this->pass") or die ("Nie mozna sie polaczyc");
  15. echo "Polaczenie do: ".$this->host. " udane";
  16. }
  17.  
  18. }
  19.  
  20. function wybierz(){
  21. //echo $this->zapytanie;
  22. $query=mysql_query($this->zapytanie);
  23.  
  24. while($row=mysql_fetch_array($this->query)){
  25. echo $this->row['login'];
  26. }
  27. }
  28.  
  29. }
  30.  
  31.  
  32. $polacz=new Druga;
  33. $polacz->polaczenie();
  34. $wyswietl=new Druga;
  35. $wyswietl->wybierz();
  36.  
  37.  
  38. ?>


W linii 25 otrzymuje, że jest błąd: Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in

Widać, że nie otrzymuje polecenia SQL-owego, jednak jak zrobie echo $this->zapytanie, zapytanie wyświetla mi się, więc nie wiem gdzie jest błąd. Proszę o pomoc:)
UDAT
Przypisujesz w linii 23 wartość do $query a nie do $this->query, innymi słowy ustawioną masz zmienną lokalną, a pobierasz właściwość obiektu.

Zmień $this->query na $query
Danone
Niestety to nie rozwiązało problemu sad.gif A mógłbyś mi wyjaśnić jeśli możesz oczywiście jeszcze jaśniej, różnicę pomiędzy zwykłą zmienną $query a $this->$query. Ja to rozumiem tak, że przez pisanie $this-> wskazuje konkretnie na tą zmienną.
c0cr0ach
Danone, nie rozumiem dlaczego tworzysz jeden obiekt klasy w celu połączenia się z bazą, a potem nagle drugi, żeby coś z niej wydobyć. Wydaje mi się, że łatwiej byłoby operować na jednym obiekcie Twojej klasy. Odwołanie do $this->query to odwołanie do zmiennej, będącej właściwością obiektu klasy. Takiej zmiennej nie masz nigdzie zadeklarowanej. Poniżej jest Twój kod po małym tuningu smile.gif . W każdym razie, inaczej napisałbym tą klasę :roll2: . Staraj się też korzystać ze zmiennych prywatnych i chronionych, gdzie to tylko możliwe. Aha, nigdzie nie wybierałeś tabeli z bazy danych. Poprawione zostało tylko kilka rzeczy. Dalsza koncepcja zależy tylko i wyłącznie od Twojej inwencji.

  1. <?php
  2.  
  3. class Druga{
  4.  
  5. public $host = "localhost";
  6. public $user = "root";
  7. public $pass = "";
  8. public $query_result;
  9. public $connection;
  10.  
  11. public $zapytanie="SELECT * FROM users";
  12. public $baza="Twoja_baza";
  13.  
  14. public function polacz(){
  15.  
  16. $this->connection = mysql_connect("$this->host", "$this->user", "$this->pass") or die ("Nie mozna sie polaczyc");
  17. if(is_resource($this->connection)){
  18. echo "Polaczenie do: ".$this->host. " udane";
  19. }
  20. mysql_select_db($this->baza);
  21.  
  22. }
  23.  
  24. public function wybierz(){
  25. $this->query_result=mysql_query($this->zapytanie);
  26.  
  27. while($row=mysql_fetch_array($this->query_result)){
  28. echo $row['login'];
  29. }
  30. }
  31.  
  32. }
  33.  
  34.  
  35. $obiektDruga=new Druga();
  36. $obiektDruga->polacz();
  37. $obiektDruga->wybierz();
  38.  
  39.  
  40. ?>
Danone
Wcześniej udało mi się to poprawić i jakoś działało, ale widzę, że twój przykład jest bardziej obiektowy niż mój smile.gif

Dzięki za pomoc smile.gif
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.