我想要这样的东西,当用户按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