大家好!
我知道使用IP地址不是投票系统的最佳方法,但就我而言,这很好!
我想要实现的目标:管理员可以为民意调查设定一个问题.用户回答问题,并可以每天使用其IP地址为每个答案投票.
到目前为止,我所拥有的:管理员可以为民意调查设定一个问题.用户可以使用其IP地址回答一次该问题. (您只能为每个IP地址投票一次)
数据库:
表格选项:ID和名称这是保存问卷调查答案的表格.表投票者:id,option_id,ip,今天和数字这是保存投票者ip地址,他要投票的答案,投票日期(尚未工作)以及用于获取总数的数字的表的选票.
我有3个PHP文件:muziek.PHP,insertM.PHP和Vote.PHP
投票.PHP投票投票.
人们只能使用一次IP地址,现在我要这样做,以便人们可以每天使用其IP地址.
投票.PHP:
private function _alreadyVote($ip,$today)
{
$sql = "SELECT * FROM ".$this->_VoterTable." WHERE ip='".$ip."' AND DATE(today) = CURDATE()";
$result = $this->_query($sql);
return sizeof($result)>0;
}
//public functions
public function Vote($optionId)
{
$ip = $_SERVER['REMOTE_ADDR'];
$today = date('Y-m-d');
if(!$this->_alreadyVote($ip,$today)){
$sql ='INSERT INTO '.$this->_VoterTable.' (id,option_id,ip,today) '.' VALUES(NULL,"'.MysqL_real_escape_string($optionId).'","'.MysqL_real_escape_string($ip).'","'.MysqL_real_escape_string($today).'")';
MysqLi_query($conn, $sql);
$result = MysqL_query($sql,$this->_con);
if(!$result){
die('unable to insert'. MysqL_error());
}
}
}
我需要跟踪日期并检查当前日期是否等于投票用户数据库中的日期.如果不同,则用户应该能够再次投票,并且将设置一个新日期.
谢谢阅读!
请问我是否要我发布更多代码.
解决方法:
执行这种查询以确定IP地址和当前日期的组合是否返回任何结果:
$sql = "SELECT COUNT(*) as rowCount FROM ".$this->_VoterTable." WHERE ip='".$ip."' AND DATE(latestVoteDate) = CURDATE()";
如果返回行(或行数),则应拒绝“人员”投票的能力.如果不是这种情况,则可以进行投票.投票后,使用ip地址($ip)将行的LatestVoteDate更新为CURDATE().
$conn = MysqLi_connect("localhost","my_user","my_password","my_db");
$query = MysqLi_query( $conn, $sql );
$data = MysqLi_fetch_assoc( $query );
if($data['rowCount'] > 0)
{
die("You are not allowed to Vote");
}
else
{
// Show the voting page or partial
}
然后,当实际发生表决操作时,将包含正确IP的行更新为当前日期:
$sql = "UPDATE ".$this->_VoterTable." SET latestVoteDate = CURDATE() WHERE ip = '" . $ip . "';";
MysqLi_query($conn, $sql);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。