Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Walidacja przed wysłaniem danych do php
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
Asmox
Witam. Zastanawiam się jak zrobić, aby JavaScript w prosty sposób sprawdził dane z formularza (czy w roku email user wstawił znak @ i tak dalej) i dopuścił dane do skryptu php wtedy i tylko wtedy, jeśli dane przejdą walidację pomyślnie. Czy javascript posiada funkcję zatrzymania wysyłania danych z formularza?
kamil4u
Poczytaj o wyrażeniach regularnych lub znajdź gotowca na np. e-mail, później piszesz funkcję typu:
Kod
<script>
function sprawdz()
{
var errors = '';
if(jakiespole != costam) errors+="BLABLA1 \n";
if(jakiespole2 != costam2) errors+="BLABLA2 \n";
//itd
if(errors == '') {return true;} else { alert(errors); return false;}
}
</script>
----------------------
<form action="itd" onSubmit="return sprawdz();">


Przypominam, że w skrypcie PHP też musisz sprawdzić poprawność danych na wypadek gdyby ktoś nie miał włączonego JS smile.gif
piotrooo89
ja bym proponował AJAX'a. z uwzględnieniem jQuery. naprawdę ciekawe rzeczy można z tym wyczyniać.
kamil4u
Cytat
ja bym proponował AJAX'a. z uwzględnieniem jQuery. naprawdę ciekawe rzeczy można z tym wyczyniać.

@piotrooo89: a co Twoja wypowiedź wnosi do tematu? Gdybyś dał chociaż przykład zastosowania tu tych technologi(a raczej skryptów) lub jakiś algorytm to IMO miałoby to sens. To tak jakbym napisał: "ale przecież można użyć flasha lub Javy (nie JS), aby to zrobić , bo można 'tworzyć' ciekawe efekty" - i co nie miałbym racji? Tylko po co?
piotrooo89
poszerzam zagadnienie.

Cytat
Gdybyś dał chociaż przykład zastosowania tu tych technologi


i co jeszcze pewnie będę musiał to odpowiednio skonfigurować aby działało? niech poszuka w googlach. rzuciłem temat ponieważ być może on nie wie że istnieje możliwość validacji formularza.

btw. Twój przykład jest troszkę toporny i mało uniwersalny.
kamil4u
Cytat
i co jeszcze pewnie będę musiał to odpowiednio skonfigurować aby działało? niech poszuka w googlach. rzuciłem temat ponieważ

Genialne! Ja zaproponowałem Javą - i co Twoim zdaniem to jest rozszerzenie tematu, czy zupełnie nie potrzebna informacja? Poza tym co trzeba konfigurować? I w końcu co ma poszukać w Google? Co to jest jQuery? Jak Twoim zdaniem ma wykorzystać tą wiedzę(skrypt), skoro nie wie co ma z tym zrobić? Napisz może jaki jest Twoje rozwiązanie problemu ~Asmox -a.
Cytat
być może on nie wie że istnieje możliwość validacji formularza.

No racja nie wie. Tylko nie wiem dlaczego w temacie pyta o to jak to zrobić, dziwne co?

Cytat
btw. Twój przykład jest troszkę toporny i mało uniwersalny
Chodzi Ci o:
Kod
if(jakiespole != costam) errors+="BLABLA1 \n";
to oczywiście if-a trzeba odpowiednio zmodyfikować np. żeby sprawdzał poprawność adresu e-mail (jeśli o to Ci chodzi). Jeśli nie oto to rozwiń co masz na myśli - mało uniwersalny? Podaj chociaż jedną wadę mojego rozwiązania w porównaniu z Twoim(choć nadal nie wiem jakie to rozwiązanie)

Pozdrawiam

PS. Nie miej mi za złe takiej krytyki Twoich postów(z tego tematu), ale po prostu nie mogę zrozumieć po co to napisałeś. Żeby mieć więcej postów/pomógł? Nie wierze - i tak masz ich już dużo, w takim razie po co? I nie mam Ci za złe, że udzielasz się w temacie - to dobrze, tylko jakbyś podał inne rozwiązanie problemu, a nie tylko technologię do realizacji tego problemu winksmiley.jpg
piotrooo89
czy dostrzegasz subtelną różnice między Java a JS/AJAX? jeśli nie nie czytaj dalej. jeśli tak to rozwiązanie AJAX'em IHMO jest elegantsze i można z nim wyczyniać czego dusza zapragnie.

Cytat
No racja nie wie. Tylko nie wiem dlaczego w temacie pyta o to jak to zrobić, dziwne co?


zapytał wyraźnie o js, ja również js utożsamiam AJAX'a który przewyższa ją możliwościami.

Cytat
Podaj chociaż jedną wadę mojego rozwiązania w porównaniu z Twoim(choć nadal nie wiem po co)


zrób sobie 100 pól w formularzu i przevaliduj wszystkie. albo chociaż 60%. good luck and have fun.

Cytat
PS. Nie miej mi za złe takiej krytyki Twoich postów(z tego tematu), ale po prostu nie mogę zrozumieć po co to napisałeś. Żeby mieć więcej postów/pomógł? Nie wierze - i tak masz ich już dużo, w takim razie po co?


nie mam za złe, ponieważ prowadzimy dyskusje, a to forum dyskusyjne więc dopóki mnie nie obrażasz, krzyczysz etc jest OK smile.gif.

co do tematu:
http://marcgrabanski.com/pages/code/clean-form-validation
jeden z najprostszych validatorów jQuery, sam z niego korzystam.

a tu moja paczka wraz z przykładem użycia lekko przerobiona:
http://www.sendspace.pl/file/0XAOOgYx/
blooregard
Pozwolicie, że się wtrącę:
Cytat
zapytał wyraźnie o js, ja również js utożsamiam AJAX'a który przewyższa ją możliwościami.

A niby czym jest Ajax, jeśli nie JavaScriptem ? Ajax to ogólne określenie technologii, która pozwala w taki czy inny sposób na realizację żądania przeglądarki BEZ przeładowywania strony, czy to za pomocą iFrame, czy też obiektu HttpXMLRequest. Ale nadal jest to tylko JavaScript.
Nie myl pojęć - AJAX to nie jest jakiś język programowania, przewyższający JS, jak to ująłeś.
piotrooo89
dlatego napisałem że utożsamiam JS z AJAX'em.
blooregard
Cytat
ja również js utożsamiam AJAX'a który przewyższa ją możliwościami.

No to kogo przewyższa? Javę? Bo tak trochę niezrozumiale to ująłeś smile.gif
kamil4u
Cytat
jeśli tak to rozwiązanie AJAX'em IHMO jest elegantsze i można z nim wyczyniać czego dusza zapragnie.

Chyba mylisz pojęcia: Ajax != jQuery smile.gif Wiki:
Cytat
AJAX (ang. Asynchronous JavaScript and XML, Asynchroniczny JavaScript i XML) – technologia tworzenia aplikacji internetowych, w której interakcja użytkownika z serwerem odbywa się bez przeładowywania całego dokumentu


Cytat
zapytał wyraźnie o js, ja również js utożsamiam AJAX'a który przewyższa ją możliwościami.

Źle Cię zrozumiałem albo Ty mnie smile.gif

Cytat
zrób sobie 100 pól w formularzu i przevaliduj wszystkie. albo chociaż 60%. good luck and have fun.

Pętla i po sprawie ( przy założeniu, że validacja różnych pól będzie taka sama smile.gif ) - oczywiście ja nigdy nie sprawdzałem 100 pól a max około 15 i
Cytat
dopóki mnie nie obrażasz, krzyczysz etc

Nie mam w zwyczaju obrażać kogoś dlatego, że się z nim nie zgadzam smile.gif

Cytat
jeden z najprostszych validatorów jQuery, sam z niego korzystam.

Nie korzystam z jQuery, ale mogę Cię zapewnić, że po lekkiej przeróbce mojego kodu mogę dostać taki sam efekt smile.gif

I widząc, że się nie rozumiemy napisze jeszcze raz prośbę do Ciebie: nie pisz jakich technologi można użyć, tylko jak je wykorzystać w danym temacie/problemie i o to mi się "rozchodzi" - gdybyś dał linka w swoim 1 poście nie byłoby całej tej dyskusji - tak sadze smile.gif

Pozdrawiam
piotrooo89
Cytat
No to kogo przewyższa?


no fakt troszke nie zrozumiałe, chodziło mi o to że AJAX przewyższa czystą JS. możliwości przy użyciu AJAX'a są większe aniżeli przy zastosowaniu samej JS.
erix
AJAX, to jest element JavaScript...

Ok, na temat proszę.
Asmox
1. Nie kłóćmy się
2. Czy jest w końcu jakiś sposób na zatrzymanie wysyłania danych do skryptu w pisanego w atrybut action ?
3. Czy nie ma ?
4. Oczywiście zamierzam wykorzystać do tego Ajax - formularze bez Ajaxa są do do niczego.
erix
Cytat
Czy jest w końcu jakiś sposób na zatrzymanie wysyłania danych do skryptu w pisanego w atrybut action ?

Przy wywołaniu funkcji w onsubmit dajesz e.preventDefault() lub return false.

Cytat
1. Nie kłóćmy się

Waść prosisz, a sam co robisz? tongue.gif
Cytat
Oczywiście zamierzam wykorzystać do tego Ajax - formularze bez Ajaxa są do do niczego.
piotrooo89
Cytat
Czy jest w końcu jakiś sposób na zatrzymanie wysyłania danych do skryptu w pisanego w atrybut action ?


dałem Ci gotowy skrypt + przykład użycia czego chcieć więcej?
kamil4u
Albo mi się wydaj albo nadal mylicie pojęcia: Ajax != jQuery. IMO AJAX-a można tu wykorzystać tylko po to, żeby zamiast JS pola zostały sprawdzone przez PHP i dynamicznie przesłać wynik zwrotny do przeglądarki (co IMO jest bez sensu) . Tak więc zwrot typu:
Cytat
formularze bez Ajaxa są do do niczego.
jest bzdurą (chyba, że rzeczywiście chcesz sprawdzać tak jak opisałem to powyżej, a nie tak jak w linku podanym przez ~piotrooo89) - i jak tu się nie kłócić tongue.gif

Cytat
Czy jest w końcu jakiś sposób na zatrzymanie wysyłania danych do skryptu w pisanego w atrybut action ?

Jak byś miał czas (przypuszczam, że go nie masz bo w przeciwnym wypadku zrobiłbyś to) i przeanalizowałbyś w swej łaskawości mój kod(lub podany w linku przez ~piotrooo89) to byś się sam domyślił
piotrooo89
ja oczywiście się nie zgadzam z takim podejściem. jasne że można stworzyć wyczesaną w kosmos walidacje po stronie JS(chodzi mi tu o czyste JS bez używania frameworków). tylko jak dla mnie zrobienie czegoś w jQuery wydaje mi się takie przejrzyste i eleganckie, co rzecz jasna nie znaczy że JS też takie nie może być - nie chce tu uogólniać). ja rzeczywiście trochę namieszałem z tymi wszystkimi pojęciami. za co z góry przepraszam (używałem skrótów myślowych) sciana.gif
kamil4u
Wbrew pozorom się zgadzasz - napisze jeszcze raz:

Ajax to nie to samo co jQuery - Ajax służy do dynamicznego 'kontaktu' z innymi plikami np. PHP, a jQuery to biblioteka, która ułatwia życia webmasterowi ( chodź ja wolę samemu wiele rzeczy zrobić smile.gif ). Tak więc Ty korzystasz z jQuery (Twój wybór smile.gif - to jak najbardziej prawidłowo) - natomiast używanie Ajax-u IMO w tym wypadku jest bezużyteczne i nie zgadzam się z twierdzeniem:
Cytat
formularze bez Ajaxa są do do niczego.
. Mam nadzieję, że już wszyscy znają różnicę, a autor strony poradził sobie ze swoim 'problemem' smile.gif

Pozdrawiam
nexis
Cytat(kamil4u @ 10.03.2009, 21:21:49 ) *
AJAX-a można tu wykorzystać tylko po to, żeby zamiast JS pola zostały sprawdzone przez PHP i dynamicznie przesłać wynik zwrotny do przeglądarki (co IMO jest bez sensu)

Niby na jakiej podstawie tak twierdzisz? Sprawdzanie w ten sposób (czyli wysyłanie żądania do skryptu PHP i otrzymanie odpowiedzi) jest jednym z najlepszych rozwiązań, a dlaczego? Właśnie dlatego, że przy walidacji formularzy musisz walidować dwukrotnie (pierwszy raz w po stronie przeglądarki, drugi raz po stronie serwera). Po co więc dwa razy pisać odpowiednie walidatory? Lepiej wykorzystać ten napisany po stronie serwera po stronie przeglądarki.

Jaki są dodatkowe plusy? O ile sprawdzanie składni adresu e-mail jest równie proste w JS jak PHP, to np. sprawdzenie rekordu MX na serwerze DNS w JS już chyba nie wygląda tak pięknie. smile.gif
kamil4u
Ja to widzę inaczej - po prostu bezsensowne obciążanie serwera (małe, bo małe, ale zawsze) - poza tym JS jest trochę szybsza smile.gif i w końcu do efektownego pokazania błędu powinna być użyta JS

Oczywiście po części się z Tobą zgadzam, chodź akurat nie w kwestii użycia Ajax-u w prostym przykładzie
erix
Cytat
poza tym JS jest trochę szybsza i w końcu do efektownego pokazania błędu powinna być użyta JS

Zależy, w jaki sposób oceniasz. winksmiley.jpg

Na pewno nie wolno rezygnować ze sprawdzania danych po stronie serwera. Sprawdzanie przez DHTML powinno być stosowane w ramach tzw. progressive enhancement - jest JS - fajnie - można sprawdzić, nie ma - podstawowa funkcjonalność działa.

A dodatkowe sprawdzanie po stronie klienta pozwala oszczędzić czas, zasoby i zużywany transfer.
piotrooo89
~erix właśnie poruszył ważną kwestię. a co jeśli JS został wyłączony? zero walidacji w tym czasie. myślę że ktoś kto tworzy strony internetowe musi się z tym liczyć i nie może zrzucać całej walidacji po stronie klienta.
rzymek01
ja bym nawet zaryzykował stwierdzenie, że typowa walidacja to tylko po stronie serwera, a po stronie klienta moga być funkcyjki a'la walidacyjne ułatwiąjące wypełnienie np. formularza

i tak jak nexis napisał, że można korzystać za pomoca AJAXa z walidacji napisanej po stronie serwera
Asmox
Cytat(piotrooo89 @ 11.03.2009, 15:38:22 ) *
~erix właśnie poruszył ważną kwestię. a co jeśli JS został wyłączony? zero walidacji w tym czasie. myślę że ktoś kto tworzy strony internetowe musi się z tym liczyć i nie może zrzucać całej walidacji po stronie klienta.


O fucktycznie tu masz dużo racji. Ktoś do przekrętów mógłby wyłączyć JavaScript, więc chyba lepiej całą walidację zrobić po stronie php.
erix
Nie chodzi, że ktoś dla przekrętów; mało to botów buszujących po sieci w poszukiwaniu maili, czy dziurawych skryptów...?
kamil4u
Cytat
~erix właśnie poruszył ważną kwestię. a co jeśli JS został wyłączony? zero walidacji w tym czasie. myślę że ktoś kto tworzy strony internetowe musi się z tym liczyć i nie może zrzucać całej walidacji po stronie klienta.

Przeczytaj mój pierwszy post w tym temacie:
Cytat
Przypominam, że w skrypcie PHP też musisz sprawdzić poprawność danych na wypadek gdyby ktoś nie miał włączonego JS smile.gif


Generalnie zrobiliśmy wielką dyskusję o coś co każdy uczy się w 2 dzień nauki JS czy PHP smile.gif Co do Ajax-a chodziło mi raczej, że cały czas rozmawialiśmy o jQuery, a błędnie używaliście pojęć pisząc o Ajaksie. Stąd poruszyłem ten temat. Ja osobiście nie używam Ajaksu do walidacji danych a 'czystego' JS, oczywiście każdy robi jak uważa. Ja podałem argumenty przeciw ktoś za. Teraz inni(którzy np. nie znali takiej możliwości) mogą wybrać dla siebie najodpowiedniejszą metodą smile.gif

I Podsumowując dyskusję:
a) walidację należy zawsze robić po stronie serwera
b ) wypadałoby użyć JS, aby ułatwić poprawę danych użytkownikowi, można to zrobić na kilka sposobów:
- 'czysty' JS, który IMO jest najlepszy - przykład w moim pierwszym poście w tym temacie
- za pomocą biblioteki np. jQuery - link podany przez ~piotrooo89
- odwołując się do PHP przez Ajax:
-- argumenty za: pisanie 1 razy walidacji, sprawdzanie 'trudniejszych' rzeczy np. rekordu MX jest prostsze
-- argumenty przeciw: działa wolniej i zużywa więcej transferu .

Do wyboru do koloru smile.gif

Pozdrawiam

--edit--
@DOWN: mój błąd smile.gif - już poprawiłem
rzymek01
Cytat(kamil4u @ 11.03.2009, 19:06:21 ) *
-- argumenty przeciw: pozwala oszczędzić czas, zasoby i zużywany transfer.

to wygląda na argument za biggrin.gif
chyba raczej, działa trochę wolniej i zuzywa więcej transferu
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-2025 Invision Power Services, Inc.