首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >添加24小时投票系统有问题吗?

添加24小时投票系统有问题吗?
EN

Stack Overflow用户
提问于 2012-01-21 18:50:09
回答 2查看 521关注 0票数 0

有一个脚本可以触发下面的代码

我想禁止每24小时执行一次以上的脚本。

我希望这个脚本根据数据库中的用户id将上次访问时间存储在一个表中,然后进行时间计算,并将其回退到24小时过期时间。

有人能解释一下如何做到这一点吗?如果有人能帮我解决这个问题,我将不胜感激。

代码语言:javascript
运行
复制
<?php
//Input correct values into this section
$dbhost = '888888';
$dbuser = '888888';
$dbpass = '888888';
$dbname = '888888';
$dbtable = 'redeem';
$dbtable2 = 'playersthatvoted';
//------------------------------------
$input = 'diamond 12';
$player = $_POST['Player'];
$time = time();
if(!isset($_COOKIE['24Hourvote'])){
   //---- This is the connection
   $conn = mysql_connect ($dbhost, $dbuser, $dbpass) or die ('Error: ' . mysql_error());
   mysql_select_db($dbname);
   $query1 = "INSERT INTO `".$dbname."`.`".$dbtable."` (`player`, `item`) VALUES ('".$player."', '".$input."')";
   $query2 = "INSERT INTO `".$dbname."`.`".$dbtable2."` (`player`, `time`) VALUES ('".$player."', '".$time."')";
   mysql_query($query1);
   mysql_query($query2);
   $query= 'SELECT `player` FROM `playersthatvoted` ASC LIMIT 0, 10 ';
   $result = mysql_query($query);
   mysql_close($conn);
   echo 'Done! Type /redeem in-game to get your diamonds.';
   $ip=@$REMOTE_ADDR;
   setcookie ("24Hourvote",$ip,time()+86400,'/',true,…
} else {
   echo 'You have already voted today! Come back later...'; }
?>

编辑:我可以让它显示用户可以再次投票前的剩余时间吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-21 20:26:06

代码语言:javascript
运行
复制
<?php
//Input correct values into this section
$dbhost = '888888';
$dbuser = '888888';
$dbpass = '888888';
$dbname = '888888';
$dbtable = 'redeem';
$dbtable2 = 'playersthatvoted';
//------------------------------------
$input = 'diamond 12';
$time = time();
if(!isset($_COOKIE['24Hourvote'])){
       $ip = $_SERVER['REMOTE_ADDR'];
   //---- This is the connection
   $conn = mysql_connect ($dbhost, $dbuser, $dbpass) or die ('Error: ' . mysql_error());
   mysql_select_db($dbname);

      // Escape all user entered data always
      $player = mysql_real_escape_string($_POST['Player']);

   // Select time for this player if available
   $query = "SELECT time FROM playersthatvoted WHERE player = '$player' ORDER BY time DESC LIMIT 0, 1";
   $result = mysql_query($query);

   if(mysql_num_rows($result) != 0)
   {
       $row = mysql_fetch_row($result);
       $last_visit = $row[0];
       $vote_allowed_time = $last_visit + 86400; 

       // Allowed to vote
       if($time > $vote_allowed_time)
       {
           // Do whatever else you need to here ...

           setcookie ("24Hourvote",$ip,time()+86400,'/');
       }
       else
       {
           echo 'This player has already voted today! Come back later...';
       }
   }
   else
   {
       $query1 = "INSERT INTO `".$dbname."`.`".$dbtable."` (`player`, `item`) VALUES ('".$player."', '".$input."')";
       $query2 = "INSERT INTO `".$dbname."`.`".$dbtable2."` (`player`, `time`) VALUES ('".$player."', '".$time."')";
       mysql_query($query1);
       mysql_query($query2);
       $query= 'SELECT `player` FROM `playersthatvoted` ASC LIMIT 0, 10 ';
       $result = mysql_query($query);
       mysql_close($conn);
       echo 'Done! Type /redeem in-game to get your diamonds.';

       setcookie ("24Hourvote",$ip,time()+86400,'/');
   }
} else {
   echo 'You have already voted today! Come back later...'; }
?>

注意:永远不要相信用户的输入,总是验证和转义数据。

已更改:

$player = $_POST['Player'];

至:

$player = mysql_real_escape_string($_POST['Player']);

添加:

代码语言:javascript
运行
复制
 // Select time for this player if available
 $query = "SELECT time FROM playersthatvoted WHERE player = '$player' ORDER BY time DESC LIMIT 0, 1";
 $result = mysql_query($query);


if($result)
   {
       $row = mysql_fetch_row($result);
       $last_visit = $row[0];
       $vote_allowed_time = $last_visit + 86400; 

       // Allowed to vote
       if($time > $vote_allowed_time)
       {
           // Do whatever else you need to here ...

           setcookie ("24Hourvote",$ip,time()+86400,'/');
       }
       else
       {
           echo 'This player has already voted today! Come back later...';
       }
   }
   else
   {
       ...
   }

更新

我想强调的是,任何人都可以输入球员名称并尝试投票,这并不一定意味着单击投票按钮的用户是同一个用户。

此外,IP地址未用于任何目的,因此可以将其用于进一步的权限/安全检查。

票数 0
EN

Stack Overflow用户

发布于 2012-01-21 19:10:52

在我看来,你已经知道该怎么做了:

我想让这个脚本将最后一次访问时间存储在表中,对照database.Then中的用户id,执行一个时间计算,并将它们回退到24小时过期时间。

所以:

  1. 忘了饼干吧它存储在客户端,可以manipulated.
  2. Before计数投票,检查当前用户的上次访问字段。
  3. 如果未设置,则计数投票并将表中的上次访问字段设置为当前日期。
  4. 如果设置,则计算从现在到上次投票的时间跨度。如果大于24小时,请计算投票数,并将表中的date字段设置为当前日期。

请注意:

$_POST['Player'];

  • SQL注入操纵的参数:VALUES ('".$player."', '".$input."')

如果你在这些任务中遇到了问题,那就问一下具体的问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8952402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档