2011-09-19 81 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