Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> połączenie klas w jeden system, projektowanie aplikacji
Mariner
post
Post #1





Grupa: Zarejestrowani
Postów: 47
Pomógł: 6
Dołączył: 26.12.2006
Skąd: Wrocław

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


Witam .

Chcę stworzyć aplikację która ma pokazywać zawartość dowolnej bazy danych Mysql.
Aplikację można będzie sprzęgnąć z dowolną bazą danych mysql , w trzech krokach
użytkownik poda dane potrzebne do utworzenia połączenia , wybierze nazwę bazy danych , i nazwę interesującej go tableli , aplikacja wyświetli zawartość tabeli w formie tabeli HTML
czyli nazwy poszczególnych pól jako pierwszy wiersz , każdy następny wiersz będzie opowiadał
wartościom tych pól w bazie danych .

mam klasy takie jak :
db -> łączy się z serwerem baz danych , pobiera listę baz i przechowuje w tablicy
indeksowanej , pobiera listę tabel w wybranej przez użytkownika (za pomocą
odpowiedniej metody) danych i przechowuje w tablicy indeksowanej .

db_table-> korzystając z obiektu db , zbiera informacje o wybranej przez użytkownika tabeli ,
czyli liczba wierszy , liczba pól w jednym wierszu , informacje o poszczególnych
polach , typ danych itp , oraz wartości poszczególnych pól .

table -> korzystając z informacji przetrzymywanych w obiekcie db_table , klasa ta drukuje
tablice HTML , w pierszym wierszu drukuje nazwy poszczególnych pól a w następnych
wierszach ich zawartość .


Problem polega na tym że :

- nie wiem jak połączyć te klasy w jeden działający system , czy może utworzyć klasę np.
system która będzie zarządzała obiektami poszczególnych klas i wyświetlała ich zawartość
w odpowiednim momencie ?

- czy dla każdej akcji odbywającej się w systemie ( np. podanie danych potrzebnych połączenia
z bazą) tworzy się odpowiednią klasę ?

- czy tak napisać klasy aby każda działała w każdym kroku czyli logowanie do serwera baz
danych to jedna klasa , wyświetlanie listy dostępnych baz druga klasa , wyświetlanie listy tabel
to następna klasa , i w końcu wyświetlanie tabel z bazy danych to ostatnia klasa .

- jak rozwiązać problem aby nie wpisywać danych potrzebnych do połączenia z serwerem baz
danych z każdym razem kiedy się wrócę i będę chciał zobaczyć dane innej bazy danych
czy rozwiązaniem jest ustanowienie sesji ?

Z góry dziękuję z podpowiedzi .
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
bim2
post
Post #2





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

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


Nie rozumiem do końca o co chodzi. Wnioskuje, że to ma być coś pdobnego do phpmyadmin, że wpisujesz nazwe tabeli i wyświetla ci się tabelka HTML. Nie wiesz jak użyć?

Jeśli nie chcesz przy każdym wywołaniu klasy db, która się łaćzy możesz zdefiniować zmienne w klasie, ale wystarczy chyba 1 połączenie? Robisz 1 połaczenie i dla klasy db_table dajesz np $this->setInstanceDb(new Db); i później cała klasa miałaby z tego korzystać.

Opisz dokładniej co chcesz zrobić? (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Mariner
post
Post #3





Grupa: Zarejestrowani
Postów: 47
Pomógł: 6
Dołączył: 26.12.2006
Skąd: Wrocław

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


Cytat(bim2 @ 24.08.2007, 15:27:14 ) *
Nie rozumiem do końca o co chodzi. Wnioskuje, że to ma być coś pdobnego do phpmyadmin, że wpisujesz nazwe tabeli i wyświetla ci się tabelka HTML. Nie wiesz jak użyć?

Jeśli nie chcesz przy każdym wywołaniu klasy db, która się łaćzy możesz zdefiniować zmienne w klasie, ale wystarczy chyba 1 połączenie? Robisz 1 połaczenie i dla klasy db_table dajesz np $this->setInstanceDb(new Db); i później cała klasa miałaby z tego korzystać.

Opisz dokładniej co chcesz zrobić? (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)


Zgadza się , chcę zrobić aplikację na wzór phpmyadmin z tym że zamiast możliwości edycji danych , jak jest to w phpmyadmin , mi wystarczy przeglądnięcie zawartości w przystępnej formie np. tabeli html .

W phpmyadmin dotarcie do konkretnej tabeli zajmuje trzy kroki ,
- podanie danych do logowania
- wybranie bazy danych
- wybranie tabeli aktualnej bazy danych

Do tego momentu moja aplikacja powinna działać w taki sam sposób , chcę tylko zamiast możliwości edycji , mieć podgląd w zawartość w formie tabeli html .

Reszta jak wyżej , mam trzy klasy ... , jak je teraz ładnie zaimplementować w jeden system ,
chodzi o to że chcę to zrobić tak jak powinno to wyglądać w fachowej aplikacji , nie po swojemu
na " dziko " tylko zgodnie z "duchem obiektów" że się tak wyrażę .
Czyli jak rozwiązał by to doświadczony programista ?
Dziękuję z góry za odpowiedzi i sugestie .
Załączam moje klasy , ZAZNACZAM że jeszcze ich nie dokończyłem i nie będą działały ,
ze szczegółami implementacji poradzę sobie sam , klasy mają tylko pokazać sam zamysł
budowy aplikacji i może rozplanowania klas .

  1. <?php
  2. ////////////////////////////////////////////////////
  3. /**
  4.  * Klasa zbiera informacje o bazie danych 
  5.  * */
  6.  
  7. class db {
  8. /**Przechowuje nazwę hosta */
  9. private $sHost ;
  10.  
  11. /**Przechowuje nazwę użytkownika */
  12. private $sUser ;
  13.  
  14. /**Przechowuje hasło dostępu */
  15. private $sPass ;
  16.  
  17. /**Przechowuje identyfikator połączenia z bazą danych*/
  18. private $rLink ;
  19.  
  20. /**Przechowuje listę dostępnych baz danych */
  21. public $aDbList ;
  22.  
  23. /**Przechowuje listę dostępnych w wybranej bazie tabel */
  24. public $aTableList ;
  25.  
  26. public function __construct($host = null , $user = null , $pass = null) {
  27. $this->sHost = $host ;
  28. $this->sPass = $pass ;
  29. $this->sUser = $user ;
  30.  
  31.  
  32. $this->connect($host,$user,$pass) ;
  33. $this->getDbList() ;
  34. }
  35.  
  36.  
  37. /**Zwraca indentyfikator połączenia */
  38. private function connect() {
  39. $this->rLink = mysql_connect($this->sHost,$this->sUser,$this->sPass) ;
  40. }
  41.  
  42. /**Zwraca listę dostępnych baz danych*/
  43. private function getDbList() {
  44. $rDbList = mysql_list_dbs($this->rLink ) ;
  45. while ($row = mysql_fetch_object($rDbList)) {
  46. $this->aDbList[] = $row->Database ;
  47. } 
  48. }
  49.  
  50. /**Pobiera listę tabel z bazy MySQL*/
  51. public function getTableList ($sDbName) {
  52. if(isset($sDbName)) {
  53. $result = mysql_list_tables($sDbName , $this->rLink);
  54. while($row = mysql_fetch_row($result)) {
  55. $this->aTableList = $row ;
  56. }
  57. }
  58. }
  59. }
  60. ////////////////////////////////////////////////////////////////////////////////////
  61. /**
  62.  * Klasa zbiera informacje o tableli 
  63. */
  64.  
  65. class db_table {
  66.  
  67. /**Liczba wierszy w tablicy */
  68. public $iNumRows ;
  69.  
  70. /**Liczba pól jednym wierszu */
  71. public $iNumFields ;
  72.  
  73. /**Tablica indeksowana zawierająca obiekty z informacjami o polach */
  74. public $aFieldObject ;
  75.  
  76. /**Tablica indeksowana zawierająca wartości poszczególnych pól w zapytaniu*/
  77. public $aFieldValues ;
  78.  
  79. /**Inicjalizuje funkcje i zmienne */
  80. public function __construct(query $rResult) { 
  81. $this->getNumRows($rResult) ;
  82. $this->getNumFields($rResult) ;
  83. $this->getFieldObject($rResult) ;
  84. $this->getFieldValues($rResult) ;
  85. }
  86.  
  87. /**Pobiera liczbę wierszy zwrócownych w zaptyaniu */
  88. public function getNumRows($db) {
  89. $this->numRows = mysql_num_rows($db->result) ;
  90. }
  91.  
  92. /**Pobiera liczbę pól jednego wiersza zwrócownych w zapytaniu */
  93. public function getNumFields($db) {
  94. $numFields = mysql_num_fields($db->result) ;
  95. $allFields = $numFields * $this->numRows ;
  96. $this->numFields = $allFields / $this->numRows ; 
  97. }
  98.  
  99. /**Pobiera dane pól w postaciu obiektu i zapisuje w tablicy */
  100. public function getFieldObject($db) {
  101. for($i = 0 ; $i < $this->numFields ; $i++) {
  102. $this->fieldObject[$i] = mysql_fetch_field($db->result , $i);
  103. }
  104. }
  105.  
  106. /**Pobiera wartości pól do tablicy indeksowanej */
  107. public function getFieldValues($db) { 
  108. for($i = 0 ; $i < $this->numRows ; $i++) {
  109. $this->fieldValues[$i] = mysql_fetch_row($db->result) ;
  110. }
  111. }
  112. }
  113. /////////////////////////////////////////////////////////////////////////////
  114. * Klasa drukuje tablice w HTML 
  115.  */
  116.  
  117. class table {
  118.  
  119. public function __construct($db_table) {
  120. $this->table($db_table);
  121. }
  122.  
  123. /** Drukuje nazwy kolumn na podstawie przekazanego obiektu klasy db_table->fieldObject*/
  124. public function colNames ($db_table) {
  125. print '<tr>' ; 
  126. for($i = 0 ; $i < $db_table->numFields ; $i++) {
  127.  print '<td>' ;
  128.  print $db_table->fieldObject[$i]->name ;
  129.  print '</td>' ;
  130. } 
  131. print '</tr>' ;
  132. }
  133.  
  134. /**Drukuje wiersze zawierające komórki z treścią */
  135. public function colValues($db_table) {
  136. for($i = 0 ; $i < $db_table->numRows ; $i++) {
  137. print '<tr>' ;
  138. for($j = 0 ; $j < $db_table->numFields ; $j++) {
  139. print '<td> ' ;
  140. print $db_table->fieldValues[$i][$j] ;
  141. print '</td>' ;
  142. }
  143. print '</tr>' ;
  144. }
  145. }
  146. /**Drukuje tablice */
  147. public function table($db_table) {
  148. print '<table width= 100%>' ;
  149. $this->colNames($db_table) ;
  150. $this->colValues($db_table) ;
  151. print '</table>' ;
  152. }
  153. }
  154. //////////////////////////////////////////////////////////////////////////////////////
  155. ?>
Go to the top of the page
+Quote Post

Posty w temacie


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: 7.10.2025 - 22:30