stempagina aanpassen
Pagina: 1 2 3 4 5 6 volgende »
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
Gewijzigd op 17/12/2019 10:17:53 door - Ariën -
De beste drempel is een registratiesysteem met opslag van unieke mailadressen, maar alsnog kunnen mensen meerdere mailadressen gebruiken.
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
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.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
<!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 }?>
<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 }?>
Edit:
Ik heb code-tags geplaatst. Gelieve dit in het vervolg zelf toe te voegen aan je bericht.
Zie ook: Veel gestelde vragen: Welke UBB-codes kan ik gebruiken.
Zie ook: Veel gestelde vragen: Welke UBB-codes kan ik gebruiken.
Gewijzigd op 30/10/2018 22:19:32 door - Ariën -
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.
ik heb nu de cookie op -3600 gezet maar kan ik de $voted uitlezen of leegmaken?
Toevoeging op 30/10/2018 21:03:49:
ik heb zojuist de password_hash en verify gelezen. zal op zoek gaan hoe ik de sql query kan aanpassen
Toevoeging op 30/10/2018 21:14:50:
de query is nu
$query = "SELECT * FROM `users` WHERE username='$username'
and password='".$hashed_password."'";
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.
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!
Gewijzigd op 30/10/2018 21:29:30 door Adoptive Solution
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!
Gewijzigd op 30/10/2018 22:19:57 door - Ariën -
@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?
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.
Gewijzigd op 30/10/2018 22:27:17 door - Ariën -
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$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>';
}
?>
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.
Gewijzigd op 31/10/2018 10:02:50 door Hans Zijlstra
Die geeft blijkbaar geen true door.
als ik de // weghaal krijg ik de mededeling dat ik al gestemd heb
Ik wil weten hoe die functie eruitziet.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?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;
}
}
?>
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;
}
}
?>
Pagina: 1 2 3 4 5 6 volgende »