teoria/praktikce spracovanie ankety
-
caesar1987
Addict
- Príspevky: 3001
- Registrovaný: 02 okt 2005, 0:57
- Bydlisko: Nové Zámky
- Kontaktovať používateľa:
teoria/praktikce spracovanie ankety
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???
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
- Príspevky: 4810
- Registrovaný: 09 feb 2005, 13:17
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..
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
-
mastermind
VIP
- Príspevky: 4810
- Registrovaný: 09 feb 2005, 13:17
-
mastermind
VIP
- Príspevky: 4810
- Registrovaný: 09 feb 2005, 13:17
-
caesar1987
Addict
- Príspevky: 3001
- Registrovaný: 02 okt 2005, 0:57
- Bydlisko: Nové Zámky
- Kontaktovať používateľa:
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???
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???
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..)
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
- Príspevky: 3001
- Registrovaný: 02 okt 2005, 0:57
- Bydlisko: Nové Zámky
- Kontaktovať používateľa:
-
mastermind
VIP
- Príspevky: 4810
- Registrovaný: 09 feb 2005, 13:17
-
caesar1987
Addict
- Príspevky: 3001
- Registrovaný: 02 okt 2005, 0:57
- Bydlisko: Nové Zámky
- Kontaktovať používateľa:
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..
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..
-
caesar1987
Addict
- Príspevky: 3001
- Registrovaný: 02 okt 2005, 0:57
- Bydlisko: Nové Zámky
- Kontaktovať používateľa:
spravil som to takto
//edit
myslim, ze to je vsetko funkcne.. takze dakujem vam!!!
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!!!