還是這個投票,基本完成,不過有點小問題。



$ip = getenv('REMOTE_ADDR');//得到ip
$time = date('Y-m-d');//得到當前日期
$query2=mysql_query("select * from user where ip='$ip'");
$row=mysql_fetch_array($query2);
if($time==$row[time]){
echo "<script language=javascript>alert('一天只能投一票');window.location.href='index.php';</script>";
}else{
mysql_query("INSERT INTO `vote`.`user` (`id` ,`time` ,`ip`,`picid` )VALUES (null, now(), '$ip', '$_GET[id]')");
$query=mysql_query("select * from pic where id=$_GET[id]");
$result=mysql_fetch_array($query);
$votes=$result[votes];
if($result){
$toupiao = "update pic set votes = $votes+ 1 where id =$_GET[id]";
mysql_query($toupiao);
echo "<script language=javascript>alert('投票成功');window.location.href='index.php';</script>";
}else{
echo "<script language=javascript>alert('投票失敗');window.location.href='index.php';</script>";
}
}

6 个解决方案

#1


pic表里放着所需要投票的目標,票數也在這里面。
vote表里放着投票信息,包括時間和ip
大體就是一個ip一天只能投一票

我知道肯定是$time==$row[time]這句出了問題,$row里面是個數組,不能用$time跟一個數組進行比較。但是我的想法是把先通過ip為條件把這個ip投過票的時間取出來,再通過時間判斷是不是今天投的票。這是我想到的一個笨方法,不知道怎么實現。

或者歡迎有經驗的老鳥們拍磚指導。如果我這樣寫的不合理的話重新寫就好了。不過這是我能想到的驗證是否相同ip同天投票的辦法了。

#2


$ip=$_SERVER['REMOTE_ADDR'];//獲取ip
$sql="select * from table2 where ip=$ip and time=".date('Ymd');
$res=$db->getRow($sql);
if($res){
  echo "每個人一天只能投一次";
}else{
 $upsql=update table_name set votes = votes + 1 where ...
 }

這是另外一個朋友發給我的。但是這樣寫的話會報錯(按照他的思路用普通的php寫出來,不是照搬),如果$res不存在的話那么就會報錯mysql_fetch_array沒有返回值。

#3



$query2=mysql_query("select * from user where ip='$ip' order by time desc");


這個是我現在的解決辦法,不過貌似有點不合理了

#4


select id from 投票表 where 投票ip=當前ip and  (投票時間戳< 當前天+1天) and (投票時間戳>當前天-1天)

如果能取到值說明已經投過票,不讓投,否則add一票

#5


第一段程序如果沒得記錄,取不到$row[time]的值,會出錯。
$query2=mysql_query("select * from user where ip='$ip'");
$row=mysql_fetch_array($query2);
if($time==$row[time]){
改成:
$query2=mysql_query("select count(*) from user where ip='$ip'" and time='.$time.');
$row=mysql_fetch_array($query2);
if (mysql_num_rows($row)==0){
這樣應該可以了。

#6


$ip = getenv('REMOTE_ADDR');//得到ip
$time = date('Y-m-d');//得到當前日期
$query2=mysql_query("select * from user where ip='$ip'  and `time`='$time'");

注意:time是mysql的保留字,最好換一個

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com