• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

System oceniania. Jak uniemożliwić podwójne głosowanie

Cloud VPS
0 głosów
456 wizyt
pytanie zadane 6 sierpnia 2018 w JavaScript przez Śwież4k Bywalec (2,570 p.)
Siema, zrobiłem prosty system oceniania, ale nie wiem jak sprawić, aby użytkownik mógł głosować tylko raz na wybrany post na moim blogu. Mam zamysł, aby to działało mniej więcej jak lajk na facebooku
1
komentarz 6 sierpnia 2018 przez niezalogowany
Cokolwiek kod / sposób działania możesz dać?
komentarz 6 sierpnia 2018 przez Śwież4k Bywalec (2,570 p.)
przeniesione 7 sierpnia 2018 przez draghan

Kod AJAX: 

  $('.inputPlus').click(function(){
    var id = $(this).attr('class');
    id = id.slice(20);
    $.ajax({
      url: 'punktacja.php',
      method: 'post',
      data: {id: id},
      success : function(response)
      {
        updatedObject = "#inputPlus_" + id;
        var points = $(updatedObject).text();
        points++;
        $(updatedObject).text(points);
      }
    });
  });

Kod PHP:

<?php
    $id = $_POST['id'];
    require_once("connect.php");
    $polaczenie = mysqli_connect($host, $db_user, $db_password, $db_name);
    $rezultat = mysqli_query($polaczenie, "UPDATE galera SET punkty=punkty+1 WHERE `id` = $id");
    if($rezultat){
      return "udało się";
    }
 ?>

 

3 odpowiedzi

+3 głosów
odpowiedź 6 sierpnia 2018 przez Tomek Sochacki Ekspert (227,490 p.)

Rozwiązań może być kilka, zależy od aplikacji. Jeśli dysponujesz back-endem i bazą danych z użytkownikami to możesz po prostu zapisywać takie informacje w bazie i przy "lajkowaniu" sprawdzać, czy user już tego nie zlajkował, albo z drugiej strony, najpierw ukryć ikonę "lajkowania" i aktywować dopiero gdy asynchronicznie sprawdzisz możliwość dla tego usera.

Ewentualnie, jeśli nie dysponujesz bazą i back-endem to możesz to zrobić w oparciu o cache lokalne np. localStorage, IndexedDB, ewentualnie cookies, ale to zwodnicze, ponieważ user może te dane sam wyczyścić.

W pierwszym wypadku musisz sobie odpowiedzieć na pytanie jakie podejście wybierasz:

  1. na starcie wyłączasz głosowanie -> leci request do bazy -> gdy przyjdzie odpowiedź pozytywna to włączasz możliwosć głosowania
  2. na starcie włączasz głosowanie -> leci request do bazy -> gdy przyjdzie odp. negatywna to wyłączasz, tylko w tej sytuacji musimy rozważyć sytuację gdy user zagłosuje zanim nadejdzie odp. z API. Można tu zastosować optimistic pattern i np. po prostu anulować w razie czego ten głos + ewentualnie jakieś powiadomienie dla usera jeśli jest to coś istotnego.

Wszystko zależy co to za dane, jak ważne, jak chcesz podejść do UX itp. itd. Daj więcej informacji to dobierzemy jakiś optymalny wzorzec do konkretnego przypadku.

+2 głosów
odpowiedź 6 sierpnia 2018 przez Kuba Skoneczny Obywatel (1,780 p.)
Jak ten system stoi po stronie backendu to zapisz informacje, że użytkownik głosował w sesji.

Jeśli robiłeś to po stronie frontu to dodaj jakąs informację do ciasteczka albo do local storage.
+1 głos
odpowiedź 6 sierpnia 2018 przez KariK-02 Mądrala (6,030 p.)
Może info w ciasteczkach ?
1
komentarz 6 sierpnia 2018 przez Tomek Sochacki Ekspert (227,490 p.)
to już nie wiem, czy w sumie bezpieczniej nie byłoby w IndexedDB, bo ciasteczka i localStorage to praktycznie każdy nawet początkujący webmaster sobie wyczyści, IDB w sumie też ale chyba jednak mniej osób tego świadomie używa (świadomie, bo nieświadomie to nawet niektórzy nie wiedzą że choćby logowania firebase są zapisywane w IDB :). Ale mimo wszystko najbezpieczniej w back-endzie...
2
komentarz 6 sierpnia 2018 przez manjaro Nałogowiec (37,390 p.)
do tego nie trzeba być webmasterem ;) Wystarczy CTRL+SHIFT+N i głosować w trybie incognito ile razy się chce ;)

Podobne pytania

0 głosów
1 odpowiedź 245 wizyt
pytanie zadane 20 lipca 2018 w JavaScript przez smokolisz Mądrala (6,340 p.)
–1 głos
0 odpowiedzi 823 wizyt
pytanie zadane 22 grudnia 2016 w PHP przez ck Obywatel (1,780 p.)
0 głosów
1 odpowiedź 370 wizyt

93,456 zapytań

142,451 odpowiedzi

322,721 komentarzy

62,837 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...