teoria/praktikce spracovanie ankety

Programovacie jazyky, rady, poradňa...
caesar1987
Addict
Addict
Používateľov profilový obrázok
Príspevky: 3001
Registrovaný: 02 okt 2005, 0:57
Bydlisko: Nové Zámky
Kontaktovať používateľa:

teoria/praktikce spracovanie ankety

Príspevok od používateľa caesar1987 »

tak chcem si spravit anketu na stranke...

nakodit to v php nie je problem... ale problem mi robi databaza

takze budem musiet spravit napr 10 stlcov v tabulke, kam sa budu davat odpovede?? alebo inak??

a ako spravit, aby som zaistil, ze sa bude sprvne pripocitavat kazdy hlas??

existuje nejaka funkcia v databaze,ktora ti inkrementne hodnotu v tej ktorej bunke o 1 (bez potreby ziskania udajov z nej von a zapisania novej hodnoty)???

problem je v tom, ze ak by som mal tie data nacitat pri stlaceni hlasovacej odpovede a v tej sitej sekunde odoslt udaje s novymi hodnotami, tak sa moze stat, ze to spravia napr 4ia ludia naraz, a ked ten prvy ma nejaky pomalsi internet, tak sa moze stat, ze prepise tie 3 odpovede ludi, co hlasovali tesne po nom...

ako to spravit???
mastermind
VIP
VIP
Používateľov profilový obrázok
Príspevky: 4810
Registrovaný: 09 feb 2005, 13:17

Príspevok od používateľa mastermind »

3 tabulky:
- tbl_poll [tabulka ankiet] (id ankety, nazov ankety ...)
- tbl_poll_answers [tabulka moznych odpovedi na ankety] (id odpovede, id ankety, text odpovede...)
- tbl_poll_votes [tabulka hlasov] (id odpovede, ip hlasujuceh....)
final
Light Star
Light Star
Používateľov profilový obrázok
Príspevky: 206
Registrovaný: 04 dec 2005, 11:43
Bydlisko: Prievidza

Príspevok od používateľa final »

j, to by mohlo byť, na obr. 1 máš vizuálne to isté ako napísal mastermind..

keby si však chcel trochu odstrániť duplicitu, tak obr. 2 by bol zrejme vhodnejší (berme to tak, že čas hlasovania by sme vyhodili - myslím, že je to zbytočný údaj, pokiaľ ho neberieme ako obmedzujúci pre jednotlivé IP adresy..)

k tomu inkrementovaniu.. v prvom prípade by si nemusel nič inkrementovať pri hlasovaní, údaj o počte hlasujúcich by si dostal cez agr. funkciu count..

v druhom prípade by si inkrementoval štýlom update tb set pole = (pole+1) where ....

nechám na tebe ;) ja by som volil prvý príklad.. druhý možno keby to bolo nejaké záťažovejšie..
Prílohy
obr. 1
obr. 1
obr. 2
obr. 2
mastermind
VIP
VIP
Používateľov profilový obrázok
Príspevky: 4810
Registrovaný: 09 feb 2005, 13:17

Príspevok od používateľa mastermind »

obr1 je blbost pretoze nevies povedat ktora odpoved patri ktorej ankete...
final
Light Star
Light Star
Používateľov profilový obrázok
Príspevky: 206
Registrovaný: 04 dec 2005, 11:43
Bydlisko: Prievidza

Príspevok od používateľa final »

nj, nevšimol som si :oops:
Prílohy
k_3.PNG
mastermind
VIP
VIP
Používateľov profilový obrázok
Príspevky: 4810
Registrovaný: 09 feb 2005, 13:17

Príspevok od používateľa mastermind »

final napísal:nj, nevšimol som si :oops:
a teraz tam mas redundanciu dat :) v tabulke ankety_hlasovanie nepotrebujes mat odkaz na ankety. staci ti to na odpovede.
final
Light Star
Light Star
Používateľov profilový obrázok
Príspevky: 206
Registrovaný: 04 dec 2005, 11:43
Bydlisko: Prievidza

Príspevok od používateľa final »

opäť pravda ;)
zameriaval som sa skôr na ten druhý príklad, tento som len tak prebehol ;) tak potom bez toho poľa anketa... už sa mi ďalší screen nechce robiť :)
caesar1987
Addict
Addict
Používateľov profilový obrázok
Príspevky: 3001
Registrovaný: 02 okt 2005, 0:57
Bydlisko: Nové Zámky
Kontaktovať používateľa:

Príspevok od používateľa caesar1987 »

noo jasne.. dat odpovede do druhej tabulky..

dikes.. to ma nenapadlo.. total 0iq u mna... =))

noo super, tak tam pouzijem to pole = (pole+1)


dikes chalani.. skusim to dat dokopy a keby nieco, tak este napisem.. =)


//edit

otazka: pocet odpovedi moze byt aj kludne v tabulke otazky pri kazdej odpovedi ci nie???
naco to budem davat do dalsej tabulky???
final
Light Star
Light Star
Používateľov profilový obrázok
Príspevky: 206
Registrovaný: 04 dec 2005, 11:43
Bydlisko: Prievidza

Príspevok od používateľa final »

nie, nemôžeš, potom by si nevedel ktorá odpoveď patrí ktorej ankete..

tá tabuľka je tam na to, aby zoskupovala ankety a k nim patriace odpovede.. čiže teoreticky v tej tabuľke musí byť niečo: pocet_ankiet * pocet_odpovedi záznamov.. aby si mal jednak údaj o počte hlasujúcich a taktiež zaradení odpovedí.. je to náročnejšie na obsluhu, ale za to je to lepšie pri záťaži.. taktiež ma tak napadlo, že ankety_obmedzenia - odtiaľ môžeš už neobmedzujúce IP adresy odstraňovať po určitej dobe.. čiže sa nebude zbytočne napĺňať tabuľka..(pri príklade 1 by vznikala anomália zrušenia - údaj o hlasovaní, takže tam by to nešlo s pôvodným konceptom..)
caesar1987
Addict
Addict
Používateľov profilový obrázok
Príspevky: 3001
Registrovaný: 02 okt 2005, 0:57
Bydlisko: Nové Zámky
Kontaktovať používateľa:

Príspevok od používateľa caesar1987 »

hupsa.. som tam chcel napisat v tabulke odpovede pri kazdej odpovedi... =)
final
Light Star
Light Star
Používateľov profilový obrázok
Príspevky: 206
Registrovaný: 04 dec 2005, 11:43
Bydlisko: Prievidza

Príspevok od používateľa final »

aaaha.. takže ankety_hlasovania.hlasovalo -> ankety_odpovede.hlasovalo

ak teda chápem, tak áno, takto je to v podstate lepšie.. si to teda prehoď a ankety_hlasovania premenuj trebars na ankety_prepojenia :) ale tabuľku nemaž :)
mastermind
VIP
VIP
Používateľov profilový obrázok
Príspevky: 4810
Registrovaný: 09 feb 2005, 13:17

Príspevok od používateľa mastermind »

caesar ta tabulka hlasov je tak ako log. mozes si tam ulozit kedy a z akej ip sa hlasovalo. tym vies zabezpecit ze kazdy hlasoval len raz
caesar1987
Addict
Addict
Používateľov profilový obrázok
Príspevky: 3001
Registrovaný: 02 okt 2005, 0:57
Bydlisko: Nové Zámky
Kontaktovať používateľa:

Príspevok od používateľa caesar1987 »

co sa tyka ankety tak to uz mam... hlasovanie plne funkcne... =) juchu... a dakujem

este otazka ohladom ochrany hlasovania viac krat za 24 hodin...

dokaze php porovnat datum napr vo formate

$datum= date("d.m.Y H:i"); alebo v akomkolek inom???

teda ide mi o to, ci vie urcit ci uz preslo 24 hodin...


//edit

uz mi to zaplo...

ak by niekto chcel, tak to riesim takto

datum vo formate

date("YmdHi");

a potom uz len odratam a ked je tam rozdiel >=100000, tak presiel den...

teda aspon dufam, ze je to dobre... :)

bo v tomto teple mi to nepali najlepsie..
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Ja by som použil funkciu mktime (alebo môžeš použiť priamo funkcie mysql napr. NOW()).
caesar1987
Addict
Addict
Používateľov profilový obrázok
Príspevky: 3001
Registrovaný: 02 okt 2005, 0:57
Bydlisko: Nové Zámky
Kontaktovať používateľa:

Príspevok od používateľa caesar1987 »

spravil som to takto

Kód: Vybrať všetko

$datum= date("YmdHi");
.
.
.
if ($row = mysql_fetch_assoc($result)) {
        		    $userhlasoval = 1; //hlasoval pred menej ako 24 hodinami
        		     if (($datum - $row['cas']) > 10000){
                   $userhlasoval = 2; //hlasoval pred vias ako 24 hodinami 
                 }
              }
              mysql_free_result($result);
              }else{
                $userhlasoval = 0; //nehlasoval
              }


//edit

myslim, ze to je vsetko funkcne.. takze dakujem vam!!! :)
Napísať odpoveď