2012-01-21 68 views
0

有一個觸發下面的代碼的腳本無法添加24小時投票系統?

我想不允許每24小時執行一次以上的腳本。

我希望這個腳本將最後一次訪問時間存儲在數據庫中的用戶標識中,然後進行時間計算並將它們退出,直到24小時到期時間。

有人可以解釋如何做到這一點?如果有人能幫助我,我將不勝感激。

<?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.'; 
    [email protected]$REMOTE_ADDR; 
    setcookie ("24Hourvote",$ip,time()+86400,'/',true,… 
} else { 
    echo 'You have already voted today! Come back later...'; } 
?> 

編輯:我可以讓它顯示剩下的時間,直到用戶可以再次投票嗎?

+1

可能的重複http://stackoverflow.com/questions/8952248/i-need-assistance-with-my-php-script-this-is-simple-and-pays-20-dollars – CodeZombie

+0

不,我重新發布並問了更多明智的問題,並沒有提供任何金錢。 –

+1

您需要閱讀SQL注入。另外,'$ var =「INSERT INTO $ dbname。$ dbtable ...」'是有效的語法。我不知道是誰給你的想法,「foo $ bar baz」應該是「foo」。$ bar。「baz」',但它不應該 - 它的不可讀。 – derobert

回答

0
<?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']);

補充:

// 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 
    { 
     ... 
    } 

UPDATE

我想強調的事實,因爲它代表任何人都可以進入播放器的名稱,並嘗試把票投給它,這並不一定意味着誰點擊投票按鈕相同的用戶。

另外不被用於任何目的IP地址,它可能是一個想法,用這個作進一步的權限/安全檢查。

+0

非常感謝!當我得到這個項目的付款時,你想讓我給你寄錢嗎? –

+0

林對 –

+0

警告檢查:mysql_real_escape_string()[function.mysql實時逃逸字符串]:無法通過套接字(2)在「/var/lib/mysql/mysql.sock」連接到本地MySQL服務器/在家庭/內容/8839583分之83/ HTML/Endcraftredeem.php線12 –

1

對我來說,它看起來像你已經知道你必須做的:

我在database.Then希望這個腳本店最後訪問時間在表 對用戶ID做時間計算和 退出,直到24小時到期時間。

所以:

  1. 忘掉的cookie。它存儲在客戶端,可以被操縱。
  2. 計數投票前,請檢查當前用戶的[lastvisit]字段。
  3. 如果未設置計數投票並將表中的[lastvisit]字段設置爲當前日期。
  4. 如果設置計算從現在到最後一票的時間跨度。如果大於24小時,請對票進行計數並將表中的[lastvisit]字段設置爲當前日期。

注意的:

  • 操縱參數:$_POST['Player'];
  • SQL注入:VALUES ('".$player."', '".$input."')

如果你有這些任務的一個問題,然後問一下具體的問題。

+0

你能解釋一下如何做到這一點? –

+0

這個答案是非常有幫助的,但似乎有點含糊,你可能給我一些示例代碼片段? –

+0

@Wthrwthr:它似乎只是模糊的。提供代碼幾乎可以完成這項工作,而且我不是免費編寫代碼的人,除非它是一個不錯的開源項目。此外,您的代碼段需要完整的審查,這需要一些時間。 – CodeZombie