나는 이것을 원한다. 사용자가 f5 키를 눌러 웹 페이지를 새로 고침하면 웹 페이지는 현재 시간을 세션에 저장된 이전 시간과 비교할 것이다. 현재 시간이 이전 시간에서 5 초가 지난 경우 mysql은 데이터를 데이터베이스에 저장합니다. 사용자가 50 초 후에 페이지를 새로 고칠 때, mysql은 데이터베이스에 1 개의 데이터를 저장해야하지만, 왜 mysql은 데이터베이스에 10 개의 데이터를 저장 하는가? 사용자는 한 번만 페이지를 새로 고치지 만 mysql은 10 번 삽입합니다. 왜 이런 일이 일어 났습니까? 내 코드 :mysql이 for 루프없이 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초 - 오초 = 십초 그래서 mysql은 10 개의 행을 삽입한다. mysql을 단지 1 행만 삽입하는 방법은?
업데이트 : 발견 된 문제! 필자는 데이터베이스 기록을 매 10 초마다 확인하고 페이지를 새로 고치기 위해 f5를 미리 설정하지 않았더라도 매 10 초마다 새로운 데이터를 계속 삽입한다는 것을 알고 있습니다. 문제는 내가 Yahoo Ping Box를 내 웹 사이트에 추가했기 때문입니다! 내가 아는 바에 따르면, Yahoo Ping Box 메신저는 매 10 초마다 새로운 메시지를 확인할 것이며, Yahoo Ping Box 코드가 어떻게 PHP/MySQL 코드에 영향을 줄 수 있는지 모르겠습니다. Yahoo 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 초마다. Yahoo Ping Box 코드가 내 PHP/MySQL 코드에 영향을 미치지 않도록하는 방법을 알고 있습니까?
'$ _SESSION [servertime]'대신'$ _SESSION [ 'servertime']'을 사용하십시오. – str
10 번 호출하지 않는 한이 코드가 10 개의 행을 삽입하는 방법은 없습니다. – Jon
문제와 관련이 없지만 mysql_real_escape() 호출이 보이지 않는 이유는 무엇입니까? 사용자가 'servertime = "', '')와 같은 내용을 포함하도록 세션 데이터를 수정하면 traceuser에서 삭제하십시오. – glglgl