방문자 카운터에 관해서 질문좀 드릴께요 > 그누4 질문답변

그누4 질문답변

그누보드4 관련 질문은 QA 로 이전됩니다. QA 그누보드4 바로가기
기존 게시물은 열람만 가능합니다.

방문자 카운터에 관해서 질문좀 드릴께요 정보

방문자 카운터에 관해서 질문좀 드릴께요

본문

아원님 사이트에서 본 소스인데...
이 소스는 말 그대로 순수하게 방문자를 카운터한건데요.
여기서 어떻게 수정해야 중복방문자도 카운트되게 할수있을까요?
이왕이면 방문자가 좀 많게 보이고 싶어서 -.-;;;

<?
// 방문자
$sql = " select vs_count from $g4[visit_sum_table] where vs_date = '$g4[time_ymd]' ";
$visit = sql_fetch($sql);

// 전체 방문자
$sql = " select sum(vs_count) as count from $g4[visit_sum_table] ";
$visitsum = sql_fetch($sql);
?>

// 오늘 방문자
<?=number_format($visit['vs_count']);?>

// 전체 방문자
<?=number_format($visitsum['count']);?>
  • 복사

댓글 전체

중복 도 체크하실려면 update 부분을 고치셔야되요
그냥 임시로 간단하게 <?=number_format($visit['vs_count'] + 1000);?>
이런식으로 처리 해두었다가 일정하게 올라스면 뒤에 숫자만 지워주시면될듯하내요
그누 루트에 tail.sub.php 파일열어보시면
재일 하단에
if ($tmp_row['cnt'])
{
이런식으로 체크하는부분이있을거에요 그부분 다지우시고 아래 else 부분만 이용하시면될꺼에요

$tmp_sql = " insert into $g4[login_table] ( lo_ip, mb_id, lo_datetime, lo_location, lo_url ) values ( '$_SERVER[REMOTE_ADDR]', '$member[mb_id]', '$g4[time_ymdhis]', '$lo_location',  '$lo_url' ) ";
sql_query($tmp_sql, FALSE);

// 시간이 지난 접속은 삭제한다
sql_query(" delete from $g4[login_table] where lo_datetime < '".date("Y-m-d H:i:s", $g4[server_time] - (60 * $config[cf_login_minutes]))."' ");

// 부담(overhead)이 있다면 테이블 최적화
//$row = sql_fetch(" SHOW TABLE STATUS FROM `$mysql_db` LIKE '$g4[login_table]' ");
//if ($row['Data_free'] > 0) sql_query(" OPTIMIZE TABLE $g4[login_table] ");
말씀하신 부분을 삭제하고 업로드해봤는데...
새로고침 해도 카운터가 증가하지 않네요...

저 그럼말이죠...
처음에 말씀하신 임기응변식요...

<?=number_format($visit['vs_count'] + 1000);?> 이렇게 하면 너무 티나자나요

실제카운터가 1~10까지는 곱하기 1
11~100까지는 곱하기 2
101~500까지는 곱하기3
501 이상은 곱하기4

이걸 어떻게 표현해야 할까요?

정말 죄송합니다.
좀 갈켜주세요 -.-;;;
아 죄송합니다. 로그인 체크 하는부분하고 햇갈렸내요..
bbs/visit_insert.inc.php 열어보시면

if (get_cookie('ck_visit_ip') != $_SERVER['REMOTE_ADDR']) {
    set_cookie('ck_visit_ip', $_SERVER['REMOTE_ADDR'], 86400); // 하루동안 저장
아 죄송합니다. 로그인 체크 하는부분하고 햇갈렸내요..
bbs/visit_insert.inc.php 열어보시면 아래 저런 부분이있는대요
if문 체크하는 부분 지워주시면됩니다.

if (get_cookie('ck_visit_ip') != $_SERVER['REMOTE_ADDR']) {
    set_cookie('ck_visit_ip', $_SERVER['REMOTE_ADDR'], 86400); // 하루동안 저장

    내용
}
}
답변 감사합니다.
근데 삭제를 해봤더니 오류가 나네요.
정말 죄송한데요.

아래 구문중에 어떻게 수정해야 하는지 알려주시면 은혜 잊지 않겠습니다.

// 컴퓨터의 아이피와 쿠키에 저장된 아이피가 다르다면 테이블에 반영함
if (get_cookie('ck_visit_ip') != $_SERVER['REMOTE_ADDR']) {
    set_cookie('ck_visit_ip', $_SERVER['REMOTE_ADDR'], 86400); // 하루동안 저장

    $tmp_row = sql_fetch(" select max(vi_id) as max_vi_id from $g4[visit_table] ");
    $vi_id = $tmp_row[max_vi_id] + 1;

    $sql = " insert $g4[visit_table] ( vi_id, vi_ip, vi_date, vi_time, vi_referer, vi_agent ) values ( '$vi_id', '$_SERVER[REMOTE_ADDR]', '$g4[time_ymd]', '$g4[time_his]', '$_SERVER[HTTP_REFERER]', '$_SERVER[HTTP_USER_AGENT]' ) ";
    $result = sql_query($sql, FALSE);
    // 정상으로 INSERT 되었다면 방문자 합계에 반영
    if ($result) {
        $sql = " insert $g4[visit_sum_table] ( vs_count, vs_date) values ( 1, '$g4[time_ymd]' ) ";
        $result = sql_query($sql, FALSE);
       
        // DUPLICATE 오류가 발생한다면 이미 날짜별 행이 생성되었으므로 UPDATE 실행
        if (!$result) {
            $sql = " update $g4[visit_sum_table] set vs_count = vs_count + 1 where vs_date = '$g4[time_ymd]' ";
            $result = sql_query($sql);
        }

        // INSERT, UPDATE 된건이 있다면 기본환경설정 테이블에 저장
        // 방문객 접속시마다 따로 쿼리를 하지 않기 위함 (엄청난 쿼리를 줄임 ^^)

        // 오늘
        $sql = " select vs_count as cnt from $g4[visit_sum_table] where vs_date = '$g4[time_ymd]' ";
        $row = sql_fetch($sql);
        $vi_today = $row[cnt];

        // 어제
        $sql = " select vs_count as cnt from $g4[visit_sum_table] where vs_date = DATE_SUB('$g4[time_ymd]', INTERVAL 1 DAY) ";
        $row = sql_fetch($sql);
        $vi_yesterday = $row[cnt];

        // 최대
        $sql = " select max(vs_count) as cnt from $g4[visit_sum_table] ";
        $row = sql_fetch($sql);
        $vi_max = $row[cnt];

        // 전체
        //$sql = " select count(*) as cnt from $g4[visit_table] ";
        $sql = " select sum(vs_count) as total from $g4[visit_sum_table] ";
        $row = sql_fetch($sql);
        $vi_sum = $row[total];

        $visit = "오늘:$vi_today,어제:$vi_yesterday,최대:$vi_max,전체:$vi_sum";

        // 기본설정 테이블에 방문자수를 기록한 후
        // 방문자수 테이블을 읽지 않고 출력한다.
        // 쿼리의 수를 상당부분 줄임
        sql_query(" update $g4[config_table] set cf_visit = '$visit' ");
    }
}
?>
이것만 넣으시면 오류가 안나실껀대

    $tmp_row = sql_fetch(" select max(vi_id) as max_vi_id from $g4[visit_table] ");
    $vi_id = $tmp_row[max_vi_id] + 1;

    $sql = " insert $g4[visit_table] ( vi_id, vi_ip, vi_date, vi_time, vi_referer, vi_agent ) values ( '$vi_id', '$_SERVER[REMOTE_ADDR]', '$g4[time_ymd]', '$g4[time_his]', '$_SERVER[HTTP_REFERER]', '$_SERVER[HTTP_USER_AGENT]' ) ";
    $result = sql_query($sql, FALSE);
    // 정상으로 INSERT 되었다면 방문자 합계에 반영
    if ($result) {
        $sql = " insert $g4[visit_sum_table] ( vs_count, vs_date) values ( 1, '$g4[time_ymd]' ) ";
        $result = sql_query($sql, FALSE);
       
        // DUPLICATE 오류가 발생한다면 이미 날짜별 행이 생성되었으므로 UPDATE 실행
        if (!$result) {
            $sql = " update $g4[visit_sum_table] set vs_count = vs_count + 1 where vs_date = '$g4[time_ymd]' ";
            $result = sql_query($sql);
        }

        // INSERT, UPDATE 된건이 있다면 기본환경설정 테이블에 저장
        // 방문객 접속시마다 따로 쿼리를 하지 않기 위함 (엄청난 쿼리를 줄임 ^^)

        // 오늘
        $sql = " select vs_count as cnt from $g4[visit_sum_table] where vs_date = '$g4[time_ymd]' ";
        $row = sql_fetch($sql);
        $vi_today = $row[cnt];

        // 어제
        $sql = " select vs_count as cnt from $g4[visit_sum_table] where vs_date = DATE_SUB('$g4[time_ymd]', INTERVAL 1 DAY) ";
        $row = sql_fetch($sql);
        $vi_yesterday = $row[cnt];

        // 최대
        $sql = " select max(vs_count) as cnt from $g4[visit_sum_table] ";
        $row = sql_fetch($sql);
        $vi_max = $row[cnt];

        // 전체
        //$sql = " select count(*) as cnt from $g4[visit_table] ";
        $sql = " select sum(vs_count) as total from $g4[visit_sum_table] ";
        $row = sql_fetch($sql);
        $vi_sum = $row[total];

        $visit = "오늘:$vi_today,어제:$vi_yesterday,최대:$vi_max,전체:$vi_sum";

        // 기본설정 테이블에 방문자수를 기록한 후
        // 방문자수 테이블을 읽지 않고 출력한다.
        // 쿼리의 수를 상당부분 줄임
        sql_query(" update $g4[config_table] set cf_visit = '$visit' ");
말씀해주신대로 했더니 에러는 안나는데요...
근데 카운터 변경이 똑같은데요?

원래 새로고침 한번 할때마다...혹은 브라우져를 새로 열때마다 카운터가 늘어나야 하는거 아닌가요?
안녕하세요.. 제가 아는대로 설명해드릴께요 .

일단 오류 나는부분은 g4_visit 테이블 인덱스가(index1) vi_ip하고 vi_date가 UNIQUE설정이 되어있습니다.
간단히 중복 카운터를 올리고 싶으시면 이렇게 하세요.

1. g4_visit테이블에서 index1인덱스 설정을 UNIQUE에서 index형태로 바꿔주세요.
2. /bbs/visit_insert.inc.php 파일 여신후에
5번줄은 주석처리 하시구염(  if (get_cookie('ck_visit_ip') != $_SERVER['REMOTE_ADDR'])  )
이부분을 if(true) 무조건 참으로 만드세요.

  - 끝 -

이렇게 하시면 중복카운팅이 됩니다. 그럼수겅하세요. ^^
참 재밌다..
알려주신분은 성심을 다해 알려주고..
우리같은 초자는 차려준 밥도 못먹고...
ㅎㅎㅎ
난 여기서 도움 많이 받았는데..
제일 이해가 안갔던건...
머리빼고 꼬리빼고 몸통만 설명을 해줘서 정말 힘들었슴다
그래서 요즘 질문할땐..
 구체적으로 어느폴더 어느파일 그리고 어느부분까지 알려줘야 수정할수가 있어요
© SIRSOFT
현재 페이지 제일 처음으로