Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> walidacja formularzy
rzseattle
post 1.07.2004, 22:49:22
Post #1





Grupa: Przyjaciele php.pl
Postów: 554
Pomógł: 0
Dołączył: 4.04.2002
Skąd: Tychy

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


Jestem bardzo ciekawy czy tos wykorzysuje w swoich systemach zaawansowane systemy walidacji fomularzy. Moze by jego koncepcja cos zminila w mojej bo akurat jestem w sferze projektowania takiego modulu. Glownym jego zadaniem jest pozbyci sie z akcji wszelkiego typu if(empty($var)) itd . Akcja powinna byc elastyczna a kazda dodatkowa linijka kodu pomniejsza ta ceche. Juz pozbylem sie z akcji wywolywania szablonow (user sam decydyje uruchamiajac akcje jaki szablon zostanie uruchomiony po jej wykonaniu) teraz przyszedl czas na walidacje potrzebnych danych. Obecnie tymczasowo rozwiazalem to na zasadzie rejestracji akcji wejsciowej validacyjnej. CZyli jesli dane przesylane formularzem posiadaja dopowiednia predefiniowana zmienna to system uruchamia akcje walidacyjna ktora decyduje czy przeposcic dane do akcji logicznej czy przekierowac je na formularz z odpowiednimi komunikaami bledu. Zmina taka ma mniej wiecej taka postac
  1. <INPUT name="arrow_validate_form" type="hidden"
  2. value="
  3. arrow_template_foward:iH/admin/categories/show_categories
  4. |arrow_template_back:iH/admin/banners/add_banner
  5. |arrow_action_redirect:categories:add_category_element
  6. |name:text:5-20
  7. |baner_alt:text:0-40
  8. |baner_url:text:7-100
  9. |email:mail" >

Gdzie na pozatku mamy szablony wywolane w przypadku powodzenia i niepowodzenia walidacji i akcje ktora zostanie wykonana w przypadku raku bledu. Dalej sa juz pola i opisy danych jakie maja zawierac.
Jednak ten system nie jest idealny. Tzn dziala znakomicie jednak pisanie formularzy staje sie po pewnym czasie problemem poniewaz kazde pole wyglada mniej wiecej tak:
  1. <INPUT class="pole" style="WIDTH: 200px" type=input name="name" value="{if isset($_global_page_input.name)}{$_global_page_input.name}{/if}">
  2. {if isset($_global_arrow_error.name)}<br /> Podaj nazwę{/if} </TD></TR>


i moze przy jednym polu to sie wydawac lajtowe ale uwierzcie mi przy formach z 15 - 20 polami nie jest juz tak fajnie. Druga wada jest brak wsparcia dla js.

Wiec sobie pomyslalem ze przeciez mozna generowac formularze. I nie chodzi mi tu o biblioteki w php tzn nie o obiekty z metodami ->createInput. Raczej wykorzystal bym tutaj mozliwosci SMARTEGO i generowac formularze w oparciu o dane z szablonu. Mniej wecej cos takiego
Kod
{form tpl_foward="jakis szablon" action="jakas akcja" jsCheck=TRUE }
{input type="text" name="name" style="jakis styl np wielkosc" check=TRUE size="5-30"}
{input type="text" name="kod_pocztowy" style="jakis styl np wielkosc" check=TRUE preg="/[0-9]{2}-[0-9]{3}/"}
{input type="mail" name="email" style="jakis styl np wielkosc" check=TRUE }
{/form}


No i zostal by wygenerowany tym sposobem nie tylko szablon z odpowednimi polami i warunkami wstawiajacymi odpowiednie wartosci pola lub wywalajacymi komunikat bledu ale rowniez skrypt jsrealizujacy identyczne zadanie tylko ze clientSide.

Moze ktos juz robil podaoba rzecz? Chetnie poslucham rad smile.gif

ps To jest rozwiazanie userfriendly - niestety wiem ze do BARDZO bezpiecznych nie nalezy i jesli nam zalezy na bezpieczenstwie to w akcjach trzeba walic if(isset ...


--------------------
"Real children don't go hoppity-skip unless they are on drugs."
Go to the top of the page
+Quote Post
Holyboy
post 2.07.2004, 01:25:07
Post #2





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 30.01.2004
Skąd: Kraków, Częstochowa

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


kiedys znalazlem taki plugin do smartow (ale jak sie nazywal nie pamietam) - wada force_compile=1
Go to the top of the page
+Quote Post
rzseattle
post 2.07.2004, 11:46:09
Post #3





Grupa: Przyjaciele php.pl
Postów: 554
Pomógł: 0
Dołączył: 4.04.2002
Skąd: Tychy

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


Ano rzeczywiście ktoś już o tym pomyślał i to nie kto inny jak jeden z twórców smarty. Jeszcze nie testowałem tego pluginu ale zapowiada sie interesująco. I nicgdzie nie znalazlem informacji ze wymagane jest force_compile smile.gif. Po przetestowaniu postaram się przedsawić moje zdanie o tej wtyczce.

ps dla zainteresowanych http://www.phpinsider.com/php/code/SmartyValidate/


--------------------
"Real children don't go hoppity-skip unless they are on drugs."
Go to the top of the page
+Quote Post
seaquest
post 2.07.2004, 13:18:55
Post #4





Grupa: Przyjaciele php.pl
Postów: 790
Pomógł: 7
Dołączył: 6.02.2003
Skąd: Polska

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


No cóż. Rozwiązanie bardzo ciekawe, szczególnie, że zaimpletowane w szablonach (nie trzeba dopisywać zbędnych linijek). Walidiacja moim zdaniem jednak jest potrzebna tylko w formularzach rejestracyjnych, a takie stosuję jednak bardzo rzadko, dlatego nie wiem jak wyniki czasowe parsowania tego kodu przez smarty - czekam na efekty.

BTW. rzseattle: jak mozna zdobyc to twoje tlumaczenie manuala smarty?


--------------------
Michał Płachta
Warsztat: Mac OS X Leopard, PostgreSQL, Text Mate, Retrospectiva + SVN
Go to the top of the page
+Quote Post
rzseattle
post 2.07.2004, 13:43:36
Post #5





Grupa: Przyjaciele php.pl
Postów: 554
Pomógł: 0
Dołączył: 4.04.2002
Skąd: Tychy

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


Cytat(seaquest @ 2004-07-02 13:18:55)
BTW. rzseattle: jak mozna zdobyc to twoje tlumaczenie manuala smarty?

Wersja tymczasowa jest na http://rzseattle.piwko.pl . Teraz chwycilem chwile oddechu wiec moze w koncu to dokoncze i przezuce do docbooka.

Cytat
[...] dlatego nie wiem jak wyniki czasowe parsowania tego kodu przez smarty


Sam sobie odpowiedzialeś na pytanie - po pierwsze zadko takie formularze wyswietlasz po drugie mozesz wylaczyc sprawdzanie serverside i nie kompilowac juz szablonow, po trzecie jak wprowadzisz blok {dynamic} {/dynamic} i wlaczysz keszowanie to roznice beda znikome.


--------------------
"Real children don't go hoppity-skip unless they are on drugs."
Go to the top of the page
+Quote Post
Holyboy
post 2.07.2004, 13:49:51
Post #6





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 30.01.2004
Skąd: Kraków, Częstochowa

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


Cytat(rzseattle @ 2004-07-02 12:46:09)
I nicgdzie nie znalazlem informacji ze wymagane jest force_compile smile.gif.

to byl inny projekt, ale faktycznie to co podales wydaje mi sie ciekawe... nawet baaardzo ciekawe smile.gif

a co do tlumaczenia - jakbys potrzebowal pomocy to daj znac smile.gif

Ten post edytował Holyboy 2.07.2004, 14:38:33
Go to the top of the page
+Quote Post
Luke
post 2.07.2004, 20:14:06
Post #7





Grupa: Przyjaciele php.pl
Postów: 215
Pomógł: 0
Dołączył: 28.10.2003
Skąd: -

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


Ciekawa klasa jest OOh Forms ktora wchodzi w sklad pakietu PHPLIB. Ma zaimplementowany JavaScript oraz weryfikacje formularzy po stronie serwera. Weryfikacja danych wyslanych z formularza odbywa sie wedlug wczesniej zdefiniowanych kryteriow np. wyrazenia regularna, dopasuja przeslane wartosci do wzorcow, a JavaScript wypisze blad o braku wypelnionego pola ...

  1. <?php
  2.  
  3. .
  4. .
  5. .
  6.  
  7. $forms -> add_element(array(&#092;"name\" => \"email\",
  8.  &#092;"type\" => \"text\",
  9.  &#092;"size\" => \"20\",
  10. &#092;"minlenght\" => \"1\",
  11. &#092;"lenght_e\" => \"Prosze podac adres email\",
  12. &#092;"valid_e\" => \"Bladedny adres email\",
  13. &#092;"valid_regex\" => \"tutaj wzor z ktorym porownamy wprowadzony adres\" ));
  14.  
  15. .
  16. .
  17. .
  18.  
  19. ?>


--------------------
<span style="font-weight: bold;">Open Source Enterprise Content Management</span>
Go to the top of the page
+Quote Post
rzseattle
post 3.07.2004, 00:31:34
Post #8





Grupa: Przyjaciele php.pl
Postów: 554
Pomógł: 0
Dołączył: 4.04.2002
Skąd: Tychy

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


Jednak zaden z tych skryptow mnie nie zadowala poniewaz jeden nie ma wsparcia dla js a drugi operuje przedewszystkim na poziomie php a nie smarty. Datego pisze wlasny plugin do walidacji. Postaram sie aby byl on jak najbardziej przenosny (mozliwosc ustawienia zewnetrznego uchwytu sesji i zewnetrznego parsera linkow i ... ). Jak skoncze to zaprezentuje.


--------------------
"Real children don't go hoppity-skip unless they are on drugs."
Go to the top of the page
+Quote Post
DeyV
post 3.07.2004, 12:29:14
Post #9





Grupa: Zarząd
Postów: 2 277
Pomógł: 6
Dołączył: 27.12.2002
Skąd: Wołów/Wrocław




ja również walczyłem / walczę z tym problemem.
W efekcie powstałą seria klas służąca do walidacji formulaży w oparciu o smarty.
Co prawda narazie nie ma tu żadnego wsparcia dla JS, ale są jak najbardziej możliwości po temu by je dodać.

Zaletą jest również bardzo elastyczne dodawanie wielu różnych warunków do jednego inputa (np. cyfra, nie mniejsza niż 10 i nie większa niż 100, nie równa ... itp winksmiley.jpg )

Przykład: http://www.mstudio.nq.pl/php_pl/projects/f.../forms_0.1b.zip


--------------------
"Niezależnie od tego, jakie masz osiągnięcia, ktoś Ci pomaga..."
Go to the top of the page
+Quote Post
JackLondon
post 17.02.2007, 10:11:59
Post #10





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 17.07.2005

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


Ciekawy ten plugin Smarty. Szkoda, że go nie znalazłem wcześniej. Bo właśnie jestem na etapie projektowania własnego systemu obsługi formularzy. Lecz podszedłem do tego minimalistycznie. Widziałem tutaj na forum projekty które składały się z kilkunastu klas. Ja wybrałem wariant minimalistyczny:). Chodziło o czas zdecydowałem się na dwie klasy jedna jest odpowiedzialna za walidacje a druga za formularze. Formularze wyświetalm w Smarty ale pobierznie przeglądając plugin chyba porzucę swój dopiero co zaczęty "projekt" smile.gif
Go to the top of the page
+Quote Post
Wujashek
post 17.02.2007, 11:25:14
Post #11





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 12.02.2007

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


Co sądzicie o bibliotece QuickForm ?
Używam od dłuższego czasu i jestem zadowolony. Dużo trzeba pisać, ale przynajmniej kodowanie jest przejrzyste i jest mała szansa na popełnienie błędów.


--------------------
Szukam programistów PHP/Symfony
warsztat: PHP5, MySQL, Eclipse, Apache, Symfony, Trac, SVN

michalwujas.pl
Go to the top of the page
+Quote Post
Ociu
post 18.02.2007, 08:00:42
Post #12





Grupa: Moderatorzy
Postów: 1 566
Pomógł: 37
Dołączył: 14.05.2003
Skąd: Kraków




IMHO Formularze w agavi są po prostu świetne. Mało pisania, walidacja jest najlepsza jaką znalazłem. Ogólnie jest super.
Go to the top of the page
+Quote Post
splatch
post 18.02.2007, 14:59:05
Post #13





Grupa: Zarejestrowani
Postów: 487
Pomógł: 7
Dołączył: 7.01.2004
Skąd: Warszawa

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


Może słowo o tym jak to wygląda w Agavi.

Otóż walidacja nie jest powiązana z żadnym polem bezpośrednio. To znaczy, że nie definiujemy konfiguracji walidacji w widoku. Myślę, że praktyka dobra, ponieważ w połączeniu z możliwością rozbijania i wczytywania konfiguracji przez XInclude w zależności od potrzeby daje to po prostu elastyczność.

Zatem, w pliku validate/<nazwaakcji>.xml mamy definicję walidacji zgodną ze schematem XML:
  1. <?xml version="1.0" encoding="UTF-8" standalone="no"?>
  2. <configurations xmlns:xi="http://www.w3.org/2001/XInclude">
  3.      <configuration>
  4.            <validators>
  5.  
  6.                  <validator class="string" name="parameter_name">
  7.                        <arguments>
  8.                              <argument>parameter_name</argument>
  9.                        </arguments>
  10.                        <errors>
  11.                              <error for="min">Podana nazwa jest za krótka.</error>
  12.                              <error for="max">Podana nazwa jest za długa.</error>
  13.                        </errors>
  14.                        <parameters>
  15.                              <parameter name="min">5</parameter>
  16.                              <parameter name="max">30</parameter>
  17.                        </parameters>
  18.                  </validator>
  19.  
  20.            </validators>
  21.      </configuration>
  22. </configurations>


Może o składni dokumentu:
    Część atrybutów znacznika validator
  1. class (string) - klasa sprawdzająca poprawność danych, rozszerzająca klasę AgaviValidator.
  2. name (string) - identyfikator walidatora
  3. method (set)- metoda, w której walidacja jest wybierana domyślnie, dopuszczalne wartości to write/read. Domyślnie write.
  4. depends (string) - nazwa walidatora, który musi zwrócić true, by walidacja mogła przebiegać dalej
  5. severity (set) - waga błędu walidacji - dopuszczalne wartości to:
    1. success - zawsze zwraca true
    2. none - nie ma wpływu na proces walidacji
    3. notice - błąd zgłoszony przez walidator nie przerywa procesu i nie ma wpływu na dane
    4. error - błąd, nie przerywa procesu walidacji
    5. critical - natychmiastowe przerwanie walidacji i zgłoszenie błędu
  6. required (bool) - czy uruchomienie tego walidatora jest zawsze obowiązkowe. W chwili gdy argumentem walidatora
    Tagi
  1. arguments (array) - nazwy zmiennych, które będą podlegały sprawdzeniu przez określony walidator.
  2. errors (array) - komunikaty błędów, które zobaczy użytkownik. Walidatory używają atrybutu for do
  3. identyfikacji błędów. Np. Klasa AgaviNumberValidator korzysta z błędów o atrybutach min, max, type. W Agavi 1.0 będzie możliwość internacjonalizacji komunikatów.
  4. parameters (array) - parametry przekazane do walidatora. Atrybut name identyfikuje parametr.
  5. validators (validator[]) - kolekcja walidatorów, które są zgrupowane. Pozwala to tworzyć warunki logiczne w walidacji bez konieczności implementacji odpowiednich mechanizmów (if...) w akcji.

To by było tyle odnośnie konfiguracji. Teraz jak to wygląda w akcji:
.

Wierzcie mi, że uzyskanie tego efektu nie wymagało żadnego warunku w widoku czy też szablonie, ponieważ Agavi dostarcza filtr, który na podstawie zgłoszonych w czasie walidacji błędów odpowiedni "dekoruje" output. Mowa tu o Form Population Filter. Co więcej filtr ten oprócz zaznaczania błędów dodaje wiadomości błędów a także uzupełnia wartości.

Więcej na temat w Agavi będziecie mogli się dowiedzieć już w najbliższej przyszłości na zmodernizowanym code-house.net.


--------------------
Łukasz Dywicki
Independent Java and open source software consultant.
Blog - Java, OSGi, integracja oprogramowania..
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: 24.04.2024 - 00:39