2011-09-19 80 views
0

我想要這樣的東西,當用戶按f5刷新網頁時,網頁會比較當前時間與上次在會話中存儲的時間。如果當前時間與上次相距5秒,則mysql將數據存儲到數據庫中。當用戶在50秒後刷新頁面時,mysql應該將1個數據存儲到數據庫,但是爲什麼mysql將10個數據存儲到數據庫?用戶只刷新頁面1次,但mysql插入10次。爲什麼會發生?我的代碼:爲什麼mysql插入10行而沒有for循環?

<?php 
if (strtotime($_SESSION[servertime]) < time()-5){ //10800 = 3 hours 3600 = 1 hour 
    $_SESSION['servertime'] = $servertime; 
    $_SESSION['ipaddress'] = $currentipAddress; 
    $query = "INSERT INTO traceuser 
       (ibrowser, operatingsystem, ipaddress, datetime, username) 
      VALUES (
      '{$userbrowser}', '{$CurrOS}', '{$currentipAddress}' 
      , '{$servertime}', '{$username}')"; 
    $result = mysql_query($query, $connection); 
} else { 
    echo "<script type='text/javascript'>alert('I did not save your info this time, because each visitor can save info for 1 time per 5 seconds.')</script>"; 
} 
?> 

我認爲這個問題是在這一行:if (strtotime($_SESSION[servertime]) < time()-5),當用戶新的頁面在50秒後,MySQL將數據存儲到數據庫,每次5秒鐘,因爲50秒 - 5秒= 10秒,所以MySQL插入10行。如何讓mysql只插入1行?

更新:發現問題!!!我每隔10秒檢查一次數據庫記錄,並且我意識到它會每10秒鐘插入一次新數據,儘管我沒有按f5刷新頁面。問題是因爲我在我的網站上添加了Yahoo Ping Box!據我所知,雅虎Ping Box Messenger將每10秒鐘檢查一次新郵件,我不確定雅虎Ping Box代碼如何影響我的php/mysql代碼?我可否知道如何防止雅虎Ping Box代碼影響我的php/mysql代碼?這是雅虎中國平安盒造成的問題代碼:

<object id="pingboxh57fsuytam000" type="application/x-shockwave-flash" data="http://wgweb.msg.yahoo.com/badge/Pingbox.swf" width="610" height="320"><param name="movie" value="http://wgweb.msg.yahoo.com/badge/Pingbox.swf" /><param name="allowScriptAccess" value="always" /><param name="flashvars" value="wid=oCqiyuy8QmXM8PXSd0uhP6Au" /></object> 

您可以通過複製測試它的雅虎中國平安的郵箱代碼粘貼到你的PHP/MySQL的腳本,你會看到神奇的保持插入記錄到你的數據庫每5到10秒鐘一次。我可否知道如何防止雅虎Ping Box代碼影響我的php/mysql代碼?

+0

使用'$ _SESSION ['servertime']'而不是'$ _SESSION [servertime]'。 – str

+7

這段代碼不會插入10行,除非它被調用了10次。 – Jon

+3

與問題無關,但爲什麼我沒有看到任何'mysql_real_escape()'調用?如果用戶修改會話數據以包含諸如'servertime =「',''); DELETE FROM traceuser; - 」'? – glglgl

回答

1

您的網頁是否使用ajax或其他一些可能每頁加載多次觸碰您的服務器的技術?我同意,寫入的代碼只能在每次通話時寫入一次。 幫助弄清楚發生了什麼的方法是在if語句中放置一個斷點,或者在其中添加一個error_log()(如果沒有設置調試器)。我懷疑你會發現你的代碼被客戶多次調用。 Mike

+0

是的,我的代碼上有ajax,但ajax是選擇並顯示記錄,與INSERT記錄無關。只有這一行的ajax'jQuery.get(「showlists.php?servertime =」 + servertime + 「&usertime =」 + usertime,功能(的項目列表){ \t \t $( '#fullList')追加(的項目列表); \t \t });' – zac1987

+0

謝謝你,因爲ü激勵我看看我發現了這個問題!!!我每隔10秒鐘檢查一次數據庫記錄,並且我意識到它會每10秒鐘插入一次新數據,儘管我沒有按f5來刷新頁面。是因爲我在我的網站上添加了Yahoo Ping Box !!!據我所知,Yahoo Ping Box Messenger會每10秒鐘檢查一次新郵件,我不確定Yahoo Ping Box代碼如何影響我的php/mysql代碼?知道如何防止雅虎Ping Box代碼影響我的PHP/MySQL代碼?我已經展示了雅虎Ping Box代碼到我的問題。 – zac1987