Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php]i[mysql] Programowanie obiektowe, problem z wyświetleniem rekordów
Danone
post
Post #1





Grupa: Zarejestrowani
Postów: 169
Pomógł: 16
Dołączył: 18.10.2006
Skąd: Olsztyn/Wrocław

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


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:)
Go to the top of the page
+Quote Post
UDAT
post
Post #2





Grupa: Zarejestrowani
Postów: 442
Pomógł: 0
Dołączył: 27.12.2005

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


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
Go to the top of the page
+Quote Post
Danone
post
Post #3





Grupa: Zarejestrowani
Postów: 169
Pomógł: 16
Dołączył: 18.10.2006
Skąd: Olsztyn/Wrocław

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


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ą.

Ten post edytował Danone 25.05.2007, 12:49:33
Go to the top of the page
+Quote Post
c0cr0ach
post
Post #4





Grupa: Zarejestrowani
Postów: 31
Pomógł: 1
Dołączył: 10.12.2006

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


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. ?>


Ten post edytował c0cr0ach 26.05.2007, 00:03:44


--------------------
this world means nothing
Go to the top of the page
+Quote Post
Danone
post
Post #5





Grupa: Zarejestrowani
Postów: 169
Pomógł: 16
Dołączył: 18.10.2006
Skąd: Olsztyn/Wrocław

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


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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 15:33