2011-10-19 31 views
1

對,這裏是我的代碼限制表單提交率。提交表單時需要時間戳和IP地址,然後在頁面加載時,我有一條SQL語句,它接受用戶IP,計算它在過去一小時內在數據庫中出現的次數,如果是2,那麼郵政信箱不顯示,否則,問題是,它不是很有效,它只是不斷顯示信箱。代碼如下:用if/else語句檢查MySql計數結果

<?php 

$IP = $_SERVER['REMOTE_ADDR']; 
$sql = "select count(*) from mysql_table where ip='$IP' and timestamp > (DATE_ADD(now(), INTERVAL -1 HOUR))"; 
$result = mysql_query($sql) or print mysql_error(); 

if ($result['count(*)'] == 2) { 
die('You are out of posts this hour.'); 
} 

else { 
?> 

<font style="position:relative; margin: 0 auto; top:15px; color:#fff; font-size:16px; font-family:Arial;">Note, once you have posted, it <b>CANNOT</b> be removed.</font> 
<div id="postbox"> 
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>"> 
<textarea id="postbox" name="postbox"></textarea><br /> 
<input type="checkbox" name="allowcommenting" value="1" id="commenting" CHECKED ><font style="margin-right:45px; font-family:Arial; font-size:18px; color:#fff; position:relative; top:15px;">Allow commenting?</font> 
<?php 
      require_once 'math-security.php'; 

      $math = new BasicMathSecurity('math'); 
      echo $math->getField(); 
?> 
<input type="submit" name="submit" id="submit" value="Share" value="This cannot be undone." /> 
</form> 
</div> 

<?php 
} 
?> 
+0

這需要基本調試即可。數據庫中的IP是什麼?查詢結果是什麼?等等 –

+0

順便說一句,在將數據放入數據庫之前,您應該清理'$ IP',即使極不可能'REMOTE_ADDR'被僞造。 –

+0

IP已輸入。我現在檢查查詢。 – AviateX14

回答

1

$result在這種情況下還不包含計數。您必須首先從查詢的結果集中獲取結果行,然後才能進行比較。

$sql = "select count(*) from mysql_table where ip='$IP' and timestamp > (DATE_ADD(now(), INTERVAL -1 HOUR))"; 
$result = mysql_query($sql) or print mysql_error(); 
if($row = mysql_fetch_row($result)) { 
    if ($row[0] == 2) { 
     die('You are out of posts this hour.'); 
    } 
} 
+0

這將返回一個錯誤,(!)警告:mysql_fetch_row()期望參數1是資源,在453行的C:\ wamp \ www \ anonpost \ index.php中給出的布爾值 – AviateX14

0

使用mysql_fetch_assoc($result)mysql_fetch_array($result) 下面是一個例子:

$query = 'SELECT count(*) FROM '.$table; 
$result = mysql_query($query); 
$res = mysql_fetch_array($result); 
echo "Count - ".$res[0];exit;