我一直在设置奖励投票系统的任务,我不太了解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());
?>
Run Code Online (Sandbox Code Playgroud)
谢谢
您可以向表中添加UNIQUE约束.这是一次性操作 - 每次脚本运行时都不需要执行此操作,这是对表结构的更改.在你的MySQL管理工具中运行它(例如phpMyAdmin,Navicat,HeidiSQL,what-have-you):
ALTER TABLE awards_2009_votes ADD UNIQUE (member_id);
Run Code Online (Sandbox Code Playgroud)
在此更改之后,将无法使用相同的成员ID添加第二个投票 - INSERT(或UPDATE)将失败.
这里的优点是检查在数据库中自动完成,因此您不必担心1)使用您的代码检查重复项或2)人们手动添加多个投票.
正如@ middaparka所说,你应该INSERT IGNORE用来避免"重复密钥"错误:
$sql_query = mysql_query("INSERT IGNORE INTO awards_2009_votes (`member_id`, `region`, `coach`, `official`, `volunteer`, `young_volunteer`) VALUES ('$memberid', '$region', '$coach', '$official', '$volunteer', '$young_volunteer')") or die (mysql_error());
if (mysql_insert_id()) {
// row was inserted - vote added
} else {
// row was not inserted - already voted
}
Run Code Online (Sandbox Code Playgroud)