테스트 사이트 - 개발 중인 베타 버전입니다

접속할때마다 방문자수 랜덤 증가 적용했습니다.. 에러메세지 해결방법좀 부탁드립니다 채택완료

하늘이아빠 11년 전 조회 8,039

</p>
<p><?php
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가 </p>
<p>$result = rand(1,5); // 1~5 사이에 랜덤 으로 돌림. </p>
<p>// 컴퓨터의 아이피와 쿠키에 저장된 아이피가 다르다면 테이블에 반영함
if (get_cookie('ck_visit_ip') != $_SERVER['REMOTE_ADDR']) 
{
    set_cookie('ck_visit_ip', $_SERVER['REMOTE_ADDR'], 86400); // 하루동안 저장</p>
<p>    $tmp_row = sql_fetch(" select max(vi_id) as max_vi_id from {$g5['visit_table']} ");
    $vi_id = $tmp_row['max_vi_id'] + $result;</p>
<p>    // $_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}' ) ";</p>
<p>    $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);
        }</p>
<p>        // INSERT, UPDATE 된건이 있다면 기본환경설정 테이블에 저장
        // 방문객 접속시마다 따로 쿼리를 하지 않기 위함 (엄청난 쿼리를 줄임 ^^)</p>
<p>        // 오늘
        $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'];</p>
<p>        // 어제
        $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'];</p>
<p>        // 최대
        $sql = " select max(vs_count) as cnt from {$g5['visit_sum_table']} ";
        $row = sql_fetch($sql);
        $vi_max = $row['cnt'];</p>
<p>        // 전체
        $sql = " select sum(vs_count) as total from {$g5['visit_sum_table']} "; 
        $row = sql_fetch($sql);
        $vi_sum = $row['total'];</p>
<p>        $visit = '오늘:'.$vi_today.',어제:'.$vi_yesterday.',최대:'.$vi_max.',전체:'.$vi_sum;</p>
<p>        // 기본설정 테이블에 방문자수를 기록한 후 
        // 방문자수 테이블을 읽지 않고 출력한다.
        // 쿼리의 수를 상당부분 줄임</p>
<p>
        sql_query(" update {$g5['config_table']} set cf_visit = '{$visit}' ");
    } 
}  </p>
<p>// #####################  추가내용 ######################## 
// 메인페이지 접속시마다 무조건 방문자수 증가 
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); </p>
<p>        // 오늘 
        $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]; </p>
<p>        // 어제 
        $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]; </p>
<p>        // 최대 
        $sql = " select max(vs_count) as cnt from {$g5['visit_sum_table']} "; 
        $row = sql_fetch($sql); 
        $vi_max = $row[cnt]; </p>
<p>        // 전체 
        $sql = " select sum(vs_count) as total from {$g5['visit_sum_table']} "; 
        $row = sql_fetch($sql); 
        $vi_sum = $row[total]; </p>
<p>        $visit = "오늘:$vi_today,어제:$vi_yesterday,최대:$vi_max,전체:$vi_sum"; </p>
<p>        sql_query(" update {$g5['config_table']} set cf_visit = '{$visit}' ");
    } 
}  </p>
<p>?></p>
<p>


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개

채택된 답변
+20 포인트
11년 전


23
 $nn = rand(1,5); // 1~5 사이에 랜덤 으로 돌림.<-------수정

// DUPLICATE 오류가 발생한다면 이미 날짜별 행이 생성되었으므로 UPDATE 실행
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 를 다른 이름으로 변경하세요
로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

하늘이아빠
11년 전
답변 감사합니다 덕분에 해결했네요

댓글을 작성하려면 로그인이 필요합니다.

7년 전

많은 도움이 되었습니다. 감사합니다.

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

쿠키를 하루동안  저장 하는 시간을 줄여놓으면 괜찮을까요?

 

자주  카운터가 올라가게요... 

 

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

답변 감사 드립니다.  적용 해보고 있는데...

 

아직  변화는 없네요...

 

시간이 지나서  적용이 되나봐요...

 

jangdooree.com  입니다.

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

11년 전

result 를 전부 바꾸라는 말이 아니고

<--- 수정 이라고 되어있는 부분의 result를 바꾸라는 말입니다

예를들어 $result = rand(1,5) <----여기의 $result를 $nn으로 

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

소스에 나오는  result 를  모두 다른 이름으로 바꾸면 되나요?

 

전 전부 0으로 나오는데요..

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인