활용편 - 케빈제작소스 01 정보
펌 활용편 - 케빈제작소스 01본문
<?
// 그누보드 자체 라이브러리 파일을 불러 온다.
include "lib.php";
// mb_contest 함수 시작 - 임의로 만들어 쓴다.
function mb_contest($bn){
global $cfg; // 전역변수를 선언하여 준다.
// config.php 안에는 게시판의 공통 머리단어가 있습니다. 기본은 gb_write 지요.
그럼 새로 게시판을 생성했을때 이름을 freeboard라고 준다면 데이타베이스 안에는 gb_write_freeboard 라는 테이블이 생성됩니다.
그러므로 게시판 테이블을 불러올때도 만들때와 마찬가지로 앞에 머리단어를 붙여서 써줘야 되는 겁니다.
$table=$cfg[write_table_prefix].$bn;
// distinct는 mb_id가 중복되어 여러번 등장할경우 한번만 인식하게 해줍니다.
// 이 프로그램의 목적이 한명의 회원이 등록한 글수의 모든 조회, 댓글,추천, 비추천의 합을 구하는것이기 때문에 여러번 글쓴 사람의 경우
// 를 고려하여 한번만 인식되게 합니다.
// wr_commnet='0' 는 원본글만 뽑아 오도록 하는 검색 조건입니다.
// 그누보드는 쪽글민 댓글이 모두 하나의 테이블안에서 만들어 지므로 wr_commnet='0' 로 원본글인지 쪽글인지 구분합니다.
// 그리고 order by mb_id 는 회원아이디로 정렬하도록 합니다.
$query=mysql_query("select distinct mb_id from $table where wr_comment = '0' order by mb_id");
// html테이블을 만듭니다. 여기선 반복되어지지 않을 부분들을 미리 라이팅 해놓습니다.
echo "<table width=800 border=0 cellspacing=0 cellpadding=0>";
echo "<tr><td colspan=2 height=50> 안내 입니다. 회원님께서 작성하신 모든글의 조회수, 쪽글수<br> 추천수, 비추천수를 합산한 내역입니다</td></tr>";
// <tr>로 시작해서 <td>안에 내용이 채워지고 나면 </tr>닫힙니다. 이것이 글쓴 회원이 있을때까지 계속 반복해주조
// For문의 반복조건은 위 쿼리문의 결과값이 존재 하는한 계속 반복합니다. 결과값이 끝나면 반복도 끝나지요
for($j=0;$row=mysql_fetch_array($query);$j++){
echo "<tr>";
// 여기서는 위에서 뽑아온 아이디가 쓴글 전체중에서 원본글만을 뽑아 옵니다. 두가지 조건을 모두 만족하는 것만요.
$qry2=mysql_query("select * from $table where mb_id='$row[mb_id]' and wr_comment = '0'");
// 이부분은 For문안에서는 아래 네가지 변수들이 값이 누적되기 때문에 한 아이디의 모든 총합점수를 구하고 나면
// 다음 아이디로 넘어갈때 초기화 시켜주는 역할을 합니다.
$hit="";
$cnt="";
$good="";
$nogood="";
// 이부분이 회원이 작성한 모든글의 조회, 댓글, 추천, 비추천의 합을 구하는 부분입니다.
// 글을 하나 쓰면 한번 반복하고, 다섯개 썻으면 다섯번 반복하며 총합을 구합니다.
for($i=0;$row2=mysql_fetch_array($qry2);$i++){
$hit=$hit+$row2[wr_hit]; // 조회수 누적
$cnt=$cnt+$row2[wr_commentcnt]; // 쪽글수 누적
$good=$good+$row2[wr_good]; // 추천수 누적
$nogood=$nogood+$row2[wr_nogood]; // 비추수 누적
$name=$row2[wr_name]; // 글쓴이 이름(출력만을 위한 선언)
}
// 손님도 글쓰기가 가능할 경우 아이디는 등록되지 않습니다. 그러면 위에 아이디 기준으로 검색하는것에 걸리지 않아
공백으로 출력되므로 아이디가 공백일경우 손님으로 표시합니다.
if($row[mb_id]=="") $name="손님";
// 점수 총합을 냅니다.
$total_point=($hit+($cnt*2)+($good*2))-$nogood;
echo "<td width=120> $name $row[mb_id]</td>";
echo "<td> 조회 : $hit, 쪽글 : $cnt, 추천 : $good, 비추 : $nogood, 총합 : $total_point </td>";
echo "</tr>";
}
// 여기까지 For문의 반복이 이루어집니다. 여기서마무리 되는것은 가장 상위첫 검색에서 얻은 아이디 기준으로
// 검색된 아이디가 모두 끝나면 For문이 끝납니다.
// 테이블을 닫아 줍니다.
echo "</table>";
}
?>
<?
// 함수를 사용합니다.
// mb_contest("freeboard") 처럼 직접 지정하여도 좋고,
// 아래와 같이 다른 페이지에서 현재 페이지로 넘어올때 값을 가져와야 하는 방식중 택일하여 사용하면 됩니다.
if(!$p_table) alert("게시판을 지정하여 주십시요"); // 임의로 지정하거나 혹은 값을 넘겨받는 방식중 택일
echo mb_contest("$p_table");?>
소스를 한번 분석하여 보았씁니다.
별 어려운 점이 없을듯 한데도, 조금 막혔던 적이 있었습니다.
그러나 하룻밤 자고 나니까 머리속에 퍼뜩 떠오르더군요.
궁금한점 남겨주세요^^
[이 게시물은 홍석명님에 의해 2004-03-30 09:21:59 PHP Forum(으)로 부터 이동됨]
[이 게시물은 관리자님에 의해 2004-05-12 09:08:32 연재(으)로 부터 이동됨]
// 그누보드 자체 라이브러리 파일을 불러 온다.
include "lib.php";
// mb_contest 함수 시작 - 임의로 만들어 쓴다.
function mb_contest($bn){
global $cfg; // 전역변수를 선언하여 준다.
// config.php 안에는 게시판의 공통 머리단어가 있습니다. 기본은 gb_write 지요.
그럼 새로 게시판을 생성했을때 이름을 freeboard라고 준다면 데이타베이스 안에는 gb_write_freeboard 라는 테이블이 생성됩니다.
그러므로 게시판 테이블을 불러올때도 만들때와 마찬가지로 앞에 머리단어를 붙여서 써줘야 되는 겁니다.
$table=$cfg[write_table_prefix].$bn;
// distinct는 mb_id가 중복되어 여러번 등장할경우 한번만 인식하게 해줍니다.
// 이 프로그램의 목적이 한명의 회원이 등록한 글수의 모든 조회, 댓글,추천, 비추천의 합을 구하는것이기 때문에 여러번 글쓴 사람의 경우
// 를 고려하여 한번만 인식되게 합니다.
// wr_commnet='0' 는 원본글만 뽑아 오도록 하는 검색 조건입니다.
// 그누보드는 쪽글민 댓글이 모두 하나의 테이블안에서 만들어 지므로 wr_commnet='0' 로 원본글인지 쪽글인지 구분합니다.
// 그리고 order by mb_id 는 회원아이디로 정렬하도록 합니다.
$query=mysql_query("select distinct mb_id from $table where wr_comment = '0' order by mb_id");
// html테이블을 만듭니다. 여기선 반복되어지지 않을 부분들을 미리 라이팅 해놓습니다.
echo "<table width=800 border=0 cellspacing=0 cellpadding=0>";
echo "<tr><td colspan=2 height=50> 안내 입니다. 회원님께서 작성하신 모든글의 조회수, 쪽글수<br> 추천수, 비추천수를 합산한 내역입니다</td></tr>";
// <tr>로 시작해서 <td>안에 내용이 채워지고 나면 </tr>닫힙니다. 이것이 글쓴 회원이 있을때까지 계속 반복해주조
// For문의 반복조건은 위 쿼리문의 결과값이 존재 하는한 계속 반복합니다. 결과값이 끝나면 반복도 끝나지요
for($j=0;$row=mysql_fetch_array($query);$j++){
echo "<tr>";
// 여기서는 위에서 뽑아온 아이디가 쓴글 전체중에서 원본글만을 뽑아 옵니다. 두가지 조건을 모두 만족하는 것만요.
$qry2=mysql_query("select * from $table where mb_id='$row[mb_id]' and wr_comment = '0'");
// 이부분은 For문안에서는 아래 네가지 변수들이 값이 누적되기 때문에 한 아이디의 모든 총합점수를 구하고 나면
// 다음 아이디로 넘어갈때 초기화 시켜주는 역할을 합니다.
$hit="";
$cnt="";
$good="";
$nogood="";
// 이부분이 회원이 작성한 모든글의 조회, 댓글, 추천, 비추천의 합을 구하는 부분입니다.
// 글을 하나 쓰면 한번 반복하고, 다섯개 썻으면 다섯번 반복하며 총합을 구합니다.
for($i=0;$row2=mysql_fetch_array($qry2);$i++){
$hit=$hit+$row2[wr_hit]; // 조회수 누적
$cnt=$cnt+$row2[wr_commentcnt]; // 쪽글수 누적
$good=$good+$row2[wr_good]; // 추천수 누적
$nogood=$nogood+$row2[wr_nogood]; // 비추수 누적
$name=$row2[wr_name]; // 글쓴이 이름(출력만을 위한 선언)
}
// 손님도 글쓰기가 가능할 경우 아이디는 등록되지 않습니다. 그러면 위에 아이디 기준으로 검색하는것에 걸리지 않아
공백으로 출력되므로 아이디가 공백일경우 손님으로 표시합니다.
if($row[mb_id]=="") $name="손님";
// 점수 총합을 냅니다.
$total_point=($hit+($cnt*2)+($good*2))-$nogood;
echo "<td width=120> $name $row[mb_id]</td>";
echo "<td> 조회 : $hit, 쪽글 : $cnt, 추천 : $good, 비추 : $nogood, 총합 : $total_point </td>";
echo "</tr>";
}
// 여기까지 For문의 반복이 이루어집니다. 여기서마무리 되는것은 가장 상위첫 검색에서 얻은 아이디 기준으로
// 검색된 아이디가 모두 끝나면 For문이 끝납니다.
// 테이블을 닫아 줍니다.
echo "</table>";
}
?>
<?
// 함수를 사용합니다.
// mb_contest("freeboard") 처럼 직접 지정하여도 좋고,
// 아래와 같이 다른 페이지에서 현재 페이지로 넘어올때 값을 가져와야 하는 방식중 택일하여 사용하면 됩니다.
if(!$p_table) alert("게시판을 지정하여 주십시요"); // 임의로 지정하거나 혹은 값을 넘겨받는 방식중 택일
echo mb_contest("$p_table");?>
소스를 한번 분석하여 보았씁니다.
별 어려운 점이 없을듯 한데도, 조금 막혔던 적이 있었습니다.
그러나 하룻밤 자고 나니까 머리속에 퍼뜩 떠오르더군요.
궁금한점 남겨주세요^^
[이 게시물은 홍석명님에 의해 2004-03-30 09:21:59 PHP Forum(으)로 부터 이동됨]
[이 게시물은 관리자님에 의해 2004-05-12 09:08:32 연재(으)로 부터 이동됨]
댓글 전체
으악... 초보는 어렵다 ㅠ.ㅠ
공부방에 쓰잘데기 없는 질문 올려서 죄송합니다~~^^;;
위질문 몇일째 버벅 대다가,,,
노가다 끝에 해결 봤습니당~~~^^;;
아주 사소한데서 비롯된 실수 였더군요~~~^^
태글 몇번이나 확인 했는데 왜 그걸 빠뜨렸는지 ~~~
눈이 나빠진것이지~~~^^;;
어쨌던 죄송입니다~~~^^ㅋㅋㅋ
될때까정 한다 앗싸~~~^^
위질문 몇일째 버벅 대다가,,,
노가다 끝에 해결 봤습니당~~~^^;;
아주 사소한데서 비롯된 실수 였더군요~~~^^
태글 몇번이나 확인 했는데 왜 그걸 빠뜨렸는지 ~~~
눈이 나빠진것이지~~~^^;;
어쨌던 죄송입니다~~~^^ㅋㅋㅋ
될때까정 한다 앗싸~~~^^
안녕하세요?
마스터케빈님~~!
질문이 하나 있는데요~~~^^
여기에 여쭈어 봐도 될려나 모르겠네요~~~^^;;
http://flowered.co.kr/gnu
위주소에 보시면 상단부분에 테이블이 빨간 부분만
한 2mm 정도가 위와 옆이 떨어져 있습니다.
분명히 노마진 태그를 썻는데,,,
한이틀을 들여다 보아도 무었때문인지 알수가 없네요~~~
도움을 좀 받을수 있을까요~~?
될때 까정 한다 앗싸~~~~^^;;
마스터케빈님~~!
질문이 하나 있는데요~~~^^
여기에 여쭈어 봐도 될려나 모르겠네요~~~^^;;
http://flowered.co.kr/gnu
위주소에 보시면 상단부분에 테이블이 빨간 부분만
한 2mm 정도가 위와 옆이 떨어져 있습니다.
분명히 노마진 태그를 썻는데,,,
한이틀을 들여다 보아도 무었때문인지 알수가 없네요~~~
도움을 좀 받을수 있을까요~~?
될때 까정 한다 앗싸~~~~^^;;
어쨌든 다좋습니다..
저는 모르기에 책을 봐도 잘몰르거든요..
어떻튼간에 잘보고 있습니다.
저는 모르기에 책을 봐도 잘몰르거든요..
어떻튼간에 잘보고 있습니다.
자체 제작소스는 실력이 뽀록나는것이라 왠만한사람들은 익명으로 올리던지 머 그럴테지요.
저야 모 뽀록 나도 별 관계 없다고 생각하기 땜시..크크크
그누보드 소스 자체도 그렇습니다.
관리자님이 아마도 소스 이해및 수정이 용이하도록 고려하신듯...어려운 부분이 적습니다.
달리 말하면 사용자 수정을 고려하지 않는다면 좀더 간결한 소스가 나올수 있으리라 보이는 부분들이
적지 않게 있지요.
사용자들이 어렵게 느낄만한 부분들은 SQL몇가지 뿐일 겁니다.
그런면에서도 그누보드는 훌륭한거 같습니다.
제가 만일 그누보드 같은 소스를 짜게된다면 DB클레스를 이용할듯 싶네요
고수분들이야 다들 아실테고 고수분들은 제강좌란에 오실리도 없겟지만...
아무튼 lib.php 안에 포함된 함수들 보면 마치 디비클레스 처럼 되어 있는 모양새가 많지요^^
저야 모 뽀록 나도 별 관계 없다고 생각하기 땜시..크크크
그누보드 소스 자체도 그렇습니다.
관리자님이 아마도 소스 이해및 수정이 용이하도록 고려하신듯...어려운 부분이 적습니다.
달리 말하면 사용자 수정을 고려하지 않는다면 좀더 간결한 소스가 나올수 있으리라 보이는 부분들이
적지 않게 있지요.
사용자들이 어렵게 느낄만한 부분들은 SQL몇가지 뿐일 겁니다.
그런면에서도 그누보드는 훌륭한거 같습니다.
제가 만일 그누보드 같은 소스를 짜게된다면 DB클레스를 이용할듯 싶네요
고수분들이야 다들 아실테고 고수분들은 제강좌란에 오실리도 없겟지만...
아무튼 lib.php 안에 포함된 함수들 보면 마치 디비클레스 처럼 되어 있는 모양새가 많지요^^
아는것과 구현하는 차이겠네요.
솔직히 그생각을 못해봤네요^^ 발상의 전환이 필요한데 말이조.
쉽게 갈일을 어렵게 돌아간 기분이네요^^
고쳐써야 겠습니다.
몇줄만 바꾸면 되는것을..^^;
그러나 강좌에는 적당하리라 봅니다.
제 강좌를 이해 하신분이라면, 배부른 꿀꿀이님 말씀처럼 sum()을 이용한 응용 소스를 제작하여 보십시요.
^^
정 안나타나면 제가 수정해서 올려보도록 하조.
제가 실제 쓰는 소스의 경우는 위에 말씀하신 부분을 수정한것이 아닌
여러가지 접근을 막고 제한을 걸고 디자인을 입히고 그런 잡다한 거거든요
수정하는것이 결코 어려운 것이 아니거든요?? 저도 바로 수정해서 써야 겠네요
소스만 이해 된다면 어렵지 않으리라 봅니다.
도전해 보시는분이 있을까요?^^;;
있다면 기분좋겠네요^^
솔직히 그생각을 못해봤네요^^ 발상의 전환이 필요한데 말이조.
쉽게 갈일을 어렵게 돌아간 기분이네요^^
고쳐써야 겠습니다.
몇줄만 바꾸면 되는것을..^^;
그러나 강좌에는 적당하리라 봅니다.
제 강좌를 이해 하신분이라면, 배부른 꿀꿀이님 말씀처럼 sum()을 이용한 응용 소스를 제작하여 보십시요.
^^
정 안나타나면 제가 수정해서 올려보도록 하조.
제가 실제 쓰는 소스의 경우는 위에 말씀하신 부분을 수정한것이 아닌
여러가지 접근을 막고 제한을 걸고 디자인을 입히고 그런 잡다한 거거든요
수정하는것이 결코 어려운 것이 아니거든요?? 저도 바로 수정해서 써야 겠네요
소스만 이해 된다면 어렵지 않으리라 봅니다.
도전해 보시는분이 있을까요?^^;;
있다면 기분좋겠네요^^
// 배부른꿀꿀이님
감사합니다.
현재 이소스는 완성되기 전에 미리 빼둔 소스로써
실제 쓰이는것은 조금 다릅니다.
그러니 여러분들께서 응용하여 쓰시면 좋겠지요^^
예를 들면 지금은 게시물이 몇백개까지는 그다지 큰 무리는 없어보입니다만..
그 이상 넘어가게 되면 사양좋은 컴에서도 버벅댈수 밖에 없겟지요.
그러면 Limit를 주어야 겠지요^^
감사합니다.
현재 이소스는 완성되기 전에 미리 빼둔 소스로써
실제 쓰이는것은 조금 다릅니다.
그러니 여러분들께서 응용하여 쓰시면 좋겠지요^^
예를 들면 지금은 게시물이 몇백개까지는 그다지 큰 무리는 없어보입니다만..
그 이상 넘어가게 되면 사양좋은 컴에서도 버벅댈수 밖에 없겟지요.
그러면 Limit를 주어야 겠지요^^