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
Dat gaat je niet 100% lukken. Cookies zijn te wijzigen en aan te passen. En een computer heeft geen enkel idee wie erachter zit.

De beste drempel is een registratiesysteem met opslag van unieke mailadressen, maar alsnog kunnen mensen meerdere mailadressen gebruiken.
Hallo Arien,

alle users loggen in met een verkregen username en password die al in de database staan. bij deze user staat ook een uniek emailadres.

Hans
Dat kan wel inderdaad...
Maar....waar loop je nu precies op vast?
ik wil dus op username filteren of deze gestemd heeft maar door een cookie geeft het systeem aan dat ik al gestemd heb zelfs met nieuwe users
Laat je relevante code eens zien? Dan kunnen we wat beter kijken.
login:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Login</title>
<link rel="stylesheet" href="css/style.css" />
</head>
<body>
<?php
require_once('db.php');
session_start();
// If form submitted, insert values into the database.
if (isset($_POST['username'])){
        // removes backslashes
	$username = stripslashes($_REQUEST['username']);
        //escapes special characters in a string
	$username = mysqli_real_escape_string($con,$username);
	$password = stripslashes($_REQUEST['password']);
	$password = mysqli_real_escape_string($con,$password);
	//Checking is user existing in the database or not
        $query = "SELECT * FROM `users` WHERE username='$username'
and password='".md5($password)."'";
	$result = mysqli_query($con,$query) or die(mysql_error());
	$rows = mysqli_num_rows($result);
        if($rows==1){
	    $_SESSION['username'] = $username;
            // Redirect user to index.php
	    header("Location: index1.php");
         }else{
	echo "<div class='form'>
<h3>Username/password is incorrect.</h3>
<br/>Click here to <a href='login.php'>Login</a></div>";
	}
    }else{
?>
<div class="form">
<h1>Log In</h1>
<form action="" method="post" name="login">
<input type="text" name="username" placeholder="Username" required />
<input type="password" name="password" placeholder="Password" required />
<input name="submit" type="submit" value="Login" />
</form>
<p>Not registered yet? <a href='registration.php'>Register Here</a></p>
</div>
<?php } ?>
</body>
</html>

[size=xsmall][i]Toevoeging op 30/10/2018 20:30:59:[/i][/size]

index1.php

<?php
  include ('Poll.php');
  $poll = new Poll();
  $voted = 0;
  $pollData = $poll->getPoll();
  if(isset($_POST['vote'])){
    $pollVoteData = array(
      'id' => $_POST['id'],
      'pollOptions' => $_POST['options']
    );
    
    $isVoted = $poll->updateVote($pollVoteData);
    if($isVoted){
      setcookie($_POST['id'], 1, time()+60*60*24*365);
      $voted = 1;
    } else {
      $voted = 2;
    }
  }
  ?>
  <div class="container">
    <div class="row">
      <?php if(!empty($voted) && $voted === 1) {
        echo '<div class="alert alert-success">Your have voted successfully.</div>';
      }
      else if(!empty($voted)  && $voted === 2) {
        echo '<div class="alert alert-danger">Your had already voted.</div>';
      }
      ?>
      <form action="" method="post" name="pollForm">
      <?php foreach($pollData as $poll){
        $pollOptions = explode("||||", $poll['options']);?>
        <div class="col-md-3">
          <div class="panel panel-primary">
            <div class="panel-heading">
              <h3 class="panel-title">
                <span class="glyphicon glyphicon-arrow-right"></span><?php echo $poll['question']?><span
                class="glyphicon glyphicon-new-window"></span></a>
              </h3>
            </div>
            <div class="panel-body">
              <ul class="list-group">
                <?php for( $i = 0; $i < count($pollOptions); $i++ ) { ?>
 
                  <li class="list-group-item">
                    <div class="radio">
                      <label>
                        <input type="radio" name="options" value="<?php echo $i; ?>">
                        <?php echo $pollOptions[$i]?>
                      </label>
                    </div>
                  </li>
                <?php }?>
 
              </ul>
            </div>
            <div class="panel-footer">
              <input type="hidden" name="id" value="<?php echo $poll['id']; ?>"/>
              <button type="submit" class="btn btn-primary btn-sm" id="vote" name="vote">
              Vote</button>
              <a href="results.php?pollID="<?php echo $poll['id'];?>">View Result</a></div>
            </div>
          </div>
        <?php }?>

Je kan toch in de database opslaan dat ie heeft gestemd.

Doe dat op de plek waar je nu een cookie aanmaakt.

Maak zonodig een tabel daarvoor aan.

Wilt ie weer stemmen kijk je op ie dat al heeft gedaan en dan toon je de stemknop niet.
md5() voor de encryptie voor wachtwoorden is verouderd. Gebruik liever bcrypt met [php]password_hash[/php] en [php]password_verify[/php].
in de index1.php wordt in de database toch opgeslagen of hij heeft gestemd. dit gebeurt toch door $voted =1 of 2.

ik heb nu de cookie op -3600 gezet maar kan ik de $voted uitlezen of leegmaken?

[size=xsmall]Toevoeging op 30/10/2018 21:03:49:[/size]

ik heb zojuist de password_hash en verify gelezen. zal op zoek gaan hoe ik de sql query kan aanpassen

[size=xsmall]Toevoeging op 30/10/2018 21:14:50:[/size]

de query is nu

$query = "SELECT * FROM `users` WHERE username='$username'
and password='".$hashed_password."'";
Beveiliging is niet zo'n issue dat dit volgens de laatste methoden hoeft te gaan... het is een stemsysteem (geen geavanceerd content management systeem), waar je zelf de uitnodigingen hebt verstuurd.

Zoals @Adoptive aangeeft, je zult ergens bij moeten houden of iemand gestemd heeft.

Als deze applicatie uitsluitend dit doel heeft, en toch eenmalig wordt gebruikt, kun je dit desnoods in de users tabel opslaan.

Aan de client zijde (middels een cookie) bijhouden of iemand gestemd heeft is niet erg handig, en ook niet nodig - je weet immers wie er stemt omdat dit achter een login zit.

Het was trouwens ook niet per se nodig om zo'n loginsysteem te breien als je iedereen een unieke link had gestuurd die eenmalig bruikbaar was.

Reageren