![]() ![]() |
Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 1 116 Pomógł: 119 Dołączył: 10.05.2005 Skąd: Poznań Ostrzeżenie: (0%)
|
Witam,
Dostałem zlecenie, które polega na napisanie pewnego rodzaju back-officeowej aplikacji służącej do generowania fomularzy na podstawie XML. W pliku XML zapisane mają być tagi, które spowodują pojawienie się na formularzu określonych pól i przycisków w określonych miejscach, a zmiana formatki ma być tylko na podstawie plików XML, bez programowania w PHP. UWAGA! Nie chodzi mi o transformatę XSLT, ponieważ jednym z założeń ma być DODAWANIE PÓL FORMULARZA oraz ich USUWANIE. Na przykład: Mamy dane dotyczące użytkownika: imie, nazwisko, miasto, ulica. Wiadome jest, że aby dodać takie dane do bazy danych należy stworzyć odpowiednią formatkę i plik PHP ją obsługujący. Po jakimś czasie okazuje się, że należy dodać jeszcze pola: nr_telefonu, kod_pocztowy. W normalnych warunkach wymagałoby to zmiany w bazie danych oraz zmianie kodów PHP (a w tym walidacja formularza oraz kod akcji zapisywania danych do bazy) Teraz pytanie: Czy istnieje jakieś rozwiązanie, na którym mógłbym się oprzeć tworząc taką aplikację? Czy może ktoś z Was już kiedyś coś podobnego robił? Proszę o jakiekolwiek wskazówki w jaki sposób najefektywniej utworzyć taki parser - kreator kodu PHP. Pozdrawiam. |
|
|
|
Post
#2
|
|
|
Grupa: Zarejestrowani Postów: 487 Pomógł: 7 Dołączył: 7.01.2004 Skąd: Warszawa Ostrzeżenie: (0%)
|
W twoim przypadku, jeśli idzie o modyfikację struktury najlepszym wyborem będzie DOM. Tagi mapujesz do obiektów a z obiektów renderujesz html.
|
|
|
|
Post
#3
|
|
|
Grupa: Zarejestrowani Postów: 1 116 Pomógł: 119 Dołączył: 10.05.2005 Skąd: Poznań Ostrzeżenie: (0%)
|
Hmm,
ale mam pytanie. Wykorzystać DOM to rozumiem (dobry pomysł), ale jak to zrobić w bazie danych? Dla każdej modyfikacji tworzę nową tabelę? Czy może robię altery? Co z danymi, które byłyby w kolumnach usuwanych? A może jest jakiś sposób na zapisywanie `listy zmian` danej tabeli? Jeśli założę, że za każdym razem, gdy robi się modyfikację będę tworzył nową tabelę to w jaki najwygodniejszy sposób mam zapisywać informację, która tabela jest aktualna? A w jaki sposób się potem dostać do `starych` danych? Wybaczcie ten potok pytań, ale nigdy czegoś podobnego nie robiłem i nie wiem jak się za to zabrać, a nie chcę robić za dużo błędów na samych założeniach. |
|
|
|
Post
#4
|
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 2.12.2007 Ostrzeżenie: (0%)
|
A moze rozbij to na 2 tabele. Tabela wlasciwego wpisu i polaczona z nia tabela pol formularza (id, nazwa, wartosc, czyWymagane itp). Wtedy nie musisz zmieniac struktury bazy danych tylko dodajesz wpis do tabeli pol formularza.
To tylko pomysl - nie wiem czy spelni Twoje oczekiwania ale wydaje mi sie ze to najlatwiejszy sposob aby nie mieszac w strukturze bazy (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Pozdro, Wojtas |
|
|
|
Post
#5
|
|
|
Grupa: Zarejestrowani Postów: 1 116 Pomógł: 119 Dołączył: 10.05.2005 Skąd: Poznań Ostrzeżenie: (0%)
|
zróbmy to na przykładzie...
na przykład mam plik XML, który zawiera informację o użytkowniku:
która generuje generuje mi tablicę users (id, lastname, firstname) ...i teraz ktoś chce zmienić tę tablicę, ponieważ okazało się, że ważne będzie to aby był jeszcze jakiś nick i info o użytkowniku, ale niepotrzebne będzie na przykład lastname, czyli nowy plik XML wygląda tak:
to właśnie nie wiem jak takie informacje "rozbić na dwie tabele", albo jak inaczej do tego dojść, aby system zachowywał się stabilnie. |
|
|
|
Post
#6
|
|
|
Grupa: Zarejestrowani Postów: 13 Pomógł: 1 Dołączył: 15.11.2004 Skąd: Kraków Ostrzeżenie: (0%)
|
Rozbijanie na 2 tabele:
Zakładam, że masz w relacyjnej bazie danych tabele o nazwie "user". W tabeli przechowujesz dane w stałym formacie: np. user_id, nazwisko, imie, e-mail. Tworzysz sobie nową tabelę (zakładam, że masz prawo wykonać polecenie CREATE TABLE), w której możesz tworzyć i usuwać dowolne kolumny. Jedną z nich (z reguły pierwszą) jest user_id, która odwołuje się do klucza głównego tabeli user. Prawdopodobnie z tabeli user korzystają inne moduły Twojego programu lub inne programy. Tabela user nie podlega wtedy modyfikacjom struktury i jest bezpieczna w przypadku błędnego skonstruowania polecenia ALTER TABLE przez skrypt PHP. Oczywiście możesz przechowywać w tej dodatkowej tabeli pola w postaci XML lub tekstu z separatorami, jednak operacje na takiej bazie może wykonywać jedynie aplikacja a nie baza. Można w tego typu bazie przechować dowolne informacje, np. dla kilku userów zapisać: INSERT INTO USER_DATA (user_id, dane_opisowe) VALUES(55, '<NUMER_BUTA>43</NUMER_BUTA>'); Niestety, nie da się wtedy przeszukać takiej bazy pisząc: SELECT user_id FROM USER_DATA WHERE numer_buta=55. Niestety (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) to nie przejdzie. Proponuję, abyś dołożył nową tabelę (ja ją nazwałem USER_DATA) i w niej przechowywał dane o zmiennym formacie. Raczej w grę wchodzi tylko dodawanie kolumn, bez usuwania bo wtedy tracisz dane. Do tego dodatkowe pole tekstowe (typu varchar) na ewentualne dane, które bardzo chcesz przechować a sa na tyle nietypowe, że tworzenie dla nich specjalnej kolumny jest niemozliwe. Jeszcze inne rozwiązanie. Załóż tabelę o nazwie powiedzmy "parametry". create table parametry(user_id int, parametr varchar, wartosc varchar); Będziesz mógł przechowywać dowolną zmienną listę wartości dla każdego użytkownika i operować na niej poleceniami SQL. Najfajniej to działa na bazie Oracle ale na MySQL też się sprawdza. |
|
|
|
Post
#7
|
|
|
Grupa: Zarejestrowani Postów: 1 116 Pomógł: 119 Dołączył: 10.05.2005 Skąd: Poznań Ostrzeżenie: (0%)
|
oki świetnie,
tylko że jeszcze nie wiem jak rozwiązać "usuwanie" kolumn... oczywiście nie bez powodu napisałem to w cudzysłowiach... ... czy dobrym rozwiązaniem byłoby już w samym PHP robić takie jakby maskowanie kolumn, które już są "usunięte"? ... a jeśli tak to w jaki sposób to najlepiej zrobić? |
|
|
|
![]() ![]() |
|
Aktualny czas: 25.12.2025 - 09:27 |