Diskuze: uživatel může hlasovat pouze jednou
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 11 zpráv z 11.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Osobne si myslím že problém bude v zlom návrhu DB ako v samotnom kóde. Skús sem hodiť tu časť kódu a najlepšie ako DB layout.
Pokud chceš takhle ošetřit anketu, tak musíš možnost hlasování
podmínit přihlášením uživatele, třeba přes FB, Google, atd. Nebo si
udělat vlastní registraci pro uživatele. Aby jsi získal unikátní
identifikátor onoho uživatele. Ten uložil do databáze a při každém
vkládání nového hlasu zkontrolovat, zad-li už uživatel s tímto
unikátním identifikátorem nehlasoval.
Samozřejmě to není neprůstřelné a asi neexistuje žádná metoda, která by to zabezpečila na
100%.
Zabezpečení pomocí cookies je velmi slabé a někdy uživatel ani sám
nemusí chtít nějak podvádět, ale může mít například špatně
nastavený prohlížeč a při zavření prohlížeče se mu cookies smažou
sami a může hlasovat zvesela dále.
Ahoj, to by mě taky zajímalo, mohl by jsi prozradit jaké je nejlepší řešení tohohle problému, když ne přes cookies? (pokud bychom vyloučili přihlašování uživatele)
Tak minimálne je určite krajší spôsob na IP do toho cookie a určite by sa ešte niečo našlo.
A není pravda, že IP adresa nemusí nutně znamenat jeden počítač? O sítích skoro nic nevím, ale slyšel jsem že třeba celá škola může mít jednu IP...
Ip či cookie v tomto případě nevolit. Nejideálnější způsoby zmínil nekukej.
Neexistuje žádný způsob, jak jednoznačně identifikovat počítač (a
tím i uživatele), smiř se s tím.
Nástin pár věcí, co se lidé pokouší používat a proč to nefunguje:
Jediná reálná cesta, jak toho docílit je umožnit hlasování jen registrovaným uživatelům
Ahoj, mám udělané registrování uživatelů a mám omezení, že můžou volit jen ti, co jsou přihlášení, ale nevím jak uživateli omezit volení o jednoho příspěvku jenom jednou.
Místo toho, aby si v tabulce příspěvků měl sloupeček s hlasy, který
budeš snižovat nebo zvyšovat o 1 podle hlasu, tak založíš tabulku na
hlasy. Ta bude mít následující sloupečky
- ID, primary key, - ID hlasu, prostě proto
- ID přísppěvku - aby bylo poznat k jakému příspěvku ten hlas patří
- ID uživatele - kdo hlasoval
- hlas - jestli dal +1 nebo -1
při počítání likes/dislikes pro příspěvek uděláš
likes = SELECT COUNT(*) FROM hlasy WHERE pripevek_id == <ID
příspěvku> AND hlas = "+1"
dislikes = SELECT COUNT(*) FROM hlasy WHERE pripevek_id == <ID
příspěvku> AND hlas = "-1"
//pravděpodobně existuje způsob jak tohle zapsat do jednoho dotazu, ideální ještě přes JOIN to nějak přicpat k tabulce s příspěvkama, aby si s jedním dotazem vytáhnul všechny příspěvky včetně jejich hlasů
když uživatel bude hlasovat, tak nejdřív uděláš
SELECT COUNT(*) FROM hlasy WHERE prispevek_id == <přípěvek, u kterého
chce hlasovat> AND uzivatel_id == <ID hlasujícího uživatele>
Pokud ti to vrátí nulu, tak uživatel pro tenhle příspěvek ještě nehlasoval a můžeš jeho hlas uložit do db. Jinak už hlasoval a můžeš mu vynadat.
Zobrazeno 11 zpráv z 11.