[블로그-버그수정]각 게시판별 카운터를 달아 봅시다. > 그누3 팁자료실

그누3 팁자료실

[블로그-버그수정]각 게시판별 카운터를 달아 봅시다. 정보

블로그 [블로그-버그수정]각 게시판별 카운터를 달아 봅시다.

첨부파일

counter.php (4.2K) 93회 다운로드 2004-05-04 13:20:18
table_add.php (385byte) 93회 다운로드 2004-05-03 10:34:45

본문

k-20.jpg


이제 각 게시판 별로 카운터를 달아 봅시다.....
테이블을 gb_blog와 같이 사용할까 하다가 그냥 분리하는 것이 좋을 듯해서 따로 테이블을 생성
하였습니다. gb_bcounter라는 테이블이 생성이 되는 것입니다.

1. 먼저는 새로운 디비를 생성해야겠습니다...
이번에는 자동 생성이 되게 했습니다.
http://www.아무개.com/?doc=table_add.php라고 하시면 됩니다.
파일을 첨부합니다.

2. 카운터를 출력하는 문제이죠.......
카운터 출력하는 소스는 첨부합니다.....파일명은 counter.php 이 파일을
side.php파일이 있는 곳에 같이 위치하시길 바랍니다...

3. side.php파일을 수정합니다.......
수정된 일부를 보여드립니다... 검색폼의 옵션의 부분이 궂이 필요 없을 듯해서 그리고 그누 소스를 수정해야 하는 큰 부담이 있기 때문에 전 그 팁을 사용하지 않습니다......

<!-- 검색폼 부분 -->
<TABLE cellSpacing=1 cellPadding=0 align=center border=0 width=100% bgColor=#cccccc>
<tr><td align=center height=22 bgColor=white>검 색</td></tr>
<TBODY>
<TR>
<form name=fsearch method=get action='<?="./"?>'>
<input type=hidden name=doc value='<?=$doc?>'>
<input type=hidden name=bo_table value='<?=$bo_table?>'>
<td width=50% align=center valign=bottom bgColor=#e0e0e0>
<select name=sselect class=select style='width:60%'>
<!--<option value='wr_all'>제목+내용+옵션</option> -->
<option value='wr_subject|wr_content'>제목+내용</option>
<option value='wr_name'>이름</option>
<option value='wr_num'>번호</option>
<option value='wr_datetime'>날짜</option>
<option value='wr_subject'>제목</option>
<option value='wr_content'>내용</option>
<option value='wr_hit'>읽음</option>
<? if ($is_good) { ?><option value='wr_good'>추천</option><? } ?>
<? if ($is_nogood) { ?><option value='wr_nogood'>비추천</option><? } ?>
</select>
<select name=soperator class=select style='width:30%'>
<option value='0'>OR</option>
<option value='1'>AND</option>
</select><br>
<input type=text name=stext size=10 required itemname='검색어' value='<?=$stext?>' style='width:60%'>
<input type=submit value='검색' class=button>
</td>
</form>
</TR>
</TBODY>
</TABLE>
<? if ($stext) { ?>
<script language='JavaScript'>
if ('<?=$sselect?>' == 'ca_id') {
document.fcategory.ca_id.value = '<?=$stext?>';
document.fsearch.stext.value = '';
} else {
document.fsearch.sselect.value = '<?=$sselect?>';
document.fsearch.soperator.value = '<?=(int)$soperator?>';
}
</script>
<? } ?>
<!-- / 검색폼 부분 -->
<br><br>
<? include "$board_skin/latest.php";?><br>
<!--<a href=<?="./?doc=$board_skin/latest_list.php"?>>more...</a>--><br>
<? include "$board_skin/comment.php";?><br>
<!--<a href=<?="./?doc=$board_skin/comment_list.php"?>>more...</a>--><br>
<? include "$board_skin/guest.php"?>
<br>
<? include "$board_skin/counter.php"?>
<br>
<a href='./?doc=bbs/gbtorss20.php&bo_table=<?=$bo_table?>'><img src=<?="$board_skin/img/xml.gif"?> border=0></a>
<br>
</td></tr></table>
추천
0
  • 복사

댓글 전체

갑성님, 정말 유용한 팁 감사합니다.
기왕이면 첨부된 counter.php 파일을 수정된 파일로 대체해 주시면 더 좋겠네요.
댓글로 완벽한 counter.php 소스를 완성해주셨습니다만,
저처럼 첨부파일을 이용하다가 한참 삽질하는 사람이 또 나올까 싶어서요.
첨부 counter.php 에서
$today_res = mysql_query($total_sql);  이부분에서 해맸습니다.
$total_sql 이 아니라 $today_sql
root님이 좋은 제안하셨어요...
다음 배포시에 아래와 같이 변경된 소스로 올리겠습니다...

root님 감사합니다...^^
<?
if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가

$counter = "gb_bcounter";

$sql = "select count(*) from $counter where time = '$today' and bo_table = '$bo_table' and ip = '$_SERVER[REMOTE_ADDR]' ";

$res = mysql_query($sql);
$row = mysql_fetch_row($res);

// 아이피 중복 확인..
if(!$row[0]) {
    $sql = "insert $counter
            set bo_table = '$bo_table',
                ip = '$_SERVER[REMOTE_ADDR]',
                time = '$today'";
    mysql_query($sql);
}

$total_sql = "select count(*) from $counter where bo_table = '$bo_table'";
$total_res = mysql_query($total_sql);
$total_row = mysql_fetch_row($total_res);

$today_sql = "select count(*) from $counter where time ='$today' and bo_table = '$bo_table'";
$today_res = mysql_query($today_sql);
$today_row = mysql_fetch_row($today_res);

$yesterday = date("Y-m-d", strtotime($now) - 86400);
$yesterday_sql = "select count(*) from $counter where time ='$yesterday' and bo_table = '$bo_table'";
$yesterday_res = mysql_query($yesterday_sql);
$yesterday_row = mysql_fetch_row($yesterday_res);

// 카운터 표시 부분 .. 원하시는 대로 수정하세요..
echo "<!-- / 카운터 -->
    <table width=100% cellpadding=0 cellspacing=0>
        <tr>
            <td width=4 height=28 background='$board_skin/img/l_top.gif'></td>
            <td align=left background='$board_skin/img/c_top.gif'><b>&nbsp;::&nbsp;{$bo_table}의 카운터</b></td>
            <td width=4 height=28 background='$board_skin/img/r_top.gif'></td>
        </tr>
        <tr>
            <td colspan=3>
            <table width=100% cellpadding=0 cellspacing=5>
                <tr>
                    <td width=40%><img src='$board_skin/img/icon.gif' width='7' height='7' border='0'>&nbsp;&nbsp;전체 :</td>
                    <td align=right>$total_row[0]&nbsp;&nbsp;&nbsp;&nbsp;</td>
                </tr>
                <tr><td colspan=2 height=1 background='$board_skin/img/line_width.gif'></td></tr>
                <tr>
                    <td width=40%><img src='$board_skin/img/icon.gif' width='7' height='7' border='0'>&nbsp;&nbsp;오늘 :</td>
                    <td align=right>$today_row[0]&nbsp;&nbsp;&nbsp;&nbsp;</td>
                </tr>
                <tr><td colspan=2 height=1 background='$board_skin/img/line_width.gif'></td></tr>
                <tr>
                    <td width=40%><img src='$board_skin/img/icon.gif' width='7' height='7' border='0'>&nbsp;&nbsp;어제 : </td>
                    <td align=right>$yesterday_row[0]&nbsp;&nbsp;&nbsp;&nbsp;</td>
                </tr>
                <tr><td colspan=2 height=1 background='$board_skin/img/line_width.gif'></td></tr>
            </table>
            </td>
        </tr>
    </table>";

?>
앗 훌륭하신 root님이시네요....^^
반갑습니다..........그리고 감사합니다....^^

$_SERVER[REMOTE_ADDR] <=== 요넘은 그누보드의 것을 것을 가져 왔습니다.
음....그리고 하루에 한번이라는 의미는 $today의 결정으로 이루어집니다. 그래서  2004-05-04 00:00:00이런 데이터가 입력이되죠 하루의 의미가 2004-05-04가 2004-05-05의 차이로 숫자적으로 인식이 되죠...아이피야 숫자를 줄여받든 늘려받든 어째튼 그 형식에서 받기 때문에 그렇게 큰 의미가 없을 듯합니다마는...

잘몰라서 그러는데 아래의 것의 차이가 뭘까요?
$_SERVER[REMOTE_ADDR]                $_SERVER[REMOTE_ADDR]
카운터가 하루에 한번만 올라가는데...
첫 select문이 다음 처럼 수정되어야 하는것이 아닌지????
// $sql = "select count(*) from $counter where time = '$today' and bo_table = '$bo_table' order by ip = '$_SERVER[REMOTE_ADDR]' ";
$sql = "select count(*) from $counter where time = '$today' and bo_table = '$bo_table' and ip = '$_SERVER[REMOTE_ADDR]' ";
카운터에 버그가 있었습니다...
25  $today_sql = "select count(*) from $counter where time ='$today' and bo_table = '$bo_table'";
26  $today_res = mysql_query($today_sql); <----여기가 $today_res = mysql_query($total_sql);로 되어져 있습니다. 여기를 $today_res = mysql_query($today_sql); 로 고쳐 주세요.... 처음 접속시 전체숫자와 같이 나타나는 현상이 있었습니다.... 여기를 고치면 괜찮습니다....^^
27  $today_row = mysql_fetch_row($today_res);
phpadmin 프로그램을 설치하시는 것이 좋겠습니다. 전문가가 아닐 경우 db를 텔넷에서 한다는 것은 어려움이 너무 많거든요. 관리프로그램을 사용하시면 쉽게 하실 수 있는 일입니다.
역시나 테이블에 문제가 있는듯 하군요...
왜 새성이 되질 않는 걸까요.... 위 방법대로 했는데...
다른 방법이 있는지요... 부탁합니다...꾸벅^-^
Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in /home/sayes/board/bbs/skin/board/blog/counter.php on line 9

Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in /home/sayes/board/bbs/skin/board/blog/counter.php on line 20

Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in /home/sayes/board/bbs/skin/board/blog/counter.php on line 24

Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in /home/sayes/board/bbs/skin/board/blog/counter.php on line 29

위 에러가 발생하는데 원인이 멀까요...??
몇시간째 고심 중입니다. 도와주세요...
초보라 머리 쥐납니다....ㅎㅎㅎ
time이라는 필드에 2004-05-04 00:00:00이런 형식으로 입력이 됩니다....

24간이내에 ip의 중복이 없을 경우에만 올라갑니다. 어제의 내용이 출력이 안된 버그를 수정하여서

2004-05-03 00:00:00이면 어제가 되겠죠.... 그래서 어제의 표시가 되게 하였습니다...

즐거운 시간들 되세요...

관리자님께 감사드립니다... 관리자님의 소스로 버그수정.....ㅋㅋ
옙!!!
버그가 있었습니다....
그래서 수정하였습니다. 최대 오늘 어제
모두 정상적인 작동이 됩니다.... 수정 파일을 올렸습니다....

감사합니다....*^^*
24시간제로 기록이 되는 건가요?  그렇담 24시간후에 접속해봐야하고요.
방문객의 경우 기록이 잘 되는데 카운터는 영 말을 잘 안듣는 것 같아요?
접속을 해도 항상 0 입니다.
http://www.sk8404.org/gnu3/?doc=bbs/gnuboard.php&bo_table=madem
1은 다른 보드명이 적혀있어서 블로그 게시판이름으로 고쳐서 나온거고요.
다른 사이트에서도 어떤 것은 기록이 되는데 어떤 것은 기록이 안됩니다.
좋은정도가 아닌데요
블로그 에서 가장 중요한 일부분을 만들었는데...

다른부분은 이것저것 찾아서 짜집기를 하면 되는데
게시판별 카운터/방문자표시 같은경우 디비를 만드는부분은
저같은 초보로썬 짜집기의 한계에 부딪힙니다.
당연히 가장 중요하다고 생각됩니다.^^

제 개인적으론
스킨-블로그 게시판 처럼 많은 코멘트가 올라왔슴합니다.
호박둥구리님///
좋다고 해주시니 더욱 힘이 나눈군요.....
다운만 받는 분들보다는 훨씬 ........ㅋ
친구등록의 개념도 구조만 잘 구성하면 그다지 어렵지는 않을 듯 합니다마는...
제 실력이 될지....

암튼 감사합니다....^^
박갑성님 이것도 한번 생각해주세요(너무 염치없나요^^)

친구등록 개념으로 생각해야 되나요?
아이디를 추가시킬수있는것도 좋을것같습니다.
내가 등록한 블로그 랑
상대방이 나를 등록한 상태를 나타낼수있는것으로....
일종의 게시판 즐겨찾기라고 하면 비슷할려나.....


좋은소스 정말 감사합니다.
madem//님 제가 테이블만 잘 못 올린 준 알았는데 아래의 소스로 바꿔 주세요...
그리고 현재 오후 3:15인데 데이터를 다시 올렸습니다.

$sql = "insert into $counter (bo_table,ip,time) values ('$bo_table','$REMOTE_ADDR',NOW())";
이렇게 되어야 할 것 같군요...
호박둥구리//님 좋으시다니 저도 좋습니다...
그런데 특별한 에러 출력이 안되는 상황에서 추측한다는 것은 ......허접스러워서
꼭 집어 말씀을 못드리겠군요.....
이어지는 팁이네요 정말 좋습니다.
박갑성님 덕분에 조금더 마무리가 다가와 지네요^^
근데 다른분들은 잘되는가 보죠?
저는 계속
  전체 : 0
  오늘 : 0     
  어제 : 0
이렇게 뜹니다. 뭐가 잘못된거죠?
디비생성하고 똑같이 스킨소스에 인쿠르드시켰는데....
ㅎㅎ.....ㅜ,ㅠ;;
이런 제가 잘못올렸습니다...... 통합을 해보려다가 포기한 소스가 올라갔군요...
죄송합니다....04-05-03 10:37전에 받으신 분들은 다시 받아 주세요....
그리고 카운터 소스는 수정하지 않아도 됩니다.....^^
카운터 소스에서 인서트 부분 이 잘못되었습니다.
$sql = "insert into $counter (bo_table,mb_id,mb_name,ip,time) values ('$bo_table','$member[mb_id]','$member[mb_name]','$REMOTE_ADDR',NOW())";
© SIRSOFT
현재 페이지 제일 처음으로