Jedna možnosť:
CREATE TABLE `rs_ankety_guard` (
`ida` int(10) unsigned NOT NULL,
`idc` int(10) unsigned NOT NULL,
KEY `ida` (`ida`),
KEY `idc` (`idc`)
) ENGINE=MyISAM;
pred hlasovaním testneš či existuje záznam id ida = číslo ankety A idc = číslo prihláseného čitateľa
ak neexistuje ťiadny záznam, povolíš hlasovanie a vložíš hodnoty do db.
Druhá možnosť:
CREATE TABLE `rs_ankety_guard` (
`ida` int(10) unsigned NOT NULL,
`idc` int(10) unsigned NOT NULL,
UNIQUE KEY `ida_idc` (`ida`,`idc`)
) ENGINE=MyISAM;
Unikátny kľúč je kombináciou polí ida a idc. Pred hlasovaním spravíš pokus o vloženie, ak bude dotaz úspešný povolíš vykonanie hlasovania, ak nebude úspešný daný čitateľ v danej ankete už hlasoval.
Ak na tom ttrváš prav si to. Toto celé je ale podľa nňa nezmysel robiť. Ktokoľvek bude chcieť, obíde to založením nového účtu a zahlasuje toľkokrát koľko bude chcieť. Dá sa na to dokonca spraviť script a robiť to automaticky (fuj), takže "ochrana" týmto spôsobom bude neúčinná a zastaví to len ochrana nastavená v config.php. To som myslel tými odkazmi. Fakt nemá zmysel snažiť sa o objektivitu *anonymnej* ankety. Je to celé o type položenej otázky.
Určenie ankety vidím skôr pre veci informačného charakteru, kde nie je predpoklad, že bude záujem o zámerné skreslenie údajov. 100% bezpečné riešenie neexistuje, jedine že by sa použilo hlasovanie na základe autentifikácie nejakou certifikačnou autoritou - t.j. overenie mailom s elektronickým podpisom a pod. To je myslím v obyčajnej ankete nereálne. Význam ankety vidím skôr v štatistickom výskume pre užívateľa naoko nepodstatných maličkostí, ktoré však pre autora majú zaujímavú informačno-marketingovú hodnotu. Myslím, že je vhodné venovať sa viac správnemu výberu otázky ako zabezpečeniu ankety proti zneužitiu.