Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    Aiuto con mio algoritmo di voto unico

    Salve,
    ho un sito in cui gli utenti (registrati e non) possono votare degli articoli.
    Vorrei che ogni utente potesse esprimere un solo voto per articolo, per evitare voti fasulli ripetuti.
    Leggendo il forum ho capito che la soluzione è l'uso dei cookie (scartando il controllo dell'indirizzo ip).
    Ho implementato questo algoritmo
    codice:
    $voto_concesso=false;
    $testo_cookie="_";
    $nome_cookie="voti";
    
    if (isset($_COOKIE[$nome_cookie]))
    {
     $testo_cookie=$HTTP_COOKIE_VARS[$nome_cookie];
     $gia_votato=false;
     if (strpos($testo_cookie,"_".$id."_")===false) $voto_concesso=true;
    }
     else $voto_concesso=true;
    }
    
    if ($voto_concesso)
    {
     $testo_cookie.="_".$id."_";
     setcookie($nome_cookie,$testo_cookie,time()+604800);
     // registrazione voto nel database
    }
    Nei miei intendi l'algoritmo dovrebbe verificare se il cookie esiste, in caso contrario l'utente può votare. Se il cookie è presente controlla se al suo interno è già presente il codice ($id) dell'articolo che si sta votando. Se non è presente si può votare.
    A me sembra corretto, eppure vedo che molti utenti riescono a votare più volte in pochi secondi la stessa opera. Mi pare strano che siano così in tanti a cancellare i cookie, quindi non vorrei dipendesse da qualche mancanza del mio algoritmo.
    Mi sapete dire se c'è qualcosa che non va?
    Grazie mille

  2. #2
    Codice PHP:
    $voto_concesso=false;
    $testo_cookie="_";
    $nome_cookie="voti";

    if (isset(
    $_COOKIE[$nome_cookie])) {
      
    $testo_cookie=$_COOKIE[$nome_cookie];
      
    $gia_votato=false;
      if (
    strpos($testo_cookie,"_".$id."_")===false$voto_concesso=true;
    } else {
      
    $voto_concesso=true;
    }

    if (
    $voto_concesso)
    {
     
    $testo_cookie.="_".$id."_";
      
    setcookie($nome_cookie,$testo_cookie,tim
    e
    ()+604800);
     
    // registrazione voto nel database

    Secondo me sbagli metodo.
    Non so come memrizzi i dati all'interno del cookie ma io ti consiglio di fare in questo modo:

    1) Memorizzi gli id interotti da un separatore (1-9-100-120)
    2) Estrai gli id ed esplodi in base a separatore
    3) Usi la funzione in_array per vedere se l'id è presente. Molto più semplice! Ciao!
    eCommerceRS.NET - Commerciante, vendi on-line!
    Il mio nick è mircov e non mirco!!!

  3. #3
    Grazie per la risposta.
    Intendi così?
    codice:
    $voto_concesso=false;
    $testo_cookie="";
    $nome_cookie="voti";
    
    if (isset($_COOKIE[$nome_cookie])) {
     $testo_cookie=$_COOKIE[$nome_cookie];
     $gia_votato=false;
     $votate=explode("-",$testo_cookie); 
     if (in_array($id,$votate)) $voto_concesso=true;
    }
    else $voto_concesso=true;
    
    if ($voto_concesso)
    {
     $testo_cookie.="-".$id;
     setcookie($nome_cookie,$testo_cookie,time()+604800);
     // registrazione voto nel database
    }

  4. #4
    Non pensare a come intendo io la cosa. Funziona? Se funziona allora va bene.
    eCommerceRS.NET - Commerciante, vendi on-line!
    Il mio nick è mircov e non mirco!!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.