2011-09-19 3 views
0

나는 이것을 원한다. 사용자가 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 코드에 영향을 미치지 않도록하는 방법을 알고 있습니까?

+0

'$ _SESSION [servertime]'대신'$ _SESSION [ 'servertime']'을 사용하십시오. – str

+7

10 번 호출하지 않는 한이 코드가 10 개의 행을 삽입하는 방법은 없습니다. – Jon

+3

문제와 관련이 없지만 mysql_real_escape() 호출이 보이지 않는 이유는 무엇입니까? 사용자가 'servertime = "', '')와 같은 내용을 포함하도록 세션 데이터를 수정하면 traceuser에서 삭제하십시오. – glglgl

답변

1

페이지에서 아약스 또는 페이지로드 당 서버에 여러 번 도달하는 다른 기술을 사용합니까? 필자는 작성된 코드가 한 번 호출 할 때만 쓰는 것에 동의합니다. 무슨 일이 일어나는지 알아내는 방법은 if ​​절 안에 중단 점을 넣거나 디버거를 설정하지 않은 상태에서 error_log()를 추가하는 것입니다. 나는 당신의 코드가 클라이언트에 의해 여러 번 호출된다는 것을 알게 될 것으로 생각한다. 마이크

+0

예, 아약스는 내 코드에 있지만, 아약스는 있습니다. INSERT 레코드와 관련이없는 레코드를 선택하여 보여줍니다. 이 라인의 아약스'jQuery.get ("showlists.php?servertime = "+ servertime +"& usertime = "+ usertime, 기능 (itemlists) { \t \t $ ('#의 fullList') 추가 (itemlists). \t \t });' – zac1987

+0

당신 덕분에 유보고 나에게 영감을하기 때문에를 "다른 기술"에 대해. 문제가 발견되었습니다. 데이터베이스 레코드를 10 초마다 확인하고, 페이지를 새로 고치기 위해 f5를 미리 설정하지 않았더라도 매 10 초마다 새 데이터를 계속 삽입합니다. 야후 핑 박스를 내 웹 사이트에 추가했기 때문에 야후 핑 박스 메신저가 매 10 초마다 새로운 메시지를 확인할 것인가, 야후 핑 박스 코드가 내 PHP/MySQL 코드에 어떻게 영향을 줄 수 있는지 잘 모르겠다. 야후 핑 박스 (Yahoo Ping Box) 코드가 내 PHP/MySQL 코드에 영향을 미치지 않도록하는 방법을 알고 있습니까? 내 질문에 야후 핑 박스 (Yahoo Ping Box)의 코드를 보여 줬습니다. – zac1987

관련 문제