Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MSSQL][PHP]Odzielenie widoku od danych
Nahalem
post 13.07.2010, 07:04:35
Post #1





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 30.06.2010

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


Cześć wam

Jestem początkujący w PHP a tym bardziej w objektowości w tym języku. Mam swoją maą klasę. Mam napisane zmienne i funkcje wyciągającą dane z bazy danych. Mam niesamowity problem z wyświetleniem wszystkich danych na stronie www. Używam sobie takich swoich akcesorów.

  1. class MySQL_class
  2. {
  3. var $nick;
  4. var $passwd;
  5. function Set_nick($nickname)
  6. {
  7. $this->nick = $nickname;
  8. }
  9. function Get_nick()
  10. {
  11. return $this->nick;
  12. }
  13. function Set_password($password)
  14. {
  15. $this->passwd = $password;
  16. }
  17. function Get_password()
  18. {
  19. return $this->passwd;
  20. }
  21.  
  22. // funkcja pobierająca dane
  23. function Display_users()
  24. {
  25. require_once("globals.php");
  26. $this->server = DB_SERVER;
  27. $this->username = DB_USER;
  28. $this->password = DB_PASS;
  29. $this->db_name = DB_NAME;
  30. $this->db_connection = mysql_connect($this->server, $this->username, $this->password) or die("Connection failed. Error: " . mysql_error());
  31. $this->db = mysql_select_db(DB_NAME,$this->db_connection) or die("Database selection failed. Error " . mysql_error());
  32.  
  33. $querry = "SELECT nick, passwd FROM users";
  34. $equal = mysql_query($querry) or die("Error DB querry. Error: " . mysql_error());
  35.  
  36. while($this->row = mysql_fetch_array($equal))
  37. {
  38. $this->nick[] = $this->row['nick'];
  39. $passwd[] = $this->row['passwd'];
  40.  
  41. echo $this->row['nick'].'<br>';
  42. $this->counter++;
  43. }
  44. for ($i = 0; $i < $this->counter; $i++)
  45. {
  46. $this->Set_nick($nick[$i]);
  47. $this->Set_password($passwd[$i]);
  48. return true;
  49. }
  50. return false;
  51. }
  52. }


W jaki sposób mogę na stronie wyświelić wszystkich użytkowników używając tej klasy?questionmark.gif

Ten post edytował Nahalem 13.07.2010, 07:06:32
Go to the top of the page
+Quote Post
Nh2003
post 13.07.2010, 07:35:57
Post #2





Grupa: Zarejestrowani
Postów: 81
Pomógł: 14
Dołączył: 3.10.2007

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


  1. $oObject = new MySQL_class();
  2. $oObject->Display_users();
Go to the top of the page
+Quote Post
Nahalem
post 13.07.2010, 08:07:09
Post #3





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 30.06.2010

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


To jak mam wywołać funkcję to wiem ale mam zwracany tylko ostatni rekord z bazy, potrzebuje zwrócić wszystkie i wyśeitlić w tabelce
Go to the top of the page
+Quote Post
Nh2003
post 13.07.2010, 08:20:59
Post #4





Grupa: Zarejestrowani
Postów: 81
Pomógł: 14
Dołączył: 3.10.2007

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


Najlepiej to zerknąć na to jak przebiega dana metoda...

Display_users() - w teorii przelatuje przez wszyskie rekordy pobrane z bazy, dopisuje je do zmiennej $this->nick[] i przy okazji wyswietla.

Metoda Get_nick() zwraca $this->nick wiec pewnie z niej trzeba by bylo skorzystac.

Sprawdz co wyswietli Ci print_r($oObject->Get_nick());
Go to the top of the page
+Quote Post
Nahalem
post 13.07.2010, 08:25:07
Post #5





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 30.06.2010

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


Tak jak pisałem wyśeitla mi tylko jeden rekord
Go to the top of the page
+Quote Post
Nh2003
post 13.07.2010, 08:27:10
Post #6





Grupa: Zarejestrowani
Postów: 81
Pomógł: 14
Dołączył: 3.10.2007

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


zmodyfikuj

  1. while($this->row = mysql_fetch_array($equal))
  2. {

na
  1. while($this->row = mysql_fetch_array($equal))
  2. {
  3. var_dump($this->row);


Zobaczysz czy wybiera cos wiecej z bazy, moze w zapisywaniu jest gdzies problem. No i najlepiej zerknij do bazy czy masz tam wiecej niz 1 rekord...
Go to the top of the page
+Quote Post
Nahalem
post 13.07.2010, 08:38:53
Post #7





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 30.06.2010

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


echo wewnątrz funkcji wyśeitla mi dane oczywiście, ale tam ustawiłem Set'ery żeby potem za pomocą Get'erów wywołania klasy przez obiekt dane wyświetliły się i to mi się nie udaje.

Wyświetlić chcę w taki sposób:

  1. <?php
  2. echo '<table id="structure">';
  3. echo '<tr>';
  4. echo '<td id="navigation">';
  5. include("navigation-after-login-admin.php");
  6. echo '</td>';
  7. echo '<td id="page">';
  8. echo '<p><h3>Powiadomienie</h3></p>';
  9. echo '<p>';
  10. echo '<div align="left">';
  11. require_once('sql_class.php');
  12. $object = new MySQL_class();
  13. echo $object->Display_users();
  14. echo $object->Get_nick();
  15. echo '</div>';
  16. echo '</p>';
  17. echo '</td>';
  18. echo '</tr>';
  19. echo '</table>';
  20. ?>


Ten post edytował Nahalem 13.07.2010, 08:41:46
Go to the top of the page
+Quote Post
Nh2003
post 13.07.2010, 08:44:16
Post #8





Grupa: Zarejestrowani
Postów: 81
Pomógł: 14
Dołączył: 3.10.2007

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


Pomysl co robi
  1. for ($i = 0; $i < $this->counter; $i++)
  2. {
  3. $this->Set_nick($nick[$i]);
  4. $this->Set_password($passwd[$i]);
  5. return true;
  6. }
  7. return false;


bo na moje to raz przypisuje nick do zmiennej i zwraca true i konczy dzialac.

IMO to powinno wygladac tak:

  1. function Display_users()
  2. {
  3. require_once("globals.php");
  4. $this->server = DB_SERVER;
  5. $this->username = DB_USER;
  6. $this->password = DB_PASS;
  7. $this->db_name = DB_NAME;
  8. $this->db_connection = mysql_connect($this->server, $this->username, $this->password) or die("Connection failed. Error: " . mysql_error());
  9. $this->db = mysql_select_db(DB_NAME,$this->db_connection) or die("Database selection failed. Error " . mysql_error());
  10.  
  11. $querry = "SELECT nick, passwd FROM users";
  12. $equal = mysql_query($querry) or die("Error DB querry. Error: " . mysql_error());
  13. $iI = 0;
  14. while($this->row = mysql_fetch_array($equal))
  15. {
  16.  
  17. $this->nick[$iI] = $this->row['nick'];
  18. $this->passwd[$iI++] = $this->row['passwd'];
  19. //echo $this->row['nick'].'<br>';
  20. $this->counter++;
  21. }
  22. return true;
  23. }


I wtedy Get_nick i powinno byc ok.
Go to the top of the page
+Quote Post
Nahalem
post 13.07.2010, 08:49:26
Post #9





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 30.06.2010

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


zrobiłem tak i nie ma efektu, walcze z tym, czy możesz zobaczyć co jeszcze może być nie tak?

  1. function Display_users()
  2. {
  3. require_once("globals.php");
  4. $this->server = DB_SERVER;
  5. $this->username = DB_USER;
  6. $this->password = DB_PASS;
  7. $this->db_name = DB_NAME;
  8. $this->db_connection = mysql_connect($this->server, $this->username, $this->password) or die("Connection failed. Error: " . mysql_error());
  9. $this->db = mysql_select_db(DB_NAME,$this->db_connection) or die("Database selection failed. Error " . mysql_error());
  10.  
  11. $querry = "SELECT nick, passwd FROM users";
  12. $equal = mysql_query($querry) or die("Error DB querry. Error: " . mysql_error());
  13. $il = 0;
  14. while($this->row = mysql_fetch_array($equal))
  15. {
  16. $this->nick[$il] = $this->row['nick'];
  17. $passwd[$il++] = $this->row['passwd'];
  18.  
  19. //var_dump($this->row);
  20. //echo $this->row['nick'].'<br>';
  21. $this->counter++;
  22.  
  23. }
  24. for ($i = 0; $i < $this->counter; $i++)
  25. {
  26. $this->Set_nick($nick[$i]);
  27. $this->Set_password($passwd[$i]);
  28. return true;
  29.  
  30. }
  31. return false;
  32. }


  1. var_dump($object->Get_nick());
mam NULL

Ten post edytował Nahalem 13.07.2010, 08:56:48
Go to the top of the page
+Quote Post
Nh2003
post 13.07.2010, 09:18:24
Post #10





Grupa: Zarejestrowani
Postów: 81
Pomógł: 14
Dołączył: 3.10.2007

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


Skopiuj to co wyzej Ci napisalem bo przepisales z bledami, nie wywaliles petli ktora moim zdaniem psuje wyniki.
Go to the top of the page
+Quote Post
Nahalem
post 13.07.2010, 09:26:48
Post #11





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 30.06.2010

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


  1. function Display_users()
  2. {
  3. require_once("globals.php");
  4. $this->server = DB_SERVER;
  5. $this->username = DB_USER;
  6. $this->password = DB_PASS;
  7. $this->db_name = DB_NAME;
  8. $this->db_connection = mysql_connect($this->server, $this->username, $this->password) or die("Connection failed. Error: " . mysql_error());
  9. $this->db = mysql_select_db(DB_NAME,$this->db_connection) or die("Database selection failed. Error " . mysql_error());
  10.  
  11. $querry = "SELECT nick, passwd FROM users";
  12. $equal = mysql_query($querry) or die("Error DB querry. Error: " . mysql_error());
  13. $iI = 0;
  14. while($this->row = mysql_fetch_array($equal))
  15. {
  16.  
  17. $this->nick[$iI] = $this->row['nick'];
  18. $this->passwd[$iI++] = $this->row['passwd'];
  19. $this->counter++;
  20. }
  21. return true;
  22. }


wyświetlam

  1. <?php
  2. echo '<table id="structure">';
  3. echo '<tr>';
  4. echo '<td id="navigation">';
  5. include("navigation-after-login-admin.php");
  6. echo '</td>';
  7. echo '<td id="page">';
  8. echo '<p><h3>Powiadomienie</h3></p>';
  9. echo '<p>';
  10. echo '<div align="left">';
  11. echo '<table border="1">';
  12. echo '<th>Użytkownicy</th><th>Hasła</th>';
  13. echo '<tr>';
  14. require_once('sql_class.php');
  15. $object = new MySQL_class();
  16. if($object->Display_users() == true)
  17. {
  18. echo '<td>';
  19. echo $object->Get_nick();
  20. echo '</td>';
  21. }
  22. else
  23. {
  24. echo 'Funkcja nie zwraca nic';
  25. }
  26. echo '</tr>';
  27. echo '</table>';
  28. echo '</div>';
  29. echo '</p>';
  30. echo '</td>';
  31. echo '</tr>';
  32. echo '</table>';
  33. ?>


w wyniku dostaje
Array
nie ma danych wyświetlonych
Go to the top of the page
+Quote Post
Nh2003
post 13.07.2010, 09:31:02
Post #12





Grupa: Zarejestrowani
Postów: 81
Pomógł: 14
Dołączył: 3.10.2007

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


  1. echo $object->Get_nick();


Sprawdz sobie co zwraca w tej tablicy
  1. var_dump($object->Get_nick());


a potem w petli wyswietl odpowiednie dane:
  1. foreach ($object->Get_nick() as $sValue) { echo $sValue; }


Go to the top of the page
+Quote Post
Nahalem
post 13.07.2010, 09:45:49
Post #13





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 30.06.2010

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


To się nazywa mistrzoska cierpliwość dla początkującego ;-). Dzięki bardzo. rozwiałeś mój problem. Fajnie, że mogłem na Ciebie liczyć.
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 Wersja Lo-Fi Aktualny czas: 25.07.2025 - 10:16