2013-09-22 3 views
0

지난 10 분 이내에 페이지를 방문한 사용자의 수를 계산하는 PHP 스크립트를 작성하려고합니다. 지금 내 스크립트입니다 :웹 페이지에 사용자 수 표시

function getOnlineUsers($database, $main_connection){ 

    $database; 

    $visitor_id = session_id(); 

    $timestamp = time(); 
    $timeOut = $timestamp - 6000; 

    mysql_query("INSERT INTO online (m_time, ip) VALUES ('$timestamp', '$visitor_id')", $main_connection); 
    mysql_query("DELETE FROM online WHERE m_time < $timeOut"); 

    $result = mysql_query("SELECT * FROM online"); 
    mysql_fetch_assoc($result); 
    if(!$result){ 
     $online_users = 1; 
    }else{ 
     $online_users = mysql_num_rows($result); 
    } 

    return $online_users+1; 
} 

문제는 데이터베이스에 아무 것도 삽입되지 않아 데이터베이스가 비어있어 개수가 null이라는 것입니다. 누군가 나를 도와주세요.

+0

이 페이지에서 세션을 시작 했습니까? – Salim

+0

네, 첫 번째 PHP 라인이므로 질문에 포함시키지 않았습니다. – ReallyGoodPie

+0

어떤 PHP 버전을 사용하고 있습니까 – AdRock

답변

2

먼저 PDO 또는 MySQLi를 사용하십시오. 데이터베이스에서 'm_time'열은 정수 유형이어야하며 따옴표 안에 숫자가 아닌 $timestamp 값을 전달해야합니다.

"INSERT INTO online (m_time, ip) VALUES ($timestamp, '$visitor_id')" 
+0

감사합니다. 내가해야 할 일은 $ timestamp에서 따옴표를 제거하고 m_time의 데이터 유형을 int로 변경하는 것이다. 건배! – ReallyGoodPie

+0

이전 레코드를 삭제하는 데 문제가 있습니다. 이걸로 도울 수 있니? – ReallyGoodPie

1

1) NOW로 변경 '$ 타임 스탬프'(), MySQL은 PHP의 시간을 이해할 수 없다() 함수 (m_time)는 날짜 필드입니다 가정.

예 :

INSERT INTO online (m_time, ip) 
VALUES (NOW(), '$visitor_id') 

2) 삭제 같은 문제

3) 당신은 마지막 10 분 사용자를 얻기 위해 뭔가 좀 더 영리를 사용하여 같은 시도 할 수 있습니다 앓고 :

select count(*) AS OnlineUserCount 
from online 
WHERE 
m_time > DATE_SUB(NOW(), INTERVAL 10 MINUTE) ; 
-1

코드가 멋지다. 내가하는 것이 좋습니다. 실행하고 대처하고 붙여 넣기하고 phpMyAdmin에서 직접 실행하여 쿼리가 오류를 일으키는 지 확인하십시오. 행이 성공적으로 삽입되면 데이터베이스 연결 파일을 확인하는 것이 좋습니다.

또한 CoursesWeb에서 제안한 내용을 시도하십시오.

관련 문제