Starší komentáře ke článku: Kontrola formulářových údajů v PHP

Zpět na článek | Úvodní stránka Interval.cz

Avatar

Autor komentáře: IW

Datum vložení: 4.4.2003 8:28:57

Soubor ke stažení není ke stažení...

Avatar

Autor komentáře: Ondrej Jurecek

Datum vložení: 4.4.2003 9:01:59

..ale to reseni se mi nelibi. Jiz jsem o podobne veci premyslel a prozatim jsem to vyresil funkci, ktera pouze ziskava data bud z pole $_POST nebo $_GET. (mimochodem, kdyz predam 2 hodnoty z formulare metodou GET a zaroven POST pod stejnym jmenem, budou v $_REQUEST obe?)
Toto mam jako "docasne" reseni.. Taky jsem uvazoval prave o tech kontrolach a mam pocit, ze kdybych do takove funkce (nebo objektu, chcete-li) zahrnul vsechny, stane se z toho neprehledny a casem tezko pouzitelny zmetek - a takto se mi jevi reseni z clanku.

Nelibi se mi kontrola datumu, emailu, prevod kodovani retezce.. jinymi slovy, efektivne pouzitelnemu objektu bych nechal pouze konverzni metody (na integer, na float, na array..) a metodu ereg (nebo preg). A pokud jde napr. o kontrolu zadani emailu, www adresy, rodneho cisla, datumu, casu atd., mel by to IMHO mit na starosti specializovany potomek teto tridy (uziti dedicnosti). Ten by pracoval na vyssi urovni, veskere konverzni rutiny by byly ulozeny v DB...

Hmmmm, takova je moje predstava. ;-)

Avatar

Autor komentáře: Vit Peprnicek

Datum vložení: 4.4.2003 21:18:28

Ta třída umí kontrolovat i kontertovat vstupni parametry podle ereg, preg i podle uživatelem definovane funkce, ty funkce pro kontrolu emailu a datumu jsou tam pro to že se takové vstupy ve formulářích dost často objevují, kontrola rodného čísla samozřejmě přímo v kódu nebude na to je tam treba ereg. Jinak myslim ze vytvoření samostatného potomka treba jen pro email a www adresu by bylo v tomto případě asi zbytečné, pokud by toho bylo více, nebo něco více specializované tam už by to smysl mělo.

Avatar

Autor komentáře: Ondrej Jurecek

Datum vložení: 5.4.2003 10:32:31

Stojim pred vami v roli kritika. Jiz jsem nad takovou tridou premyslel a to co jsem vymyslel, jsem nebyl schopen v tak rychle dobe navrhnout a naprogramovat. Inu, pokud se do toho pustim a budu mit odvahu:), napisi clanek "Kontrola formularovych udaju v PHP pro narocne".
Vase reseni bych pouzil na jednoduche veci (viz 'chcem dostavat info e-mailom'), ale jiste ne na vetsi projekty - tam vyzaduji propracovanejsi reseni. Ale budme konkretni!

1. Ja bych vam to lepe namaloval nez slovy popsal.. spatne jste me pochopil. Nemel jsem na mysli psat pro kazdou specializaci tridu, nybrz samotnou <B>tridu pro specializace</B>. A to tak, ze vase trida tUserDataChecker by byla na te nejnizsi urovni - mela by na starost viz muj predchozi vstup.

2. Vase reseni tridy tUserDataChecker ma tu slabinu, ze pokud <B>casem</B> zjistim, ze dost casto potrebuji validovat napr. rodne cislo, prirozene (primo to prece vyplyva z povahy navrhu tridy) vytvorim novou metodu IS_RC. Neustale se tak rozsiruje interface, v jehoz dusledku pak v tomto pripade nevidim vyhodu objektoveho programovani... (na tohle prosim nereagujte, patri to spis do jine diskuse). Mimochodem, jak chcete validovat rodne cislo nebo cislo uctu funkci ereg?

3. Toto reseni nepodporuje "dost dobre" myslenku RE-USE (znovupouzitelnost kodu). Pokud budu na dvou,trech..deseti mistech zpracovavat formular a validovat treba zminene rodne cislo, musim objektu pokazde predat pravidla.. Hmm, co kdyz se casem pravidlo pro validaci rodneho cisla zmeni? Co pak? Odpovim si sam: musim toto pravidlo prepsat na vsech mistech, kde ho objektu predavam. Toto muzete resit tim, ze si nadefinujete globalni konstanty.. OK, jde vsak pouze o optimalizaci. Inovaci by bylo vyuzivat <I>knihovnu pravidel</I>.

4. Jsem skepticky u volani "uzivatelsky definovanych funkci".. Pokud bych pristoupil na tutu myslenku, chtel bych pak mit vedle tridy tUserDataChecker tridu tFunctionsForChecker. Mohu volat jako uzivatelsky definovanou funkci napr. $objFunctionsForChecker->email?? Jednou jsem to zkousel a nepovedlo se mi to.. treba jsem udelal nekde chybu. Pokud to nejde, je to dalsi krok vedle OOP. ;o) I kdyz pripoustim, ze v tomto pripade bych pohnul s navrhem a tu tridu bych do ni spise rovnou agregoval.

Add 1. nejste nahodou z Moravy, ze bych vam to nakreslil? :-)

Avatar

Autor komentáře: Vita

Datum vložení: 5.4.2003 13:26:45

Jo, je pravda ze to slo napsat lip. pred tydnem jsem podobnou knihovnu vytvoritl a radsi mam vsecko ve funkcich sdruzenych v tride. Proste
$check -> billid ($billid), $check -> birthday ($bday) atd...

Avatar

Autor komentáře: Ondrej Jurecek

Datum vložení: 6.4.2003 11:30:40

Volil bych jiny navrh.. viz bod 2

Avatar

Autor komentáře: Vít Peprníček

Datum vložení: 6.4.2003 16:19:36

<I>napisi clanek "Kontrola formularovych udaju v PHP pro narocne". </I> udělejte to rád se poučím.
<I>Mohu volat jako uzivatelsky definovanou funkci napr. $objFunctionsForChecker->email?? Jednou jsem to zkousel a nepovedlo se mi to.. treba jsem udelal nekde chybu.</I> neco podobného mi taky nechtělo fungovat, bud chyba v PHP nebo jsem udelal stejnou chybu jako vy. moc jsem se tím nezabýval.
<I>Add 1. nejste nahodou z Moravy, ze bych vam to nakreslil? :-) </I> Ano jsem z Moravy :) múžete mi to klidně nakreslit :)

Avatar

Autor komentáře: filda

Datum vložení: 4.4.2003 11:05:43

<a href='http://pear.php.net' target='_blank'>http://pear.php.net</a>

to je asi tak vsechno co sem chtel rict

Avatar

Autor komentáře: Ondrej Jurecek

Datum vložení: 4.4.2003 12:00:56

..upresnim odkaz: <a href='http://pear.php.net/package-info.php?pacid=58' target='_blank'>http://pear.php.net/package-info.php?pacid=58</a>
Pane kolego a nemate nejakou praktickou ukazku? :)

Avatar

Autor komentáře: Jméno a příjmení

Datum vložení: 4.4.2003 13:42:18

Nepouzitelne, generuje to taky prasacky kod ze az... Na jednodhuche formulare je to az prilis zlozite a na zlozite to nestaci.

ak mate formular ktory chcete inteligentne validovat tak je si to lepsie spravit sam. Napr. ked zaskrtnem 'chem dostavat info e-mailom' az potom budem kontrolovat e-mail, inac mi je to fuk.

Chyba kniznice z pearu je to ze ma napojenie na HTML. Ovela ucelnejsie by bolo spravit funkciu/kniznicu ktora by len validovala vstup. Vedeli by ste jej povedat ze z kadial si ma zobrat data (GLOBAL, GET, POST, COOKIE, SESSION,...), ako sa maju volat premenne (form_*), vedela by validovat zakladne typy: cislo od-do, retazce podla regexpov a zavolat custom validacnu funkciu. Ako vystup by bol zoznam premennych ktore niesu ok.

Avatar

Autor komentáře: Vita

Datum vložení: 4.4.2003 20:43:36

Nerad bych vas zklamal, ale soubor s tridama muze mit klidne deset mega a je to jedno. Server si totiz vyhodnocuje ktere soubory se pozuivaji casto a ty ktere ano si natahne do operacni pameti a pak uz pracuje pouze s funkcemi z techto souboru bez jejich natahovani. Takze pokud si ubastlite 10timegovou knihovnu a budete ji mit zvlast, rozdil proti ctyrkilovemu specializovanemu kodu nepoznate. Mozna to s tou knihovnou bude absurdne rychlejsi, protoze v ni budou opakovane pouzivane funkce a server bude pracovat s mensimi soubory.

Nehlede na to ze pokud mate takovou knihovnu (ano, ja si podstive bastlim sve tridy) a delate na ni zmeny, tak ji muzete zpetne nahrat na vsecky servery a zlepsovat jejich funkcnost...

Avatar

Autor komentáře: Ondrej Ivanic

Datum vložení: 4.4.2003 21:24:24

A aky to ma suvis s tym co som napisal??? Akych 10mega je to reply na to co som napisal (no cookie asi niesu na kazdom kompe :) ) alebo je to len tak od veci?

Avatar

Autor komentáře: Filda

Datum vložení: 5.4.2003 0:34:30

Pokud vam nevyhovuje to ze to generuje html tak zkuste treba package PEAR:Validate ktera dela presne to co potrebujete

a nebo je tu jeste PEAR:HTML_Form starsi a jednodussi braska QuickFormu

Avatar

Autor komentáře: Karel Zak

Datum vložení: 4.4.2003 15:32:48

Pro nekoho kdo by to chtel implementovat efektivne tak doporucuji se podivat do dokumentace Zope (aplikacni server v Pythonu). Tam jde zakladni datovy typ definat uz v nazvu promenne ktere jde do formulare.
<input name="neco:int">

Do skriptu to pak uz jde "neco" rovnou jako INT.

Avatar

Autor komentáře: Ondrej Jurecek

Datum vložení: 4.4.2003 15:45:01

Jestli vas chapu, tak tento pozadavek (pri odeslani formulare) zpracuje aplikacni server Pythonu a <B>podle nazvu parametrů</B> predava prijate hodnoty skriptu v urcenem datovem typu.

Napada me otazka: Je to bezpecne? Co kdyz to nekdo podrhne a posle serveru "neco:char" misto "neco:int"? Pak by mohlo dojit treba k run-time error. ;-) Neznam Zope, mate link?

Avatar

Autor komentáře: Jméno a příjmení

Datum vložení: 5.4.2003 9:05:57

> "Neznam Zope, mate link?"

<a href='http://www.zope.org/' target='_blank'>http://www.zope.org/</a>

Avatar

Autor komentáře: Karel Zak

Datum vložení: 7.4.2003 14:12:01

Pochopitelne, ze vam tam muze nekdo neco vnutit, pokud ale by zde byl engine ktery provadi kontrolu na datatove typy parametru funkci, ktere vola tak to neni problem -- tedy problem jen pro zleho hocha co modifikoval URL, protoze by dostal error hlasku.

IMHO je PHP dost svobodumyslne ohledne volani skriptu, podle mne by zakladni kontrola povolenych parametru mela byt uz v PHP pred zavolani skriptu.

Avatar

Autor komentáře: Ondrej Ivanic

Datum vložení: 7.4.2003 19:40:28

Nie, je velmy dobre ze tam ta kontola nieje. Kontolu si musi spravit programator. Robilo by to len zbytocne problemy.

Avatar

Autor komentáře: Screamer

Datum vložení: 25.8.2004 12:48:44

to je vec zvyku, v C/C++/C# se to dela bezne a nikomu to neprijde, v PHP je to akorat pohodlnejsi

Avatar

Autor komentáře: bia013

Datum vložení: 5.4.2003 18:06:27

A co tak kontrolavat zadavane data pomoci regularnich vyrazu? Myslim, ze to je eleg. reseni, ktere pouzivam.

Avatar

Autor komentáře: Camron

Datum vložení: 6.4.2003 15:27:12

to si nemylsim. Co kdyz na server poslu data, ktera vam polozi zpracovavani reg. vyrazu? A to, ze se takova data nedaji napsat... tak to by ste se divil!!!!!!!!!!!!! Reg. vyrazy - prosim opatrne s nima.. Sou fajn, nejsou samospasitelne.

Camron

Avatar

Autor komentáře: peta

Datum vložení: 15.2.2004 23:10:19

prosim prosim o ukazku takovych dat a patricneho r.v.

Avatar

Autor komentáře: Screamer

Datum vložení: 25.8.2004 12:50:39

to je zajimave, taky bych rad videl ukazku prosim

Zpět na článek | Úvodní stránka Interval.cz