php 一天只能投一次票,PHP / MYSQL只允许每个成员投一票?

博客内容涉及修复一个投票系统,其中允许用户多次投票。作者发现代码缺陷并寻求解决方案。提出了一个简单的检查方法,即在插入投票前查询数据库以确认用户是否已投票。此外,还建议通过在数据库表中添加唯一约束来永久解决此问题。
摘要由CSDN通过智能技术生成

我一直在设置奖励投票系统的任务,我不太了解php和mysql.但我比其他任何人都更了解这一点,而我的老板正在度假.但是我一直在重用这些代码,这些代码以前留在了我们的系统上,并在今年进行了调整.

基本上投票系统工作正常,我在mysql中设置新表来捕获数据.我在现有代码中发现了一个相当大的缺陷,但我不确定如何修改它.基本上,代码允许人们在此刻多次投票.我想将每个成员仅限1票,以保持公平.

所以目前,会员使用会员号登录,然后投票.投票存储在mysql表中,然后我可以通过查询数据来累加投票.

我希望有人可以帮我添加一行或两行代码,只需检查成员是否已经投票.当一个成员投票时,他们的成员没有.存储在sql表中以及他们的投票选择.因此,最好的方法是查看表中是否已存在memeberid,如果确实存在,请告诉用户他们已经投票 – 或者说是这样的话.

//Insert into volunteer awards

$coach=mysql_real_escape_string($_SESSION['coach']);

$official=mysql_real_escape_string($_SESSION['official']);

$young_volunteer=mysql_real_escape_string($_SESSION['young_volunteer']);

$volunteer=mysql_real_escape_string($_SESSION['volunteer']);

$memberid=$_SESSION['MM_Username'];

$association=$_SESSION['MM_Association'];

$region=$_SESSION['Region'];

$sql_query = mysql_query("INSERT INTO awards_2009_votes (`id`, `member_id`, `region`, `coach`, `official`, `volunteer`, `young_volunteer`) VALUES ('', '$memberid', '$region', '$coach', '$official', '$volunteer', '$young_volunteer')") or die (mysql_error());

?>

谢谢

解决方法:

这是一个快速而肮脏的方法:

$sql_query = "SELECT FROM awards_2009_votes WHERE member_id = '$memberid'";

$sql_result = mysql_query($sql_query);

$num_rows = mysql_num_rows($sql_result);

if ($num_rows > 0) {

// this member has already voted

} else {

// carry on

}

正如Piskvor指出的那样,这个解决方案至少有两个限制:

>它仅限于包含它的方法,因此它通常不会阻止多次投票 – 只能通过这种特定的方法. (您可以编写一个函数来包含相同的检查,但是您仍然需要在用户尝试投票的任何地方调用该函数.)

>这会对数据库造成额外的压力,这在高流量情况下可能是不可接受的.

考虑到这些要点,我的建议是首先运行一个脚本来检查您的投票表中是否出现重复的member_id值,在每种情况下删除除一个以外的所有值,然后将UNIQUE约束添加到您的表中.从那里你可以确定你的表永远不会有多个具有相同member_id的行.

标签:php,mysql,voting-system

来源: https://codeday.me/bug/20190716/1473168.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值