1x stemmen per ip adres.

  • Goede avond iedereen.


    Ik ben bezig met een stem systeem, dit houd in dat je op een vind ik leuk of vind ik niet leuk kan klikken, en vervolgens naar de volgende vraag gaat.
    Nu wil ik het zo hebben dat je maar 1x kan stemmen per vraag, maar ik kom hier niet uit.


    Ik heb al wat gegoogled en kwam uit op $_SERVER['REMOTE_ADDR'].
    Zou iemand mij een handje op weg kunnen helpen hiermee?
    De poll werkt met een database.


    Mvg, Wouter.

  • Ik wil het gaan gebruiken via mysql.
    Ik heb al wel iets, ik heb het nu zo gemaakt, dat als je stemt het ipadress in de database gezet word, alleen nu het volgende:


    ~ Hoe controleer ik of iemand van het desbetreffende ipadres al gestemd heeft?
    ~ Hoe zet ik meerdere ipadressen in 1 kolom?

  • Kun je beter een aparte tabel er voor gaan aanmaken.


    Tabel aanmaken
    Maak bijvoorbeeld een tabel met de naam 'gestemd'.
    Met 2 kolommen 'ip' en 'antwoord'.


    Stem toevoegen

    Code
    mysql_query("INSERT INTO gestemd (ip, antwoord) VALUES ($_SERVER["REMOTE_ADDR"], $antwoord)");


    Kijken of IP gestemd heeft

    Code
    $getip = mysql_query("SELECT ip FROM gestemd WHERE ip = " . $_SERVER["REMOTE_ADDR"]);
    
    
    if(mysql_num_rows($getip) == 1){
    //Je hebt al gestemd
    } else{
    //Je kunt stemmen
    }



    Ik raad je wel aan om over te stappen naar MySQLi aangezien MySQL vroeg of laat volledig deprecated gaat worden.


  • Snel een code geschreven, zoiets kan je maken. Weet niet of hij foutloos is. Dit is enkel een voorbeeld

  • Er zijn veel handige database classes te vinden op internet. Door zo'n class te gebruiken maak je het jezelf weer een stuk makkelijker.
    Bijvoorbeeld: https://github.com/indieteq/PHP-MySQL-PDO-Database-Class


    Vervolgens kan je door middel van de bekende $_SERVER["REMOTE_ADDR"] het IP adres van de gebruiker opvragen.
    Als je deze in een database zet, in combinatie met de huidige stap/vraag, gaat het denk ik helemaal lukken ;)



    Klein voorbeeld:


    => Check eerst of het huidige IP adres al een row heeft in jou table.
    Zoniet: aanmaken!

    PHP
    $db = new Db();
    $ip = $_SERVER["REMOTE_ADDR"];
    $check = $db->single("SELECT ip FROM ips WHERE ip = :ip",array("ip",$ip));
    if ($check === false) {
      $insert   =  $db->query("INSERT INTO ips(ip,vraag) VALUES(:ip,:vraag)", array("ip"=>$ip,"vraag"=>0));
    }


    En na elke vraag:

    PHP
    $update   =  $db->query("UPDATE ips SET vraag=vraag+1 WHERE ip = :ip", array("ip"=>$ip));


    Of vraag op bij welke vraag de gebruiker is:

    PHP
    $vraag = ($check !== false ? $check->vraag : 0);

    Senior Web Developer
    Bootstrap, jQuery, HTML5, CSS3, RESTfull API's, SQL server, Windows Azure, .NET & PHP OOP expert

  • Nog even een tip. Vergeet niet dat er meerdere mensen op een IP zitten, die je buitensluit om te stemmen.


    Je zou ervoor kunnen zorgen dat het IP maar voor een half uur geblokkeerd wordt voor het stemmen op de poll. Verder plaats je ook een cookie waarin duidelijk is of er gestemd is.


    Misbruik is altijd mogelijk, maar dit is al een flinke drempel die misbruik minder nuttiger maakt, omdat het tijdrovender is. Vooral als je de tijd van een halfuur voor jezelf houdt. ;)


    SQL
    DELETE ip_voted WHERE pollID = 42 AND dateVoted + INTERVAL 30 MINUTES < NOW()

Participate now!

Heb je nog geen account? Registreer je nu en word deel van onze community!