접속할때마다 방문자수 랜덤 증가 적용했습니다.. 에러메세지 해결방법좀 부탁드립니다
본문
<?php
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
$result = rand(1,5); // 1~5 사이에 랜덤 으로 돌림.
// 컴퓨터의 아이피와 쿠키에 저장된 아이피가 다르다면 테이블에 반영함
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 {$g5['visit_table']} ");
$vi_id = $tmp_row['max_vi_id'] + $result;
// $_SERVER 배열변수 값의 변조를 이용한 SQL Injection 공격을 막는 코드입니다. 110810
$remote_addr = escape_trim($_SERVER['REMOTE_ADDR']);
$referer = "";
if (isset($_SERVER['HTTP_REFERER']))
$referer = escape_trim($_SERVER['HTTP_REFERER']);
$user_agent = escape_trim($_SERVER['HTTP_USER_AGENT']);
$sql = " insert {$g5['visit_table']} ( vi_id, vi_ip, vi_date, vi_time, vi_referer, vi_agent ) values ( '{$vi_id}', '{$remote_addr}', '".G5_TIME_YMD."', '".G5_TIME_HIS."', '{$referer}', '{$user_agent}' ) ";
$result = sql_query($sql, FALSE);
// 정상으로 INSERT 되었다면 방문자 합계에 반영
if ($result) {
$sql = " insert {$g5['visit_sum_table']} ( vs_count, vs_date) values ( 1, '".G5_TIME_YMD."' ) ";
$result = sql_query($sql, FALSE);
// DUPLICATE 오류가 발생한다면 이미 날짜별 행이 생성되었으므로 UPDATE 실행
if (!$result) {
$sql = " update {$g5['visit_sum_table']} set vs_count = vs_count + $result where vs_date = '".G5_TIME_YMD."' ";
$result = sql_query($sql);
}
// INSERT, UPDATE 된건이 있다면 기본환경설정 테이블에 저장
// 방문객 접속시마다 따로 쿼리를 하지 않기 위함 (엄청난 쿼리를 줄임 ^^)
// 오늘
$sql = " select vs_count as cnt from {$g5['visit_sum_table']} where vs_date = '".G5_TIME_YMD."' ";
$row = sql_fetch($sql);
$vi_today = $row['cnt'];
// 어제
$sql = " select vs_count as cnt from {$g5['visit_sum_table']} where vs_date = DATE_SUB('".G5_TIME_YMD."', INTERVAL 1 DAY) ";
$row = sql_fetch($sql);
$vi_yesterday = $row['cnt'];
// 최대
$sql = " select max(vs_count) as cnt from {$g5['visit_sum_table']} ";
$row = sql_fetch($sql);
$vi_max = $row['cnt'];
// 전체
$sql = " select sum(vs_count) as total from {$g5['visit_sum_table']} ";
$row = sql_fetch($sql);
$vi_sum = $row['total'];
$visit = '오늘:'.$vi_today.',어제:'.$vi_yesterday.',최대:'.$vi_max.',전체:'.$vi_sum;
// 기본설정 테이블에 방문자수를 기록한 후
// 방문자수 테이블을 읽지 않고 출력한다.
// 쿼리의 수를 상당부분 줄임
sql_query(" update {$g5['config_table']} set cf_visit = '{$visit}' ");
}
}
// ##################### 추가내용 ########################
// 메인페이지 접속시마다 무조건 방문자수 증가
else {
$m_url = $PHP_SELF;
if($m_url=="/index.php"){
$sql = " update {$g5['visit_sum_table']} set vs_count = vs_count + $result where vs_date = '".G5_TIME_YMD."' ";
$result = sql_query($sql);
// 오늘
$sql = " select vs_count as cnt from {$g5['visit_sum_table']} where vs_date = '".G5_TIME_YMD."' ";
$row = sql_fetch($sql);
$vi_today = $row[cnt];
// 어제
$sql = " select vs_count as cnt from {$g5['visit_sum_table']} where vs_date = DATE_SUB('".G5_TIME_YMD."', INTERVAL 1 DAY) ";
$row = sql_fetch($sql);
$vi_yesterday = $row[cnt];
// 최대
$sql = " select max(vs_count) as cnt from {$g5['visit_sum_table']} ";
$row = sql_fetch($sql);
$vi_max = $row[cnt];
// 전체
$sql = " select sum(vs_count) as total from {$g5['visit_sum_table']} ";
$row = sql_fetch($sql);
$vi_sum = $row[total];
$visit = "오늘:$vi_today,어제:$vi_yesterday,최대:$vi_max,전체:$vi_sum";
sql_query(" update {$g5['config_table']} set cf_visit = '{$visit}' ");
}
}
?>
G4 팁자료실에 있는것을 G5에 적용해봤습니다
랜덤으로 방문자수가 1~5 만큼 접속할때마다 증가하긴하는데요
다른 컴퓨터에서 최초 접속시 아래 오류 맨트가 뜨네요
update g5_visit_sum set vs_count = vs_count + where vs_date = '2014-02-04'
1064 : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'where vs_date = '2014-02-04'' at line 1
error file : /index.php
컴퓨터 여러대서 테스트 해보면 처음에만 저 맨트 나오고 계속 제대로 되긴 합니다
고수님들 부탁드립니다
!-->답변 6
23 |
|
24 |
if (! $result ) { |
25 |
$sql = " update {$g5['visit_sum_table']} set vs_count = vs_count + $nn where vs_date = '" .G5_TIME_YMD. "' " ; <--------- 수정 |
if ( $m_url == "/index.php" ){ |
59 |
$sql = " update {$g5['visit_sum_table']} set vs_count = vs_count + $nn where vs_date = '" .G5_TIME_YMD. "' " ; <--------수정 |
$result 를 다른 이름으로 변경하세요
소스에 나오는 result 를 모두 다른 이름으로 바꾸면 되나요?
전 전부 0으로 나오는데요..
result 를 전부 바꾸라는 말이 아니고
<--- 수정 이라고 되어있는 부분의 result를 바꾸라는 말입니다
예를들어 $result = rand(1,5) <----여기의 $result를 $nn으로
답변 감사 드립니다. 적용 해보고 있는데...
아직 변화는 없네요...
시간이 지나서 적용이 되나봐요...
jangdooree.com 입니다.
쿠키를 하루동안 저장 하는 시간을 줄여놓으면 괜찮을까요?
자주 카운터가 올라가게요...
많은 도움이 되었습니다. 감사합니다.
답변을 작성하시기 전에 로그인 해주세요.