数据库
首页 > 数据库> > PHP / MYSQL只允许每个成员投一票?

PHP / MYSQL只允许每个成员投一票?

作者:互联网

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

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

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

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

<?php
//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