View previous topic :: View next topic |
Author |
Message |
fanatic
Joined: 02 Nov 2004 Posts: 81 Location: vienna
|
Posted: 02.01.2006 16:17 Post subject: fleksibilan update mysql baze putem form based sucelja |
|
|
jutro svima & svako dobro u 2006
nakon sto po deseti puta hardkodiram (php) update baze, rekoh sigurno ima neka fleksibilna varijanta koja ce mi ustediti mukotrpno prepisivanje imena polja u query-ima?
prvo sto mi je palo na pamet je - ugrubo receno - nazvati elemente formulara istim imenima kao polja u bazi, pa onda provrtiti kroz $_POST array i kreirati odgovarajuci query, ali siguran sam da to nije najinteligentnija ideja, tj. da vec postoji open source klasa koja rjesava ovaj problem.
kako vi rjesavate ovaj problem? i, btw, do sada sam obicno validirao formular javascriptom, ima li rezona da se ovo radi server side?
thx... |
|
|
Back to top |
|
|
retro_one
Joined: 16 Sep 2003 Posts: 880 Location: DUBRAVA.
|
Posted: 02.01.2006 16:47 Post subject: |
|
|
ja koristim adodb database layer koji ima autoexecute metodu koja generira sql
http://adodb.sourceforge.net |
_________________ Just your average eccentric programmer. |
|
Back to top |
|
|
fanatic
Joined: 02 Nov 2004 Posts: 81 Location: vienna
|
|
Back to top |
|
|
unique
Joined: 29 Mar 2004 Posts: 655
|
Posted: 02.01.2006 17:25 Post subject: Re: fleksibilan update mysql baze putem form based sucelja |
|
|
fanatic wrote: | kako vi rjesavate ovaj problem? i, btw, do sada sam obicno validirao formular javascriptom, ima li rezona da se ovo radi server side?. |
pa (imo) mislim da bi trebalo jos i 'na serveru' provjerit dali je sve uredu a ovaj client side ostavit radi usera ... jer je moguce ako netko zeli radit sr'nja da ce samo poslat taj POST (GET) data samostalno bez da prolazi kroz tvoju client-side validaciju... :/ |
_________________ Activate interlock! Dynotherms connected! Infracells up! Mega thrusters are go! LET'S GO VOLTRON FORCE! |
|
Back to top |
|
|
Sulien
Joined: 04 Jan 2004 Posts: 2905 Location: Zagreb
|
Posted: 02.01.2006 18:04 Post subject: |
|
|
UVIJEK napravi strogu server side validaciju ako dopuštaš bilo kome da ispunjava neke tamo forme (kao što su kontakt forme ili blog-like komentari)
Što se tiče SQL-a i ja preporučam layer kao adodb. Osobno ga ne koristim jer sam napisao layer koji mi generira query-e kakve želim - dao bih ti ga da je spreman ali eto još je uvijek navrat-nanos |
|
|
Back to top |
|
|
fanatic
Joined: 02 Nov 2004 Posts: 81 Location: vienna
|
Posted: 02.01.2006 18:11 Post subject: |
|
|
ja bih bio sretan i da ugrubo opises na kojem principu radi, jer se svakako spremam sam napisati nesto slicno |
|
|
Back to top |
|
|
Sulien
Joined: 04 Jan 2004 Posts: 2905 Location: Zagreb
|
Posted: 02.01.2006 19:33 Post subject: |
|
|
Princip je jednostavan ako pristaješ radit na jedan malo drugačiji način. Prvo sam napisao generičku klasu za apstrakciju između MySQL i Postgres sličnu kao adodb ali sličniju PDO. ADO mi je bio prevelik i premoćan a PDO nije bio stabilan kao sada i neke mi se stvari nisu sviđale, makar trenutno radim na tome da wrappam i PDO metode u svoju klasu. Apstrakcija ti u principu ne treba ali ja se ne volim čvrsto vezati uz određenu bazu.
Nakon toga napraviš generičku klasu koja, kad se instancira sa imenom tablice i handlerom za bazu, analizira tablicu pomoću "DESCRIBE TABLE" (MySQL) ili jako kompliciranim queryem (Postgres) te spremi rezultate analize u svoje class property-e. Klasa definira i osnovne CRUD metode tako da za insert i update jedino što joj trebaš predati jest array sa podacima (može biti i POST). Klasa validira na temelju podataka analize tablice, escapea stringove i generira INSERT ili UPDATE. READ bi bio obični "SELECT * FROM" ako nemaš foreign keyeve koje bi htio zamijeniti sa podacima koje referenciraju, onda se stvari lagano kompliciraju ali i to sam riješio. Sve to ide preko primary keyeva koje klasa poznaje jer je analizirala tablicu.
Nakon što imaš osnovnu klasu, širiš je za posebne potrebe. Znači, napraviš klasu koja proširuje osnovnu klasu i redefinira njene metode koristeći naravno stare. U toj proširenoj klasi definiraš kompliciraniju logiku validacije, many-to-one ili one-to-many relationships i slično.
Osnovna klasa naravno ima i generateForm() metodu koja generira HTML formu DOM metodama. Time za općenitu namjenu developer ne mora koristiti ništa više od spomenute osnovne klase.
Naravno sve ovo je teški OOP i DOM pa naravno implicira i PHP5 ... za koji smo tek nedavno, na sramotu mnogo providera, počeli imati hosting (Plus nudi, Iskon skoro, Inside brijem, a onda će i drugi) - svejedno, switch treba napravit što prije |
|
|
Back to top |
|
|
fanatic
Joined: 02 Nov 2004 Posts: 81 Location: vienna
|
Posted: 02.01.2006 23:44 Post subject: |
|
|
kao sto rekoh, ja koristim ezSQL - http://www.jvmultimedia.com/home/articles.php?articleId=2 - koji podrzava vise nego mi treba: mySQL, Oracle8, InterBase/FireBird, PostgreSQL, SQLite (PHP), SQLite (C++) i MS-SQL i moram reci da radi bez problema. ADO nisam iskusao, ali mi se nesto ne da prepisivati ezSQL metode, ali prouciti cu malo dokumentaciju pa tko zna...
sto se slijedeceg odlomka tice, u kojem opisujes srce sistema (analiza tabele pomocu "DESCRIBE"), ne mogu tvrditi da te u potpunosti slijedim, ali, iako ti tvrdis da je jednostavno, radi se o kompleksnim zahvatima. no, princip mi je ugrubo jasan...
ostatak takodjer ide; nisam hardcore programer, ali sam davno naucio cijeniti blagodati OOP-a, jedino jos nisam siguran da sam u stanju samostalno rijesiti ovaj problem. ali, pa makar i za vjezbu, vrijedi pokusati.
na zalost, moj provider, inace ne los - http://www.bluehost.com, jos uvijek ne podrzava PHP5
zahvaljujem se na iscrpnom odgovoru, zaista respektiram tvoju spremnost da ulozis svoje vrijeme za opce dobro |
|
|
Back to top |
|
|
Sulien
Joined: 04 Jan 2004 Posts: 2905 Location: Zagreb
|
Posted: 02.01.2006 23:58 Post subject: |
|
|
Analiziranje tablice je komplicirano samo u Postgresu, gdje je zapravo i moćnije i daje više informacija. Što se tiče MySQL-a, probaj "DESCRIBE TABLE foo" pa vidi što ćeš dobiti
Planiram jednom napraviti opensource release svojih base klasa (Cache, Client, Scaffold, GDA - Generic Database Access, SinteX, String i Template). Mislim da će to puno pomoći ljudima. Klase nisu nikakvo napredno programiranje i nipošto nisu komplicirane, samo skraćuju dosadan repetitivan posao kroz koji svaki programer prolazi. Jedino zahtijevaju osnovno znanje OOP-a i, naravno, PHP5
Last edited by Sulien on 03.01.2006 00:04; edited 1 time in total |
|
|
Back to top |
|
|
retro_one
Joined: 16 Sep 2003 Posts: 880 Location: DUBRAVA.
|
Posted: 03.01.2006 00:00 Post subject: |
|
|
@sulien: Mislim da model ne bi trebao imati nista sa validacijom....validaciju bi trebala po mojem trebala odraditi nekakva helper funkcija koja presrece $_POST array. Po meni bi i controller i model trebali biti 'fat-free' funkcije bez ikakvih dodatnih featureva.
@fanatic: iskreno, mislim da ces manje posla imati sa prebacivanjem iz ezpdo-a u adodb nego da sam programiras taj dio.... |
_________________ Just your average eccentric programmer. |
|
Back to top |
|
|
fanatic
Joined: 02 Nov 2004 Posts: 81 Location: vienna
|
Posted: 03.01.2006 00:20 Post subject: |
|
|
kako radi DESCIBE je jasno, ali nisam bas skuzio kako dovesti u relaciju polja u tabeli s odgovarajucim poljima iz formulara.
no, mozda je zaista nije losa ideja preci na ADO...
@sulien: hoce li se u zbirci naci i kakva klasa za session management? |
|
|
Back to top |
|
|
retro_one
Joined: 16 Sep 2003 Posts: 880 Location: DUBRAVA.
|
Posted: 03.01.2006 00:29 Post subject: |
|
|
@fanatic: nije da sam ikako povezan sa adodb-om, ali adodb ima i mogucnost vodjenja sessiona kroz bazu |
_________________ Just your average eccentric programmer. |
|
Back to top |
|
|
Sulien
Joined: 04 Jan 2004 Posts: 2905 Location: Zagreb
|
Posted: 03.01.2006 02:06 Post subject: |
|
|
Eh, model i validacija... Jednom kad napišeš klasu koja proširuje osnovnu model klasu i u njoj definiraš logiku za validaciju to je već aplikacijska logika... meni je to model
tako i tako ja ne forsiram neki MVC nego samo osnovnu ideju iza njega (dokle to ide), mislim da je 'pravi' MVC moguć i ima smisla samo u event-driven okružju, znači u Javi, dok je o eventovima preko HTTP-a meni smiješno i razmišljati (eto već vidim nekog .NETovca kako će se ovdje ubacit)
Klasa za session management? Pa sigurno, za sustav logiranja itd... još nema ali nije to nešto komplicirano |
|
|
Back to top |
|
|
retro_one
Joined: 16 Sep 2003 Posts: 880 Location: DUBRAVA.
|
Posted: 03.01.2006 10:25 Post subject: |
|
|
mne...validacija meni nije poslovna logika, i definitivno ne spada u model....jer ces prema razlicitom izvorfu inputa raditi razlicitu validaciju...a model bi trebao raditi po sistemu
"one model to rule them all" bez obzira prema kakvom viewu je usmjeren...za mene su intercepting filteri idealna stvar za validaciju (ili nesto slicno). |
_________________ Just your average eccentric programmer. |
|
Back to top |
|
|
unique
Joined: 29 Mar 2004 Posts: 655
|
Posted: 03.01.2006 12:39 Post subject: |
|
|
retro_one wrote: | .za mene su intercepting filteri idealna stvar za validaciju (ili nesto slicno). |
a sto ako se neki (slucajno) get, post ne tice doticnog sustava, a validator:"aaaa sto je ovo!? sto!? run for your life!!!!1" :/ meni se cini bolje da kad nekom objektu dajes nesta da on sam zove validator "upomoc!" :) :/ |
_________________ Activate interlock! Dynotherms connected! Infracells up! Mega thrusters are go! LET'S GO VOLTRON FORCE! |
|
Back to top |
|
|
retro_one
Joined: 16 Sep 2003 Posts: 880 Location: DUBRAVA.
|
Posted: 03.01.2006 13:35 Post subject: |
|
|
hm...pa ne budes napisao tupav validator
validator mora znati na temelju $_GET, $_POST ili $_SESSION...whatever varijabli koju validaciju primjenjujes....uostalom ne radis nasumicnu validaciju na cijelom arrayu...nego znas koje polje treba odgovarati kojem validation ruleu |
_________________ Just your average eccentric programmer. |
|
Back to top |
|
|
unique
Joined: 29 Mar 2004 Posts: 655
|
Posted: 03.01.2006 14:04 Post subject: |
|
|
retro_one wrote: | hm...pa ne budes napisao tupav validator |
imas pravo |
_________________ Activate interlock! Dynotherms connected! Infracells up! Mega thrusters are go! LET'S GO VOLTRON FORCE! |
|
Back to top |
|
|
|