首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >验证用户只投票一次

验证用户只投票一次
EN

Stack Overflow用户
提问于 2012-04-24 14:06:47
回答 3查看 3.2K关注 0票数 1

我目前正在遵循这个tutorial来创建一个简单的投票系统。

它工作得很好,除了验证部分,用户应该只能投票一次。本教程使用的IP不适用于具有动态IP的用户

代码语言:javascript
运行
复制
<?php
include("config.php");
$ip=$_SERVER['REMOTE_ADDR'];

if($_POST['id'])
{
$id=$_POST['id'];
$id = mysql_escape_String($id);
//Verify IP address in Voting_IP table
$ip_sql=mysql_query("select ip_add from Voting_IP where mes_id_fk='$id' and ip_add='$ip'");
$count=mysql_num_rows($ip_sql);

if($count==0)
{
// Update Vote.
$sql = "update Messages set up=up+1 where mes_id='$id'";
mysql_query( $sql);
// Insert IP address and Message Id in Voting_IP table.
$sql_in = "insert into Voting_IP (mes_id_fk,ip_add) values ('$id','$ip')";
mysql_query( $sql_in);
echo "<script>alert('Thanks for the vote');</script>";
}
else
{
echo "<script>alert('You have already voted');</script>";
}

$result=mysql_query("select up from Messages where mes_id='$id'");
$row=mysql_fetch_array($result);
$up_value=$row['up'];
echo $up_value;

}
?>

有没有更好的方法来确保用户只投票一次?

EN

回答 3

Stack Overflow用户

发布于 2012-04-24 14:21:00

简化版怎么样?

代码语言:javascript
运行
复制
<?php
 //HERE include DB config and set variables
 $result = mysql_query("SELECT * FROM votes WHERE id = '$id' AND ip = '$ip'");
  $count = mysql_num_rows($result);
 if($count > 0){
  echo "<script>alert('You have already voted');</script>";
 }
 else{
  //Update Sets
 }
?>

但最终,您应该使用用户帐户或cookie。虽然用户可以清除浏览器中的cookie,但用户也可以具有动态IP地址。这也适用于使用具有单个IP的大型网络(免费Wi-Fi网络、学校、工作场所)的用户

我认为创建用户帐户是最好的主意

代码语言:javascript
运行
复制
<?php
 $result = mysql_query("SELECT * FROM votes WHERE username = '$_SESSION[username]' AND id             = '$id'");
?>
票数 1
EN

Stack Overflow用户

发布于 2015-11-19 06:17:16

这样就不需要数据库存储了。相反,在投票时:

代码语言:javascript
运行
复制
set_cookie($_POST['id'], "1", time()+60*60*24*365)

然后,当您显示post时,请检查cookie是否设置为:

代码语言:javascript
运行
复制
if(!($_COOKIE[$_POST['id']])){   //if user hasn't voted
  // display vote buttons
}else{
  // don't display vote buttons
}
票数 1
EN

Stack Overflow用户

发布于 2013-05-22 19:26:29

另一种确保用户只投票一次而不创建用户帐户的方法是创建一个投票系统,其中用户必须提供其电子邮件地址以进行确认。

  1. 用户通过输入其电子邮件地址进行投票;此地址存储在数据库中。
  2. 当用户提交投票时,然后向该地址发送电子邮件,要求确认投票
  3. 在投票已确认后,这是合法的投票,并且在将来可以轻松地进行检查
  4. 在流程结束时从数据库中清除未确认的投票

上面的步骤也可以用来确认比赛的年龄或其他重要的人口统计信息(有很小的变化)。我们已经在我们的客户网站上使用了相当多的这种方法来运行竞赛,并且运行良好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10292557

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档