![]() |
![]() ![]() |
![]() |
![]()
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 . |
|
|
![]()
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ć? ![]() -------------------- |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 47 Pomógł: 6 Dołączył: 26.12.2006 Skąd: Wrocław 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ć? ![]() 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 .
|
|
|
![]() ![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 1 873 Pomógł: 152 Dołączył: 9.04.2006 Skąd: Berlin Ostrzeżenie: (0%) ![]() ![]() |
Ja bym to zrobił tak, że klasa db, ma sie tylko łączyć z bazą danych i obsługiwać zapytania. Taka nakładka na funkcję mysql_(). Zaś klasa DbTable ma obsługiwać tabele z bazy danych.
Więc mamy 3 klasy: - Db - DbTable - DbToHtml I robimy tak:
Tak mniej więcej powinno to wyglądać (moim zdaniem). Jak ktoś ma lepsze pomysły napiszcie ![]() PS. Sorry, że długo nie odpowiadałem ale weekend był ;] Ten post edytował bim2 26.08.2007, 20:32:36 -------------------- |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 47 Pomógł: 6 Dołączył: 26.12.2006 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Dzięki za uwagę .
Poszperałem trochę i znalazłem coś takiego jak wzorce projektowe a dokładniej wzorzec MVC . Przyjrzałem się jego przykładowej implementacji i myślę że mógłbym go zastosować w swojej aplikacji , dobrze myślę ? Czy architektura w stylu MVC nadaje się do tego typu aplikacji ? |
|
|
![]() ![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 1 873 Pomógł: 152 Dołączył: 9.04.2006 Skąd: Berlin Ostrzeżenie: (0%) ![]() ![]() |
jak najbardziej.
Może powiem o niej conieco, żeby nie było później pytań. Najgorsze będzie stworzenie porządnego kontrollera, który to wszystko obsłuży... Przedstawie Ci jednak tylko ogólny zarys. Masz akcję: class Action_Index extends Application_Action { public function default() { $this->getModel('Index', 'getDatabases'); $this->getView('Index', 'showDatabases'); } } W klasie Application_Action znajdują się metody getModel() i getView(). W modelu pobierasz dane (musi byc extends Application_Model) i zapisujesz do zmiennej np. $thia->aParametrs['databases'] = array(); (aby sobie uławić możes stworzyć metody __set i __get) w widoku odczytujesz te wartosci i wywolujesz thema. -------------------- |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 793 Pomógł: 32 Dołączył: 23.11.2006 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
@bim2
nie rozpowszechniaj swojej implementacji tak wszędzie, bo osobiście uważam że albo coś mi umyka z jej działania, albo nie jest ona dobra. O MVC jest wiele artykułów w tym i na php.pl, poczytaj (choć właśnie na php.pl jest nie wiem czemu wprowadzona zależność modelu od widoku) -------------------- Algorytmy w PHP, czy ktoś o tym słyszał?
Dlaczego tak mało kobiet programuje? ponieważ nie zajmują się głupotami. |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 1 873 Pomógł: 152 Dołączył: 9.04.2006 Skąd: Berlin Ostrzeżenie: (0%) ![]() ![]() |
@Sedziwoj
Nie chce jej rozpowszechniać, ale jeżeli nikt tu się nie wpisał, opisałem mój pomysł. Czytałem artykuł na php.pl, tematy w archiwum pro itd. Później przejrzałem Rapide Framework i z niego zaczerpnołem wiedzy. Jak możesz,powiedz co jej źle z moją implementacją? Kontroller łączy akcje, modele i widoki. Akcja dba co ma zostać pobrane i jak wyświetlone (czyt. wywołuje modele i widoki). Dane z modelu do widoku są przekazywane poprzez subkontroller (Application_Action, Application_Model, Application_View) które zapisują dane w aParametrs kontrollera i wtedy każdy model/widok ma dostęp do tych samych danych. Poszedłem jeszcze dalej i zapisuje co uruchomiło co i nigdy model nie uruchomi się 2 razy (moża wymusić włączenie). Dla mnie jest to wygodne, aczkolwiek jeśli mówisz, że jest w tym coś nie tak to poprzeglądam inne FW. Mówiłem to ja BIM. -------------------- |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 12.06.2025 - 12:52 |