我是php编码和网站设计的新手。
我正在尝试开发一个在线投票系统,只允许注册用户投票。我已经完成了所有工作并且工作正常,但我需要的帮助是在用户注销后,如何让用户无法再次登录并投票两次?或者我如何才能第二次重定向用户?
答案 0 :(得分:0)
您可以通过获取数据库表中的字段来管理用户。通过在登录时在该字段上应用条件,您将能够限制已经投票的用户。
答案 1 :(得分:0)
如果你真的想过你会看到它有多容易,那就不难实现。
您的用户表必须具有唯一ID才能让用户识别用户,然后您的表列上还需要有一个枚举字段,您可以将其命名为votingstatus
并将其默认值设置为a,然后,当用户成功投票时,您将该字段更新为b
,然后您可以查看votingstatus = b
所有用户的表单控件,这样您就不会允许{{1}投票的状态。当用户登录时,您需要检查b
用户是否votingstatus
然后允许登录,如果其a
返回适当的消息并拒绝访问。
示例表
b
投票的示例
CREATE TABLE `voters` (
`voter_id` int(6) NOT NULL,
`id_number` varchar(255) NOT NULL,
`firstname` varchar(255) DEFAULT NULL,
`lastname` varchar(255) DEFAULT NULL,
`email` varchar(255) NOT NULL,
`voting_status` enum('a','b') DEFAULT 'a',
`password` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
登录:
<?php
try {
$dbh->beginTransaction();
$stmt = $dbh->prepare("UPDATE candidates set votes = votes + 1 where candidate_Id = ? ");
if ($stmt->execute([$selectedvoter])) {
$update = $dbh->prepare("UPDATE voters set voting_status = 'b' where voter_id = ?");
$update->execute([$_SESSION['voter']]);
$dbh->commit();
echo "<p class=\"alert alert-success\">Vote Casted</p>";
}else{
echo "<p class=\"alert alert-danger\"> could not cast Vote</p>";
}
}
catch (PDOException $e) {
error_log("Error : " . $e->getMessage());
}
?>
登录代码仅允许选民try {
$stmt = $dbh->prepare("SELECT voter_id,id_number,password from voters where id_number = ? AND voting_status = 'a' ");
$stmt->bindValue(1,$username);
$stmt->execute();
$results = $stmt->fetchall(PDO::FETCH_ASSOC);
if(count($results) > 0){
foreach($results as $row){
if(password_verify($password,$row['password'])){
$SignError="<div class=\"alert alert-success\">
<button class=\"close\" data-dismiss=\"alert\">x</button>
Login Success. Redirecting...
</div>";
header("refresh:4;url=page.php"); // change page to ur dashboard url
}else{
$SignError="<div class=\"alert alert-error\">
<button class=\"close\" data-dismiss=\"alert\">x</button>
Password and ID number does not match
</div>";
}
}
}else{
$SignError="<div class=\"alert alert-error\">
<button class=\"close\" data-dismiss=\"alert\">x</button>
Password and ID number does not match
</div>";
}
} catch (PDOException $e) {
error_log($e);
}
(意味着尚未投票的用户)