我想要這樣的東西,當用戶按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代碼?
使用'$ _SESSION ['servertime']'而不是'$ _SESSION [servertime]'。 – str
這段代碼不會插入10行,除非它被調用了10次。 – Jon
與問題無關,但爲什麼我沒有看到任何'mysql_real_escape()'調用?如果用戶修改會話數據以包含諸如'servertime =「',''); DELETE FROM traceuser; - 」'? – glglgl