konto usunięte

Temat: Walidacja formularzy po której stronie?

Tak jak w temacie która strona klient czy serwer jest lepsza do walidowania danych z formularza?
Wojciech Soczyński

Wojciech Soczyński Programista
eksplorator -
blog.wsoczynski.pl

Temat: Walidacja formularzy po której stronie?

Tylko serwer. Po stronie klienta, można zrobić dodatkową walidację dla wygody użytkownika.

konto usunięte

Temat: Walidacja formularzy po której stronie?

Jak wyżej. Po stronie klienta walidacje ze względu na usability, ale po stronie serwera to już obowiązkowa.
Krzysztof Szelążek

Krzysztof Szelążek Senior .net
Developer

Temat: Walidacja formularzy po której stronie?

Bardzo dobra praktyka jest tez robienie walidacji po stronie bazy, przed zapisem danych, czy aby napewno przesylane sa oczekiwane typy wartosci i wymagane pola.

konto usunięte

Temat: Walidacja formularzy po której stronie?

to w końcu po stronie aplikacji czy bazy, bo to dwie zupełnie różne historie

A wracając do samej walidacji po stronie serwera - w trakcie wypełniaia formularza - AJAX-em czy też po wykonaniu submit-a
Jarek W.

Jarek W. Software Engineer

Temat: Walidacja formularzy po której stronie?

Zastanów się co będzie jak użytkownik wyłączy w przeglądarce JavaScript i prześle nieprawidłowe dane na serwer (np. jakiś SQLInjection). Jak zachowa się wtedy Twoja aplikacja? I co tak naprawdę mogłoby ją rzeczywiście uchronić przed tego typu rzeczami?Jarek W. edytował(a) ten post dnia 07.02.11 o godzinie 11:43

konto usunięte

Temat: Walidacja formularzy po której stronie?

po obu stronach

konto usunięte

Temat: Walidacja formularzy po której stronie?

doskonale wiem co się stanie :P

Bardziej chodzi mi o koncepcje niż gotowe rozwiązanie. taką koncepcją mogła by być mieszana walidacja klient/serwer w postaci AJAX-a i walidatora po stronie serwer-a. Z jednej strony przyjazny, z drugiej strony bezpieczny

elementem który mógł by powiedzieć że dany form jest zwalidowany to dodatkowy tokeny pobrane podczas walidacji każdego pola oddzielnie, każde pole które nie posiada tokena podlegało by dodatkowej walidacji po stronie serwer-a

konto usunięte

Temat: Walidacja formularzy po której stronie?

Jeżeli chcesz wersję najbardziej user friendly to walidację robisz AJAX-em. Tylko dorabiasz jakiś loader, który pokaże userowi, że coś się dzieje i po kłopocie. Wszyscy będą zadowoleni.

konto usunięte

Temat: Walidacja formularzy po której stronie?

Koncepcja:
- po wyjściu kursora z pola, sprawdzamy poprawność danych w polu,
- po submicie a przed wysłaniem - sprawdzamy cały formularz,
- po stronie serwera przed obróbką (wychodzę z założenia że dane z formularza !== dane zapisywane).

Sprawdzanie czy token istnieje - niepotrzebne. Walidacja nie jest aż tak zasobożerna, a i nie ma problemu gdy ktoś podrobi tokeny.
Wojciech Soczyński

Wojciech Soczyński Programista
eksplorator -
blog.wsoczynski.pl

Temat: Walidacja formularzy po której stronie?

Krzysztof Szelążek:
Bardzo dobra praktyka jest tez robienie walidacji po stronie bazy, przed zapisem danych, czy aby napewno przesylane sa oczekiwane typy wartosci i wymagane pola.
Walidacja po stronie bazy, przy użyciu triggerów czy innych procedur składowanych ma sens tylko w przypadku kiedy to baza jest naszym "modelem", oraz kiedy możemy swobodnie się uzależnić od danego silnika bazy danych. W każdym momencie innym, to jest generalnie szukanie sobie problemów. Procedury w bazie danych ciężko się debuguje oraz są zwykle mało jasne dla osoby, która nie tworzyła kodu.

Jeżeli autor wątku chciałby dowiedzieć się o tym w którym miejscu w kodzie umieścić walidację, to odsyłam do swojego bloga - http://blog.wsoczynski.pl/2011/02/05/o-walidacji-slow-... . W samym wpisie i komentarzach dużo różnych koncepcji...Wojciech Soczyński edytował(a) ten post dnia 07.02.11 o godzinie 12:56
Alan Gabriel B.

Alan Gabriel B. Software Engineer,
IFX

Temat: Walidacja formularzy po której stronie?

Wojciech Soczyński:
Walidacja po stronie bazy, przy użyciu triggerów czy innych procedur
składowanych ma sens tylko w przypadku kiedy to baza jest naszym "modelem",
oraz kiedy możemy swobodnie się uzależnić od danego silnika bazy danych.

Szczególnie przy rosnącej popularności rozwiązań NoSQL, wydelegowanie walidacji do logiki aplikacji, niesie ze sobą kilka korzyści. Nie wspominając o coraz większych możliwościach ORMów, które krok po kroku przejmują zadania RDBMSów związane z ochroną integralności danych.

To chyba taki trend.

konto usunięte

Temat: Walidacja formularzy po której stronie?

Nie trend, a wynik przemyśleń.
Wynika wprost z faktu, że otrzymane dane (z dowolnego źródła) muszą być poprawne nim zostaną użyte do wykonania działania. Jakie to ma być działanie - nie jest istotne. Bo i po co rozpoczynać działanie skoro nie mamy potrzebnych danych?

Walidacja po stronie DBMS'u to bardziej bajer, dodatek.
Tomasz Zadora

Tomasz Zadora programuję

Temat: Walidacja formularzy po której stronie?

Jestem zdania, że jeżeli chodzi o MVC to powinien to robić kontroler.

Model to struktura, kontroler to logika która przekształca model, sprawdza, etc.

Robię to więc tak:

Jeżeli więc mamy *model formularza*, który po wysłaniu danych post/get jest wypełniony tymi danymi, to następnie jest przesyłany do *kontrolera formularza* (lub jest jego częścią) który dokonuje sprawdzenia *na wysokim poziomie*.

Co do samej bazy danych (SQL) - tutaj już mamy *model tabeli sql* następnie, podobnie mamy *kontroler tabeli sql* który przeprowadza insert/update i zanim operację SQL przeprowadzi sprawdza *na niższym poziomie* dziedzinę danych - czyli jeżeli mamy pole SQL numeryczne to czy faktycznie wartość jest numeryczna, etc.

konto usunięte

Temat: Walidacja formularzy po której stronie?

właśnie doszliśmy do kwestii gdzie trzymać mechanizm walidacji - kontroler czy model?

Moim zdaniem za walidację powinien odpowiadać kontroler gdyż dane dla modelu != danych z formularza, dane w formularzu mogą mieć też charakter pomocniczy
Wojciech Soczyński

Wojciech Soczyński Programista
eksplorator -
blog.wsoczynski.pl

Temat: Walidacja formularzy po której stronie?

Tomasz Zadora:
Jestem zdania, że jeżeli chodzi o MVC to powinien to robić kontroler.

Model to struktura, kontroler to logika która przekształca model, sprawdza, etc.

Robię to więc tak:

Jeżeli więc mamy *model formularza*, który po wysłaniu danych post/get jest wypełniony tymi danymi, to następnie jest przesyłany do *kontrolera formularza* (lub jest jego częścią) który dokonuje sprawdzenia *na wysokim poziomie*.

Co do samej bazy danych (SQL) - tutaj już mamy *model tabeli sql* następnie, podobnie mamy *kontroler tabeli sql* który przeprowadza insert/update i zanim operację SQL przeprowadzi sprawdza *na niższym poziomie* dziedzinę danych - czyli jeżeli mamy pole SQL numeryczne to czy faktycznie wartość jest numeryczna, etc.
Tomasz niestety uważam, że jesteś w bardzo głębokim błędzie co do twojej interpretacji wzorca MVC. Kontroler w MVC w aplikacji www odpowiedzialny jest za zinterpretowanie żądania HTTP (na podstawie adresu, get, post etc), przekazanie odpowiednich danych do modelu, który zajmuje się ich przetwarzaniem i zwraca nam wynik, który to kontroler przekazuje do widoku w który jest prezentowany użytkownikowi.

Nie ma czegoś takiego jak "model formularza". Modelem może być człowiek, samochód, samolot, faktura etc, jakiś byt który istnieje w sensie realnym i który jest podmiotem działania naszej aplikacji. Formularz jest jedynie komponentem wizualnym, dzięki któremu użytkownik może sobie wygodnie wprowadzać dane. Tak samo jak tabela w bazie danych to nie model, tylko środek do utrwalania danych, żeby nam nie wyparowały.

Wobec tego, oczywiście w prostych przypadkach walidacja w formularzu jest jak najbardziej ok. Natomiast podchodząc do sprawy całkiem purystycznie to walidacja powinna być przeprowadzona w modelu.Wojciech Soczyński edytował(a) ten post dnia 07.02.11 o godzinie 16:40

konto usunięte

Temat: Walidacja formularzy po której stronie?

Przemysław R.:
właśnie doszliśmy do kwestii gdzie trzymać mechanizm walidacji - kontroler czy model?

Moim zdaniem za walidację powinien odpowiadać kontroler gdyż dane dla modelu != danych z formularza, dane w formularzu mogą mieć też charakter pomocniczy

Owszem, kontroler - i tu raczej nie ma co się rozwodzić.
W modelu też może być walidacja, jeno tyczyć się będzie danych do modelu.

@Wojciech Soczyński - jest wiele interpretacji MVC.
Poproszę o jeszcze jeden link do twojego bloga - trzy razy to dla mnie za mało.Michał Wachowski edytował(a) ten post dnia 07.02.11 o godzinie 16:04
Wojciech Soczyński

Wojciech Soczyński Programista
eksplorator -
blog.wsoczynski.pl

Temat: Walidacja formularzy po której stronie?

Michał Wachowski:
Przemysław R.:
właśnie doszliśmy do kwestii gdzie trzymać mechanizm walidacji - kontroler czy model?

Moim zdaniem za walidację powinien odpowiadać kontroler gdyż dane dla modelu != danych z formularza, dane w formularzu mogą mieć też charakter pomocniczy

Owszem, kontroler - i tu raczej nie ma co się rozwodzić.
W modelu też może być walidacja, jeno tyczyć się będzie danych do modelu.

@Wojciech Soczyński - jest wiele interpretacji MVC.
Poproszę o jeszcze jeden link do twojego bloga - trzy razy to dla mnie za mało.

Może być wiele odmian np MVP albo MVVM, ale jeżeli mówimy o MVC to mamy na myśli separacje logiki biznesowej (MODEL), flow aplikacji (KONTROLER) i prezentacji (WIDOK). Mówiąc o różnych sposobach interpretacji MVC równie dobrze można by powiedzieć, że kwadrat jest interpretacją koła. Sprawa jest prosta albo oddzielamy logikę biznesową od prezentacji albo i nie.

Nie powiesz chyba, że pisanie zapytań do bazy danych w kontrolerze to jest MVC mimo, że klasa nazywa się "Kontroler" ?Wojciech Soczyński edytował(a) ten post dnia 07.02.11 o godzinie 16:37
Tomasz Zadora

Tomasz Zadora programuję

Temat: Walidacja formularzy po której stronie?

Wojciech Soczyński:
[...]
Tomasz niestety uważam, że jesteś w bardzo głębokim błędzie co do twojej interpretacji wzorca MVC. Kontroler w MVC w aplikacji www odpowiedzialny jest za zinterpretowanie żądania HTTP (na podstawie adresu, get, post etc), przekazanie odpowiednich danych do modelu, który zajmuje się ich przetwarzaniem i zwraca nam wynik, który to kontroler przekazuje do widoku w który jest prezentowany użytkownikowi.

Za to ja się obawiam, że tobie myli się struktura z logiką, a w modelu MVC, model to struktura która nie powinna sama siebie zmieniać.

Model może posiadać proste metody zwracające określone dane zależne od jego stanu (np. walidacja formularza - ale to imo zły pomysł), jednak nie powinien swojego stanu tymi metodami zmieniać.

Stan modelu zmienia tylko i wyłącznie kontroler (czyli algorytm/logika), co zresztą pośrednio swoją wypowiedzią potwierdziłeś: to kontroler interpretuje request i w zależności od parametrów requestu podejmuje odpowiednie działania.

Tymczasem w całości zgodnie z Twoim tokiem rozumowania, "rozmywasz" logikę na model i kontroler co niestety nieuchronnie prowadzi do tego, że kodem się gorzej zarządza, pisząc kolokwialnie: gorzej się go ogarnia.
Nie ma czegoś takiego jak "model formularza".

Tutaj myli Ci się widok ze strukturą :)

Owszem jest "model formularza" - to struktura określająca listę pól formularza i ich właściwości.

Jeżeli chodzi o prezentację to kontroler wybiera Viewera który dostaje określony model formularza (który może być zmodyfikowany przez kontrolera) i dokonuje prezentacji.

To tyle, wydaje mi się, że dość dokładnie to wyjaśniłem.

Jeżeli ktoś uważa, że jestem w błędzie / nie podoba mu się to / etc. - jak najbardziej ma prawo :) U mnie taki podział znakomicie działa.Tomasz Zadora edytował(a) ten post dnia 07.02.11 o godzinie 16:55

konto usunięte

Temat: Walidacja formularzy po której stronie?

Wojciech Soczyński:
Nie ma czegoś takiego jak "model formularza".

Jest, jest. Framework Yii, klasa CFormModel:

CFormModel represents a data model that collects HTML form inputs.

Następna dyskusja:

Niechciane wpisy do formularzy




Wyślij zaproszenie do