Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Forms, API Reflection
Forum PHP.pl > Forum > PHP > Pro > Archiwum Pro
Master Miko
Witam,
To jest mój pierwszy post w php Pro i nie wiem czy pasuje, jeśli nie, to przepraszam moderatorów.

Wiem, że wiele frameworków stosuje "podobne" rozwiązania, lecz ja chce stworzyć ten "systemik" w celach ćwiczebnych i opanowania obiektowości.

Przejdę wieć do właściwej treści:

Zastanawiam się jak połączyć bazę danych, formularze i nie natrudzić się przy tym. Moim zdaniem to bezsensu jest, że za każdym razem robimy oddzielny formularz do każdej tabeli w bazie.

Chce osiągać ten efekt: skrypt tworzy formularz na podstawie tabeli - gdzie zawarte są też elementy walidacji. Ale jest problem. Jeśli zapisze te wszystkie właściwości pól w bazie danych to ją przecież zarżnę! Przy np: rejestracji potrzebne będą 3 połączenia z bazą danych. Jedno z pobraniem właściwości formularzy, drugie w czasie wysyłania i walidacji, trzecie w czasie wysyłania danych rejestracji. Gdzie zapisać te właściwości tabel? Można by zrobić tak, że skrypt cacheuje właściwości tabeli i zapisuje je np. w pliku - ale w jakim formacie najlepiej? SQLite? Zwykłym plikowym?
Potem - po stworzeniu formularza i wysłaniu przez użytkowników - Reflecion ma przechytywać te dane i na podstawie danych walidacji - sprawdzać dane i zapisywać do odpowiedniej tabeli o prawidłowych wartościach. To wiem jak rozwiązać (mam php Solutions tongue.gif)

Jak rozwiązać ten problem przechowywania?

A może użyć jeszcze do tego AJAXa, który by wysyłał dane rejestracji?
Co do walidacji nie chce używać JavaScript bo jakoś zaufania nie mam winksmiley.jpg
LBO
serializuj dane
Master Miko
No dobrze mam te serializowane dane, ale gdzie je trzymać, żeby było wydajnie?
Turgon
Jeśli te dane nie muszą być bezpieczne zwykłe pliki. Jeśli nie, to zabezpieczasz folder .htaccess z plikami .php.
Ociu
Może tak:
  1. <forms>
  2. <form type="text" size="20" name="nazwa" />
  3. <form type="textarea" name="opis" />
  4.  
  5. <validator class="string">
  6. <input name="opis" error="Opis nie jest stringiem" />
  7. <input name="nazwa" error="Nazwa nie jest poprawna">
  8. </validator>
  9.  
  10. </forms>


  1. <?php
  2. class StringValidation extends Validation
  3. {
  4.  
  5. public function validate( $name, $error )
  6. {
  7.  
  8. if( is_empty( $_POST[$name] ) AND !is_string($_POST[$name]) )
  9. {
  10. print $error;
  11. return false;
  12. }
  13. else { return true; }
  14.  
  15. }
  16.  
  17. }
  18. ?>
Master Miko
Rzeczywiście, XML będzie tu chyba najlepszym rozwiązanem smile.gif
Tylko takie pytanie: Jak będzie logiczniej - Najpierw tworzyć tabele i je opisywać w XML czy najpierw stworzyć schemat XML i na jego postawie tworzyć tabele? Chyba to drugie rozwiązanie jest lepsze..?
LBO
Cytat(Master Miko @ 25.12.2006, 21:56:37 ) *
Rzeczywiście, XML będzie tu chyba najlepszym rozwiązanem smile.gif
Tylko takie pytanie: Jak będzie logiczniej - Najpierw tworzyć tabele i je opisywać w XML czy najpierw stworzyć schemat XML i na jego postawie tworzyć tabele? Chyba to drugie rozwiązanie jest lepsze..?

Elastyczność wymagałaby, by ten Wizzard formularzy korzystał już z istniejących tabel. Bo dziwne wydaje mi się, tworzenie tabeli specjalnie pod niego. Poza tym nic nie stoi na przeszkodzie, by opis xml'owy był na tyle dobry, by to działało w obie strony.
Master Miko
Tzn o tworzenie tabel w oparciu o XML chodziło mi o coś takiego, że tworzę sobie z 6 plików XML, w każdym opisuję tabele - właściwości, typy pól itp itd (razem z walidacją) puszam skrypt automatyzujący - który tworzy tabele. A w odwrotną stronę musiałbym się więcej natrudzić.
TABELA->XML - najpierw samemu trzeba stworzyć tabelę, użyć skryptu imortującego właściwości tabeli do xml a potem je opisywać (mogą być wyjątki, specjalne pola itp). Więc tak naprawdę 2 czynności :/

XML->TABELA - wszystkie wyjątki są JUŻ opisane razem z kolumnami tabeli - bez problemowo uruchamia się skrypt i tworzy tabele w bazie danych...
Dandelion
a nie prosciej tak.

1. Tworzysz tabele wraz z polami w bazie danych
2. Klasa generuje formularz np po wpisaniu makeform(tabela) :]


budowe tabeli wyciagac np za pomoca DESCRIBE TABLE
Master Miko
Super... po czym zapycham cały mysql pojawiającymi się non stop describe... przeczytaj mój pierwszy post.
LBO
Hmmm, wybacz, ale kolega napisał, że formularze budowane za pomocą komendy makeform(). Więc zakładam, że docelowo dzieję się to tylko raz, dane są cacheowane i Wizzardstamtąd pobiera już dane o budowie tabel,
Master Miko
Nie wiem... zdanie "Klasa generuje formularz np po wpisaniu makeform(tabela)" zrozumiałem, że za każdym razem robi ten describe... ponieważ "generuje formularz" oznacza generowanie formularza na stronie. Może niech kolega to potwierdzi bądź zaprzeczy smile.gif
LBO
edit:
wróć, żadnej "budowie tabel". Powinna nastąpić kompilacja do wynikowego kodu php/HTML
Master Miko
No ale czy nie ma się większej kontroli gdy cały opis tabeli jest skonstruowany w pliku XML i na jego postawie tworzy się tabelę? Wtedy odrazu wszystko jest skonfigurowane, nie trzeba robić describe'ów?

Chociaż problem może pojawić się w czasie zmianie kolumn ponieważ jak zmienię XML to będzie trzeba wygenerować znowu tabelę... chyba że napisać jakiś super algorytm... a tego chyba nie chce tongue.gif
LBO
A mi się wydaje, że przekombinowujesz. Projekt takiego Wizzarda powinien być łatwo-dołączalny do istniejących już aplikacji. Czyli z gotową bazą danych.
Pomysł z plikami XML wydaje mi się chybiony, w sytuacji gdy tak jak proponujesz miałby być za każdym razem parsowane i generować formularz w locie.
Oczywiście, nie jest to zły pomysł, bo łatwiej na plikach XML działać. Na początek radziłbym Tobie napisać silnik czytający taki XML i parsujący go do gotowych plików formularza, a dopiero potem dodać funkcję tworzenia pliku XML z gotowych tabel w BD.

Cytat
Chociaż problem może pojawić się w czasie zmianie kolumn ponieważ jak zmienię XML to będzie trzeba wygenerować znowu tabelę... chyba że napisać jakiś super algorytm... a tego chyba nie chce tongue.gif


Dlatego zaprojektuj również w jaki sposób taki Wizzard powinien generować kod formularzy, żeby w razie zmiany struktury tabel w Bazie Danych, tylko podmienić odpowiednie pliki, tymi nowo-skompilowanymi.
Master Miko
Ok dzięki! To już wiem jak się za to powoli zabierać smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.