NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
Pavel Soukup
Člen
Avatar
Pavel Soukup:6.1.2018 12:56

Ahoj :), mám menší problém ohledně hlasování u uživatelů. Mám vytvořenou podmínku, která říká, že když uživatel hlasuje jako yes, tak se do databáze pod názvem sloupce yes objeví 1, pokud no, objeví se 1 u no. A moje otázka zní, jak vyřešit hlasování jednoho uživatele jenom jednou u jednoho příspěvku? koukal jsem, že by to šlo pomocí cookies, ale to nevím jak udělat. Nejlepší varianta by bylo to nějak ošetřit v sql dotazu, ale nevím jestli to půjde i bez toho aniž bych musel přidávat další kolonku v databázi.

Děkuji vám za odpovědi. Jakub Štolba

Editováno 6.1.2018 12:57
 
Odpovědět
6.1.2018 12:56
Avatar
Odpovídá na Pavel Soukup
Dominik Gavrecký:6.1.2018 14:36

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.

Nahoru Odpovědět
6.1.2018 14:36
Hlupák nie je ten kto niečo nevie, hlupákom sa stávaš v momente keď sa na to bojíš opýtať.
Avatar
nekukej
Člen
Avatar
Odpovídá na Pavel Soukup
nekukej:6.1.2018 14:38

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.

 
Nahoru Odpovědět
6.1.2018 14:38
Avatar
jakubho
Člen
Avatar
Odpovídá na nekukej
jakubho:6.1.2018 21:48

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)

Nahoru Odpovědět
6.1.2018 21:48
Chyba-Jediná jistota v životě programátora.
Avatar
Odpovídá na jakubho
Dominik Gavrecký:6.1.2018 22:55

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.

Nahoru Odpovědět
6.1.2018 22:55
Hlupák nie je ten kto niečo nevie, hlupákom sa stávaš v momente keď sa na to bojíš opýtať.
Avatar
jakubho
Člen
Avatar
Odpovídá na Dominik Gavrecký
jakubho:6.1.2018 22:58

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...

Nahoru Odpovědět
6.1.2018 22:58
Chyba-Jediná jistota v životě programátora.
Avatar
Uživatel sítě :6.1.2018 23:03

Ip či cookie v tomto případě nevolit. Nejideálnější způsoby zmínil nekukej.

Nahoru Odpovědět
6.1.2018 23:03
Chybami se člověk učí, běžte se učit jinam!
Avatar
Petr Čech
Tvůrce
Avatar
Petr Čech:6.1.2018 23:09

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:

  1. IP adresa: IP adresa se změní hned jakmile se restartuje router, pokud uživatel nemá statickou IP adresu, vyloučeno. Nehledě na to, že pod jednou IP adresou je často několik uživatelů. U domácnosti to asi není tolik problém, ale co třeba nějaká proxy nebo VPN?
  2. Cookies: jakmile uživatel hlasuje, uložíte si cookie, ve které bude, že uživatel hlasoval, a potom byste zjistili, že už hlasoval a zakázali mu to - uživatel ty cookies prostě může smazat, nebo může použít anonymní mód.
  3. Captcha: to vás akorát chrání před boty...

Jediná reálná cesta, jak toho docílit je umožnit hlasování jen registrovaným uživatelům

Nahoru Odpovědět
6.1.2018 23:09
the cake is a lie
Avatar
Pavel Soukup
Člen
Avatar
Odpovídá na Petr Čech
Pavel Soukup:7.1.2018 12:26

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.

 
Nahoru Odpovědět
7.1.2018 12:26
Avatar
Adam Ježek
Tvůrce
Avatar
Odpovídá na Pavel Soukup
Adam Ježek:7.1.2018 13:15

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.

Editováno 7.1.2018 13:16
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
7.1.2018 13:15
Počkej chvíli, poradím se s křišťálovou koulí.
Avatar
Pavel Soukup
Člen
Avatar
Odpovídá na Adam Ježek
Pavel Soukup:7.1.2018 19:00

děkuji moc za pomoc :D věe funguje tak jak má :D

 
Nahoru Odpovědět
7.1.2018 19:00
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 11 zpráv z 11.