[ ColdKeyboard @ 27.02.2008. 17:52 ] @
Trenutno nesto eksperimentisem i interesuje me da li neko od vas ima neku jednostavnu ili prakticnu ideju za sledeci 'problem'.

Recimo da treba da napravim php formu koja se cuva u sql bazi takvu da svaki korisnik moze za sebe da dodaje novo polje, opis i vrijednost.

Npr. po default-u korisnik ima polja Ime, Prezime, email

E kako sada da stavim da on moze da obrise recimo polja Ime prezime i email kao i da recimo doda adresu, ili neku sl. glupost ?

Ja sam razmisljao npr. da napravim u SQL bazi tabelu u kojoj bi cuvao za svakog korisnika sva njegova polja odvojena sa nekim delimiterom
i kasnije kada ih citam da radim explode ali to mi se cini previse komplikovano i ostavlja previse mjesta korisniku da manipulise podatcima.

Ima li neko od vas bolje rjesenje ili prijedlog ?
[ Mister_rap @ 27.02.2008. 18:23 ] @
A da keiras tabelu sa odredjenim brojem polja pri cemu ce sva polja osim ime i prezime biti ne vidljiva sve dok korisnik ne kreira neko od njih!?
[ ColdKeyboard @ 27.02.2008. 22:51 ] @
hmmm, pa mozda bi moglo i tako ali onda bi opet morao imati polje za opis, za nazi i za vrijednost i sada ako korisnik hoce recimo 30 polja to bi znacila da ta tabela ima 90 tabela...

Prihvatljivo je i ovo, hvala na savjetu ali htio bih da vidim ima li jos neki jednostavniji ili bolji
nacin da se ovo uradi prije nego se upustim da radim na tom problemu...

Ima li jos neko rjesenje ?
[ dakipro @ 28.02.2008. 08:50 ] @
Pa napravis jednu tabelu sa listom dodatnih polja. npr:

lista_dodatnih_polja:
dodatna_polja_id | naziv_dodatnog_polja

Sad, kad neko kreira dodatno polje, ti pogledas dal to polje postoji, ako postoji uzmes postojeci id, ako ne, dodas ga pa uzmes njegov id i u veznu tabelu dodajes id-jeve polja koja je korisnk sebi dodao.

veza_dodatnih_polja:
fk_korisnik_id | fk_dodatna_polja_id


kad korisnik da vrednost tom polju, ti onda u trecoj tabeli dodas

veza_odgovora_korisnika_i_polja:
fk_korisnik_id | fk_dodatna_polja_id | odgovor

gde bi odgovor stavio da je 'text', cisto da podrzis raznorazne mogucnosti, a mozes i da stavis var_char ako znas da ce dodatna polja biti do recimo 255 karaktera.
Ovako nisi ogranicen brojem dodatnih polja. Mozda je malo sporije za pretragu recimo, ali ti isto omogucava da kreiras dinamicku pretragu. Doduse, ovo opterecenje bi imao sigurno kako god da resis dinamicka polja. Nadam se da sam dobro razumeo problem...
[ Man-Wolf @ 28.02.2008. 11:31 ] @
Mislim da je dakijevo resenje najbolje. Stim sto bi mozda postojao jedan "problemcic", odnosno pojava srodnih polja sa razlicitim imenima.

Konkretno:

Prvi korisnik doda polje: e mail
Drugi doda polje: e-mail
treci doda: email
a cetvrti: mail

Sva cetri polja se svode na isto ( E-mail adresa ), a opet bi se pojavila 4 nova reda u bazi .... :-)
Resenje bi verovatno bilo da das korisniku listu vec postojecih pa da izabere, ali problem bi se javio ako imas 1000 dodatnih polja, a korisnik je lenj :-))

[ dakipro @ 28.02.2008. 11:47 ] @
To jeste, mozda da izbacis sve znake osim razmaka, slova i brojeva, pa bi tako eliminisao mozda polje e-mail. A mozes i da ponudis sva postojeca, i da mu ostavis opciju da unese neko novo ako nema u ponudi to koje mu treba. Mozda neki fancy js koji ce da mu ponudi resenja dok kuca slova, kao sto ff nudi kad popunjavas forme ili tako nesto...
Generalno ces uvek imati problem da korisnici dodaju email, e-mail, koji god pristup da koristis, jedino da ogranicis dodavanje, vec da ima samo biranje ponudjenih, a recimo admin da moze da dodaje polja... no to je vec drugi problem
[ ColdKeyboard @ 01.03.2008. 22:21 ] @
U principu ono sto sam ja zamislio kako treba da se odradi Dakipro je samo potvrdio i uvjerio me da je to mozda
najlaksi i najbezbolniji nacin za to.

Nece biti problema sa duplim poljima tipa email i e-mail jer se ovdje radi o nekoj to-do listi, tako da ce najvjerovatnije
imati nekih 10ak vec predefinisanih polja i nekoliko drugih koje user moze da definise za sebe.

Hvala na savjetima.

Zivjeli,
Sale
[ Miroslav Ćurčić @ 02.03.2008. 13:44 ] @
Imao sam sličan zadatak,
ali razlika je bila što su sva takva dodatna polja bila 'unikatna', tj. svaki korisnik je sebi dodavao i opisivao ih a da to ne utiče na dodatna polja drugih korisnika, takođe ne postoji pretraga tim poljima.

To sam jednostavno uradio samo s jednom tabelom sa poljima:
uId int(11) // veza s tabelom korisnika
Naziv varchar(64) // opis polja
Sadrzaj text // sadržaj polja

Ako mora biti neke pretrage po tim dodatnim poljima onda po dakijevom receptu.