eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.www › Sprawdzanie poprawności formularzy
Ilość wypowiedzi w tym wątku: 28

  • 1. Data: 2009-01-14 19:50:47
    Temat: Sprawdzanie poprawności formularzy
    Od: "Gabriel" <z...@p...fm>

    Witam serdecznie

    Do tej pory korzystalem z wlasnych skryptow weryfikujacych poprawnosc
    wypelnianego formularza po stronie uzytkownika. Pozniej przepuszczalem
    wyslana tresc przez swoje skrypty napisane w php po stronie serwera.

    Ale jako, ze na pewno nie sa to doskonale rozwiazania, a pisalem je kilka
    lat temu, szukam jakiegos gotowca ktory przystawal by do dzisiejszych
    wymogow.

    Formularz prosty - ot imie i nazwisko, email i tresc wiadomosci.

    Znacie cos co mozecie polecic do wykorzystania? Bo wywazac otwartych drzwi
    nie zamierzam:)

    Chodzi mi przede wszystkim o rozwiazania.. takie najbardziej przyjazne
    uzytkownikowi. I dbajace takze o osoby niepelnosprawne.

    Bardzo prosze o pomoc.



    --
    Pozdrawiam
    Gabriel Zastawnik
    http://www.sigsoft.pl - Monitoring Komputera



  • 2. Data: 2009-01-14 22:09:31
    Temat: Re: Sprawdzanie poprawności formularzy
    Od: Mirosław Zalewski <miniopl@CUT_THIS.gmail.com>

    Myślę że w tej kwestii można zaufać PPK. Zapoznaj się z informacjami na
    stronie http://www.quirksmode.org/js/forms.html

    Koniecznie zapoznaj się także z innymi materiałami z jego strony, do
    których znajdziesz odnośniki w tekście. Znajdziesz tam m.in. formularz
    łudząco podobny do Twojego.

    Przy okazji -- zdaje się że PPK o tym nie wspomina, ale do sprawdzania
    elementów formularzy można także użyć zdarzenia blur (które następuje
    gdy element traci ,,aktywność" -- znaczy użytkownik przeniósł swoją uwagę
    na jakiś inny, np. klikając nań). Tylko wymaga to przemyślanej metody,
    ponieważ każdy z elementów ma zawierać inne dane (możesz stworzyć
    funkcję dla każdego z elementów lub też funkcję ogólną która będzie
    przyjmowała element jako argument i na tej podstawie wykonywała
    odpowiednie operacje; tak czy siak, dla rozbudowanych formularzy ilość
    kodu może być całkiem pokaźna).

    Oczywiście obsługa zdarzenia blur ma jedynie wspomagać już istniejące
    mechanizmy, a nie je zastępować. Ogólnie sprawdzanie poprawności
    formularza wygląda następująco:

    1. Obsługa zdarzenia blur -- sprawdza czy użytkownik w ogóle wypełnił
    wymagane pole, i/lub -- jeżeli wymaga ono jakichś specyficznych danych
    (np. adresu e-mail) -- sprawdza czy użytkownik wpisał to czego się od
    niego oczekuje w chwili, gdy użytkownik opuszcza dane pole.
    2. Obsługa zdarzenia submit formularza (użytkownik może chcieć wysłać
    formularz bez uprzedniego zainteresowania się wymaganymi polami, więc
    nie będą one miały szansy wywołać zdarzenia blur).
    3. Sprawdzenie poprawności formularza po stronie serwera i
    ewentualne odesłanie go z wypunktowanymi błędami (na wypadek gdyby
    użytkownik miał wyłączony JavaScript w przeglądarce).
    --
    Niżej podpisany, zamieszkały w http://minio.xt.pl ,
    Mirosław Zalewski


  • 3. Data: 2009-01-15 05:47:03
    Temat: Re: Sprawdzanie poprawności formularzy
    Od: "Gabriel" <z...@p...fm>


    Użytkownik "Mirosław Zalewski" <miniopl@CUT_THIS.gmail.com> napisał w
    wiadomości news:20090114230931.1ebe8406@pingwin.place.you.dont.
    want.to.be...
    > Myślę że w tej kwestii można zaufać PPK. Zapoznaj się z informacjami na
    > stronie http://www.quirksmode.org/js/forms.html [...]

    Dziekuje bardzo
    Zaraz sobie to wszystko sprawdze.




    --
    Pozdrawiam
    Gabriel Zastawnik
    http://www.sigsoft.pl - Monitoring Komputera





  • 4. Data: 2009-01-22 18:20:13
    Temat: Re: Sprawdzanie poprawności formularzy
    Od: "Gabriel" <z...@p...fm>


    Użytkownik "Gabriel" <z...@p...fm> napisał w wiadomości
    news:gkmipk$gdq$1@atlantis.news.neostrada.pl...
    > Dziekuje bardzo
    > Zaraz sobie to wszystko sprawdze.

    Moge potwierdzic - niezwykle przydatny artykul.
    Co wiecej - na podstawie zamieszczonych kodow zrodlowych (w ktorych jest
    kilka bledow niestety, ale mozna je latwo wylapac) mozna napisac niezwykle
    prosty i intuicyjny mechanizm sprawdzania roznego rodzaju formularzy.

    Zdecydowanie polecam!



    --
    Pozdrawiam
    Gabriel Zastawnik
    http://www.sigsoft.pl - Monitoring Komputera



  • 5. Data: 2009-01-22 20:15:13
    Temat: Re: Sprawdzanie poprawności formularzy
    Od: Mirosław Zalewski <miniopl@CUT_THIS.gmail.com>

    styczeń roku pamiętnego 2009, prawdopodobnie 22. Wielka mądrość na
    czytelników pl.comp.www spłynęła, gdy tako rzekł(a) Gabriel:

    > Co wiecej - na podstawie zamieszczonych kodow zrodlowych (w ktorych
    > jest kilka bledow niestety, ale mozna je latwo wylapac)

    Możesz napisać coś więcej? Nawet pal licho grupę, ale myślę że PPK
    będzie bardzo zainteresowany ich poprawą.
    --
    Niżej podpisany, zamieszkały w http://minio.xt.pl ,
    Mirosław Zalewski


  • 6. Data: 2009-01-22 20:38:30
    Temat: Re: Sprawdzanie poprawności formularzy
    Od: "Gabriel" <z...@p...fm>


    Użytkownik "Mirosław Zalewski" <miniopl@CUT_THIS.gmail.com> napisał w
    wiadomości news:20090122211513.4dbe0f01@pingwin.place.you.dont.
    want.to.be...
    styczeń roku pamiętnego 2009, prawdopodobnie 22. Wielka mądrość na
    czytelników pl.comp.www spłynęła, gdy tako rzekł(a) Gabriel:
    > Możesz napisać coś więcej? Nawet pal licho grupę, ale myślę że PPK
    > będzie bardzo zainteresowany ich poprawą.

    Pewnie.
    Wezmy kod ze strony http://www.quirksmode.org/dom/error.html
    Ten interesowal mnie najbardziej.

    Moj kod formularza:
    <form action="send.php" method="post" id="formularz_pytania_uwagi"
    onsubmit="return validate();">
    <fieldset>
    <legend>Formularz kontaktowy</legend>
    <p> <label for="imie_nazwisko">imię i nazwisko:</label><br />
    <input name="imie_nazwisko" id="imie_nazwisko" />
    </p>
    <p> <label for="email">adres email:</label><br />
    <input name="email" id="email" />
    </p>
    <p> <label for="tresc_maila">treść wiadomości:</label><br />
    <textarea name="tresc_maila" id="tresc_maila" rows="10"
    cols="10"></textarea>
    </p>
    <input name="przycisk" type="submit" value="wyślij" class="przycisk" />
    </fieldset>
    </form>

    Czyli - najprostszy z mozliwych.

    Kod umieszczony na w/w stronie sprawdza kolejne elementy danego formularza
    poczawszy od i=0 do liczby elementow zawartych w formularzu:
    for (var i=0;i<x.length;i++) {
    if (!x[i].value)
    writeError(x[i],'This field is required');
    }

    Oznacza to, ze w przypadku formularza zrobionego ze znacznikiem fieldset,
    ktory powinien byc umieszczony w tzw. uzytecznych i zgodnych ze standardami
    formularzach, nigdy formularz nie bedzie poprawny. Bo element i=0 to wlasnie
    fieldset.
    Nalezy wtedy odliczac od i=1
    No i po co sprawdzac element ostatni, czyli przycisk "wyslij" ?
    Zatem odliczamy od i=1 do i=x.length-1

    Kolejna poprawka dotyczy fragmentu:
    if (!W3CDOM) alert(errorstring);

    Autor po prostu wyszedl z zalozenia, ze jesli przegladarka nie obsluguje
    modelu DOM, to powinien pojawic sie komunikat o bledzie.
    A ja sie pytam - po co? Zeby Klient nie wyslal formularza? Powinien zostac
    zwrocony true, zeby formularz poszedl, a jego obrobka w tym momencie powinna
    zostac przejeta po stronie serwera.

    Oczywiscie nie mozna tu mowic o bledzie sensu stricte, ale chociaz by w
    wyjasnieniu mozna dac szerszy komentarz na ten temat.

    To samo dotyczy kodu ze strony http://www.quirksmode.org/js/formex.html

    Ale tak jak napisalem - poza takimi nielicznymi przypadkami, gdzie cos
    samemu sobie trzeba dopracowac, to artykul jest rewelacyjny.



    --
    Pozdrawiam
    Gabriel Zastawnik
    http://www.sigsoft.pl - Monitoring Komputera






  • 7. Data: 2009-01-22 21:30:29
    Temat: Re: Sprawdzanie poprawności formularzy
    Od: Mirosław Zalewski <miniopl@CUT_THIS.gmail.com>

    styczeń roku pamiętnego 2009, prawdopodobnie 22. Wielka mądrość na
    czytelników pl.comp.www spłynęła, gdy tako rzekł(a) Gabriel:

    > Oznacza to, ze w przypadku formularza zrobionego ze znacznikiem
    > fieldset, ktory powinien byc umieszczony w tzw. uzytecznych i
    > zgodnych ze standardami formularzach, nigdy formularz nie bedzie
    > poprawny. Bo element i=0 to wlasnie fieldset.
    > Nalezy wtedy odliczac od i=1

    Generalnie masz rację. Chociaż ja, w celu zachowania większej ogólności
    funkcji, po prostu sprawdzałbym czy elementem jest <fieldset> i --
    jeżeli tak -- wywoływał kolejną iterację pętli:

    if(x[i].nodeName == 'FIELDSET') continue;

    Dzięki temu funkcja będzie identycznie działała zarówno dla tych
    formularzy które <fieldset> zawierają, jak i tych którym go brak.

    Chociaż, oczywiście, jeżeli ktoś jest pewien że zawsze wszystkie jego
    formularze będą zawierały ten znacznik, może zaczynać iterację od
    drugiego elementu.

    > No i po co sprawdzac element ostatni, czyli przycisk "wyslij" ?
    > Zatem odliczamy od i=1 do i=x.length-1

    Myślę że to trochę czepianie dla czepiania ;) . Przycisk do wysyłania
    zawsze ma wartość (value), więc żaden dodatkowy kod nie będzie dla
    niego wykonany. Ewentualny wpływ na prędkość wykonywania kodu jest
    raczej marginalny, a może i nawet niezmierzalny.

    Choć rozumiem Twój argument, gdyż osobiście też lubię czepiać się
    szczegółów ;) .

    Ale... teraz mi przyszło do głowy -- przecież przycisk do wysyłania
    formularza wcale nie musi być jego ostatnim elementem.

    > Kolejna poprawka dotyczy fragmentu:
    > if (!W3CDOM) alert(errorstring);
    >
    > Autor po prostu wyszedl z zalozenia, ze jesli przegladarka nie
    > obsluguje modelu DOM, to powinien pojawic sie komunikat o bledzie.
    > A ja sie pytam - po co? Zeby Klient nie wyslal formularza? Powinien
    > zostac zwrocony true, zeby formularz poszedl, a jego obrobka w tym
    > momencie powinna zostac przejeta po stronie serwera.

    Już pisałem płomienną tyradę ;), kiedy zorientowałem się:
    chodzi Ci o to, że alert jest uruchamiany bez względu na to, czy
    ,,errorstring" jest niepusty? Innymi słowy: jedynie na podstawie tego,
    czy przeglądarka obsługuje model DOM? A przecież pomimo braku jego
    obsługi, formularz może być wypełniony poprawnie.

    Tylko, jeżeli się nie mylę, nie masz racji co do konsekwencji --
    wywołanie alert() nie wpływa na zatrzymanie wysyłania formularza. W
    przypadku gdy formularz będzie wypełniony poprawnie a przeglądarka nie
    będzie obsługiwała modelu DOM, po kliknięciu <input type="submit">
    pojawi się puste okienko. Po kliknięciu ,,ok" nastąpi normalne wysyłanie
    formularza.

    Jednak fakt faktem -- tego okienka nie powinno w ogóle być.

    > Oczywiscie nie mozna tu mowic o bledzie sensu stricte, ale chociaz by
    > w wyjasnieniu mozna dac szerszy komentarz na ten temat.

    Właśnie spodziewałem się jakichś błędów w składni JS, pokroju
    niedomkniętego nawiasu czy czegoś podobnego.

    To jak -- wyślesz e-maila do PPK czy ja mam to zrobić? :)
    --
    Niżej podpisany, zamieszkały w http://minio.xt.pl ,
    Mirosław Zalewski


  • 8. Data: 2009-01-22 21:52:04
    Temat: Re: Sprawdzanie poprawności formularzy
    Od: "Gabriel" <z...@p...fm>


    Użytkownik "Mirosław Zalewski" <miniopl@CUT_THIS.gmail.com> napisał w
    wiadomości news:20090122223029.55b0b734@pingwin.place.you.dont.
    want.to.be...
    styczeń roku pamiętnego 2009, prawdopodobnie 22. Wielka mądrość na
    czytelników pl.comp.www spłynęła, gdy tako rzekł(a) Gabriel:

    > Generalnie masz rację. Chociaż ja, w celu zachowania większej ogólności
    > funkcji, po prostu sprawdzałbym czy elementem jest <fieldset> i --
    > jeżeli tak -- wywoływał kolejną iterację pętli:
    > if(x[i].nodeName == 'FIELDSET') continue;
    > Dzięki temu funkcja będzie identycznie działała zarówno dla tych
    > formularzy które <fieldset> zawierają, jak i tych którym go brak.

    Rewelacyjny pomysl:)
    Wezme wprowadze modyfikacje w swojej wersji skryptu.
    Lubie ogolne rozwiazania.

    > No i po co sprawdzac element ostatni, czyli przycisk "wyslij" ?
    > Zatem odliczamy od i=1 do i=x.length-1
    > Myślę że to trochę czepianie dla czepiania ;) . Przycisk do wysyłania
    > zawsze ma wartość (value), więc żaden dodatkowy kod nie będzie dla
    > niego wykonany. Ewentualny wpływ na prędkość wykonywania kodu jest
    > raczej marginalny, a może i nawet niezmierzalny.

    Oczywiscie. Masz pelna racje. Mimo wszystko jakos tak mi sie to nie
    podobalo:)

    > Ale... teraz mi przyszło do głowy -- przecież przycisk do wysyłania
    > formularza wcale nie musi być jego ostatnim elementem.

    W zasadzie racja.
    Jedyne zatem, co by mozna bylo tu usprawnic, to wykrywanie przycisku submit
    Ale to juz czepianie dla czepiania, wiec mozna jedynie o tym wspomniec w
    komentarzu do kodu.

    > Jednak fakt faktem -- tego okienka nie powinno w ogóle być.
    O to mi chodzilo wlasnie - o uniezaleznienie dzialania skryptu od tego czy
    przegladarka obsluguje, czy nie obsluguje DOM.
    Bo jesli nie obsluguje - to powinno sie od razu puscic formularz dalej do
    serwera i sprawdzic go po stronie cgi.
    Co bowiem mozna madrego napisac w tym alercie? "Niestety nie dalismy rady
    sprawdzic poprawnosci wypelnienia formularza, bo Twoja przegladarka costam
    nieteges" ?;) Wogole IMO jakikolwiek alert w tym miejscu bedzie zly.

    > Właśnie spodziewałem się jakichś błędów w składni JS, pokroju
    > niedomkniętego nawiasu czy czegoś podobnego.
    Nie. Tu akurat wszystko ok.

    > To jak -- wyślesz e-maila do PPK czy ja mam to zrobić? :)

    Jezeli mozesz - to wyslij.
    Nie czuje sie kompetentny na tyle, by zwracac komus uwage na te rzeczy.


    --
    Pozdrawiam
    Gabriel Zastawnik
    http://www.sigsoft.pl - Monitoring Komputera





  • 9. Data: 2009-01-22 22:19:13
    Temat: Re: Sprawdzanie poprawności formularzy
    Od: Mirosław Zalewski <miniopl@CUT_THIS.gmail.com>

    styczeń roku pamiętnego 2009, prawdopodobnie 22. Wielka mądrość na
    czytelników pl.comp.www spłynęła, gdy tako rzekł(a) Gabriel:

    > > Generalnie masz rację. Chociaż ja, w celu zachowania większej
    > > ogólności funkcji, po prostu sprawdzałbym czy elementem jest
    > > <fieldset> i -- jeżeli tak -- wywoływał kolejną iterację pętli:
    > > if(x[i].nodeName == 'FIELDSET') continue;
    >
    > Rewelacyjny pomysl:)
    > Wezme wprowadze modyfikacje w swojej wersji skryptu.
    > Lubie ogolne rozwiazania.

    :)

    To jeszcze dwie uwagi. Ale zaznaczam że nie jestem ich pewien i przed
    ich wprowadzeniem należałoby sprawdzić czy są one uzasadnione.

    Po pierwsze, gdyby jakaś przeglądarka zwróciła nodeName nieskładające
    się z samych majuskuł, element ten -- pomimo bycia <fieldset> -- nie
    zostałby pominięty. Dlatego można rozważyć jeszcze wykonywanie
    metody toUpperCase() na otrzymanym ciągu w celu upewnienia się, że
    wielkość znaków nie wpłynie na porównywanie. Ale jeżeli specyfikacja
    nakazuje aby nodeName zawierało tylko wielkie litery i wszystkie
    popularne przeglądarki tak robią, nie jest to konieczne.

    Po drugie, jeżeli <fieldset> może być tylko i wyłącznie pierwszym
    dzieckiem <form>, to zamiast sprawdzać wszystkie elementy czy są
    fieldset, można to sprawdzić jeszcze przed iteracją.

    var i = (x[0].nodeName == 'FIELDSET) ? Number(1) : Number(0);
    for (i; i< x.length; i++) { // i tak dalej

    Jeżeli jednak <fieldset> może wystąpić gdziekolwiek w formularzu, taka
    poprawka wprowadzi tylko błąd. Ja nie sprawdzałem, ale pewnie
    specyfikacja HTML o tym wspomina.

    > Jedyne zatem, co by mozna bylo tu usprawnic, to wykrywanie przycisku
    > submit Ale to juz czepianie dla czepiania, wiec mozna jedynie o tym
    > wspomniec w komentarzu do kodu.

    Nie jestem pewien czy można w tym kontekście użyć słowa ,,usprawnić" ;) .

    > Co bowiem mozna madrego napisac w tym alercie? "Niestety nie dalismy
    > rady sprawdzic poprawnosci wypelnienia formularza, bo Twoja
    > przegladarka costam nieteges" ?;) Wogole IMO jakikolwiek alert w tym
    > miejscu bedzie zly.

    Nie nie, model DOM jest wykorzystywany tylko do poinformowania
    użytkownika o niepoprawnie wypełnionym formularzu. Sprawdzanie owej
    poprawności odbywa się niezależnie od niego.

    Idea jest taka -- jeżeli przeglądarka obsługuje model DOM, dynamicznie
    tworzymy informacje o błędach przy samych polach formularza. Jeżeli
    nie, używamy alert(). Jest to funkcja tak podstawowa, że chyba nie
    istnieje przeglądarka z JS która by jej nie obsługiwała.

    > > To jak -- wyślesz e-maila do PPK czy ja mam to zrobić? :)
    >
    > Jezeli mozesz - to wyslij.
    > Nie czuje sie kompetentny na tyle, by zwracac komus uwage na te
    > rzeczy.

    Oj tam ,,kompetentny" -- każdy może się pomylić, niezależnie od poziomu
    swojej wiedzy. A ,,guru" jest chyba wystarczająco inteligentny, by o tym
    wiedzieć.

    Chyba że chodziło o kompetencje językowe.

    Niemniej ok -- zaraz przekażę PPK Twoje uwagi.
    --
    Niżej podpisany, zamieszkały w http://minio.xt.pl ,
    Mirosław Zalewski


  • 10. Data: 2009-01-23 05:39:03
    Temat: Re: Sprawdzanie poprawności formularzy
    Od: "Gabriel" <z...@p...fm>


    Użytkownik "Mirosław Zalewski" <miniopl@CUT_THIS.gmail.com> napisał w
    wiadomości news:20090122231913.622c6da7@pingwin.place.you.dont.
    want.to.be...

    > Oj tam ,,kompetentny" -- każdy może się pomylić, niezależnie od poziomu
    > swojej wiedzy. A ,,guru" jest chyba wystarczająco inteligentny, by o tym
    > wiedzieć.

    :)
    No to jak juz tak modyfikujemy, to nie zapomnimy o polach typu hidden,
    ktorych nie powinnismy rowniez sprawdzac pod wzgledem poprawnosci
    zawartosci.
    W 99% przypadkow umieszczone sa celowo i mogą w pewnych okolicznosciach nie
    byc wypelnione.

    > Chyba że chodziło o kompetencje językowe.

    Nie. Z tym bym sobie poradzil:) Ogolnie chodzilo mi o to, ze javascript
    uzywam okazjonalnie i o ile jestemn w stanie zrozumiec skrypty i w jakims
    stopniu samodzielnie przystosowywac je do tego by dzialaly, to sam raczej
    nic w tym jezyku nie pisze.

    > Niemniej ok -- zaraz przekażę PPK Twoje uwagi.

    _nasze_ jak juz cos:)
    Bo na pewno nie tylko moje.


    --
    Pozdrawiam
    Gabriel Zastawnik
    http://www.sigsoft.pl - Monitoring Komputera


strony : [ 1 ] . 2 . 3


Szukaj w grupach

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: