为什么mysql在没有for循环的情况下插入10行?

时间:2011-09-19 12:42:33

标签: php mysql

我想要这样的东西,当用户按f5刷新网页时,网页会将当前时间与会话中存储的上一次时间进行比较。如果当前时间与前一次相差5秒,那么mysql会将数据存储到数据库中。当用户在50秒后刷新页面时,mysql应该将1个数据存储到数据库,但为什么mysql将10个数据存储到数据库?用户只刷新页面一次,但mysql插入10次。为什么会这样?我的代码:

<?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!据我所知,Yahoo Ping Box Messenger将每隔10秒检查一次新消息,我不确定Yahoo Ping Box代码如何影响我的php / mysql代码?我可以知道如何防止Yahoo Ping Box代码影响我的php / mysql代码吗?这是导致问题的Yahoo Ping框的代码:

<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>

您可以通过将Yahoo Ping Box代码复制粘贴到您的php / mysql脚本中来测试它,您将看到魔术师每隔5到10秒将记录插入到您的数据库中。我可以知道如何防止Yahoo Ping Box代码影响我的php / mysql代码吗?

1 个答案:

答案 0 :(得分:1)

您的网页是否使用ajax或其他一些技术可能会在每次加载时多次命中您的服务器?我同意所写的代码每次调用只能写一次。 一种帮助弄清楚正在发生什么的方法是在if子句中放置一个断点,或者在那里添加一个error_log()(如果你没有设置调试器)。我怀疑你会发现客户端多次调用你的代码。 麦克