Hallo allemaal,

ik ben bezig om een stempagina te maken voor een school zodat binnenkort ook digitaal gestemd kan worden. Ik heb hiervoor tutorials gelezen over sql en php. Vervolgens heb ik een login gezocht in php die ik ook heb gevonden. daarna een stemsysteem die ik ook heb gevonden wat prima is voor het doel waarvoor deze gebruikt moet worden.

Echter nu moeten ouders stemmen en kan dat niet vanaf dezelfde computer vanwege een cookie die gemaakt wordt. Ik heb getracht dit weg te laten maar ik blijf tegen het probleem aanlopen.

Daarnaast heb ik een S_SESSION('username') aangemaakt om deze te valideren om te kijken of deze user gestemd heeft of niet. Ik kan dit echter niet goed testen omdat ik de foutmelding steeds krijg dat ik heb gestemd. Ik heb nieuwe users in de database toegevoegd om het te testen maar die hebben allemaal al gestemd.

ook heb ik de cookie naar time() -3600 gezet zodat deze verwijderd werd maar niets hielp.

het doel is dus te controleren of de user die inlogt gestemd heeft en maar een keer kan stemmen.

ik ben nieuw hier dus ik hoop dat iemand mij de juiste richting op wil wijzen. ervaring met PHP etc is beginnend.

dank alvast
Dit is de code die aardig in de buurt komt :

https://www.codexworld.com/online-poll-voting-system-php-mysql/

$voteSubmit = $poll->vote($voteData);

bewaart de teller waarop is gestemd, niet wie heeft gestemd.

Vervolgens wordt een cookie gemaakt.

In plaats daarvan kan je in een aparte tabel opslaan wie heeft gestemd. Wel WAT en WIE gescheiden houden. Stemgeheim!
de snelle aanpassing naar hashed_password werkte niet dus ik heb deze maar even weer teruggezet naar md5.

ik weet dus niet wie er stemt alleen dat random gegenereerde mensen uit de database mogen stemmen. in de users tabel staan de unieke emailadressen.

Kunnen jij of adoptive mij iets verder brengen met hoe ik dat zou moeten doen. omdat hij dit nu al doet met isvoted schijnbaar wat ik op deze manier niet wil? de cookie naar -3600 werkt schijnbaar ook niet.

Hans Zijlstra op 30/10/2018 21:28:57

de snelle aanpassing naar hashed_password werkte niet dus ik heb deze maar even weer teruggezet naar md5.

Je moet wel je huidige passworden resetten hè, omdat deze op een andere manier hashen!
@arien: had de db geleegd en opnieuw geregistreerd.

@adopitive: waar hij in mijn code dus isvoted = 1 aangeeft moet ik nu een query maken waar hij het emailadres van de user in een tabel zet en dan moet verderop gechecked worden of dat email adres in de tabel staat zodat we weten dat deze user gestemd heeft. Zeg ik dat goed?
Eh... je maakt dus per gebruiker een veld die aangeeft of er gestemd is 1 is ja, 0 is nee! Maar kunnen ze ook op meerdere poll-vragen stemmen?

Zorg ook voor een UNIQUE-key op het veld van je mailadres. Dan ben je er zeker van dat er geen dubbele mailadressen in kunnen.
ik was hier even mee aan het stoeien

$isVoted = $poll->updateVote($pollVoteData);
    if($isVoted){
      //setcookie($_POST['id'], 1, time() -3600);
      //$voted = 1;
      echo'test';
    } else {
      //$voted = 2;
      echo 'mislukt';
    }
  }

<?php if(!empty($voted) && $voted === 1) {
        echo '<div class="alert alert-success">U heeft succesvol gestemd.</div>';
      }
      else if(!empty($voted)  && $voted === 2) {
        echo '<div class="alert alert-danger">U had al gestemd.</div>';
      }
      ?>

als ik het nu uitvoer geeft bij de user waarmee ik inlog geeft hij mislukt.

met deze code wordt toch geregeld of er is gestemd 1 = niet, 2 = wel of lees/begrijp ik dit verkeerd.
Wat doet die updateVote() precies?
Die geeft blijkbaar geen true door.
als ik de // weghaal krijg ik de mededeling dat ik al gestemd heb
Maar dat is niet wat ik vraag.
Ik wil weten hoe die functie eruitziet.
<?php
public function vote($data = array()){
    if(!isset($data['poll_id']) || !isset($data['poll_option_id']) || isset($_COOKIE[$data['poll_id']])) {
        return false;
    }else{
        $sql = "SELECT * FROM ".$this->voteTbl." WHERE poll_id = ".$data['poll_id']." AND poll_option_id = ".$data['poll_option_id'];
        $preVote = $this->getQuery($sql, 'count');
        if($preVote > 0){
            $query = "UPDATE ".$this->voteTbl." SET vote_count = vote_count+1 WHERE poll_id = ".$data['poll_id']." AND poll_option_id = ".$data['poll_option_id'];
            $update = $this->db->query($query);
        }else{
            $query = "INSERT INTO ".$this->voteTbl." (poll_id,poll_option_id,vote_count) VALUES (".$data['poll_id'].",".$data['poll_option_id'].",1)";
            $insert = $this->db->query($query);
        }
        return true;
    }
}
?>

Reageren