2004년 9월 24일 금요일

월별 글쓰기 및 코멘트 쓰기 랭킹 달기!!!

- 오래전에 nzeo.com에 공개한 팁입니다. 관리를 위해 옮겨놓습니다.

http://www.nzeo.com/bbs/zboard.php?id=cgi_tip&page=1&sn1=&divpage=1&sn=on&ss=on&sc=off&keyword=유메미루&select_arrange=headnum&desc=asc&no=4617

수많은 분들이 포인트 랭킹이라고 해서 전체순위를 보여주는 프로그램을 많이 보셨으리라 봅니다.,
이번 프로그램은 그 순위중에서 해당별로 출력을 해주는 것입니다.

1. 디비 필드 만들기.
다른 방법도 많이 생각을 해봤지만 날마다 디비에 저장하여 뽑는 편이 제일 편한 방법일거라고 생각하여 디비자원을 조금 쓰도록 합니다.
위의 프로그램을 복사하여 제로보드 폴더에 옮기신후 실행하여 주시면 생성이 됩니다.

<?

$host = "localhost";
$user = "******"; //mysql ID
$password = "******"; //mysql PW
$dbname = "******"; //DataBase Name

$query = "
CREATE TABLE lank (
  no int(11) NOT NULL auto_increment,
  member_no int(11) NOT NULL default '',
  member_id varchar(20) NOT NULL default '',
  wp int(20) NOT NULL default '',
  cp int(20) NOT NULL default '',
  check_date int(13) NOT NULL default '',
  PRIMARY KEY  (no),
  UNIQUE KEY no (no)
) TYPE=MyISAM;";


//디비커넥션
mysql_connect($host,$user,$password);
//쿼리실행
$result = mysql_db_query($dbname,$query);
?>

2. 프로그램 보기

 <?

/*************************************************************
* 월별 글쓰기 코멘트 순위 표기하기
*
* 프로그래밍 : 박상연(yumemiru@zeeps.com)
*
* 홈페이지 : http://zeeps.com
*
* 이 프로그램은 월별 글쓴수와 코멘트수를 표기하기 위해 만들었습니다..
*
* 저작권 명시를 삭제하시면 안됩니다.
*
* 원하시는대로 수정하여 사용하실수 있으나 수정후 배포는 하지마시기 바랍니다.
*
************************************************************/

 $now = time();                // 현재 시간을 초단위로 구해줍니다. time()사용하면 유니버설스템프타임 여튼 이걸구해줍니다./
  $year= date('Y');
  $month= date('m');
  $day=date('d'); 
  $hour = date('H');             // 현재 몇시인지 구해줍니다. h는 12시간으로 표기 H는 24시간으로 표기해줍니다./
  $min = date('i');               // 현재 몇분인지 구해줍니다./ 
  $sec = date('s');               // 현재 몇초인지 구해줍니다./
  $to_day = mktime(0,0,0,$month,$day,$year); //특정하게 지정된 날짜의 시간을 초단위로 구해줍니다./
  $first_day = mktime(0,0,0,$month,1,$year); // 매월 1일을 구함./
  $end_day=date('t');  // 이달의 마지막날.
  $lankSql = "select * from lank where  check_date = '$to_day' order by wp desc limit 1";
  $count_lank = mysql_query($lankSql,$connect);

  $count_ok=mysql_num_rows($count_lank);

if($count_ok==0)
{
// 제가 사용하는 홈페이지에서는 마지막글쓴날을 표기하도록 하였으므로 이런 방식을 사용합니다.
$temp2 =mysql_query("select no,name from zetyx_member_table where last_write >'$first_day'",$connect);
//$temp2 =mysql_query("select no,name from zetyx_member_table",$connect);


$target_board = "freeboard||q_a||tips||oekaki||to_admin||rk_skin";  //생성한 게시판 아이디를 모두 적는다
$arry_board = explode("||",$target_board);
$target_borad_name= "자게||질답||팁||오에||정보||스킨";
$title_name_temp = explode("||",$target_borad_name);
$boardTotal = sizeof($arry_board);

while($mem_data = mysql_fetch_array($temp2)){
        $mem_no = $mem_data[no];
        $mem_name = $mem_data[name];

        $write = 0;
        $comment = 0;
               
        for ($k=0;$boardTotal>$k;$k++)
        {
              $board_name=$arry_board[$k];
        $countSql = "select * from zetyx_board_$board_name where  ismember='$mem_no' and reg_date>'$first_day'";
        $count = mysql_query($countSql,$connect);
        $write = $write + mysql_num_rows($count);

        $countSql = "select * from zetyx_board_comment_$board_name where  ismember='$mem_no' and reg_date>'$first_day'";
        $count = mysql_query($countSql,$connect);
        $comment = $comment + mysql_num_rows($count);
        }
        mysql_query("insert into lank (member_no,member_name,wp,cp,check_date) values ('$mem_no','$mem_name','$write','$comment','$to_day')") or error(mysql_error());
         }
// 불필요한 디비 자원을 삭제합니다.
  $result = mysql_query("delete from lank where check_date < '$to_day'");
 
  }
?>


<table border=0 cellspacing=0 cellpadding=0 width=185>
  <tr>
        <td height=27 bgcolor=445599>
                < img src=http://zeeps.com/ver4/images/t.gif border=0 height=5>

                < font color=white> < b><?=$month?>월의 글올림이(~<?=$month?>월<?=$day?>일)
        </td>
</tr>
</table>

< img src=http://zeeps.com/ver4/images/t.gif height=2>

<table border=0 width=185 cellspacing=1 cellpadding=8 bgcolor=A9DDDE>
<tr><td valign=top bgcolor=white>< img src=http://zeeps.com/ver4/images/t.gif border=0 height=4>

<?

$lankSql = "select * from lank where  check_date = '$to_day' order by wp desc limit 5";
$count_lank = mysql_query($lankSql,$connect);
$i=1;

while($lank_data = mysql_fetch_array($count_lank)){ 
      $mem_no=$lank_data[member_no];
      $mem_name=$lank_data[member_name];

      $private_icon_file=$_zb_path."icon/private_icon/".$mem_no.".gif";
      if(@file_exists($private_icon_file)) {
          $private_icon_file=$_zb_url."icon/private_icon/".$mem_no.".gif";
          $mem_name="< img src='$private_icon_file' border=0 align=absmiddle>".$mem_name;
          }
    else{
        $mem_name="< img src='".$_zb_url."images/zs.gif' border=0 align=absmiddle>".$mem_name;
        } 

      $write_no=$lank_data[wp];  
      $comment_no=$lank_data[cp];
      echo "$i 위  $mem_name ($write_no)
";
      echo "< img src=http://zeeps.com/ver4/images/t.gif border=0 height=10>
";
            $i++;
      }
echo "< a href=http://zeeps.com target=_blak>< font color=orange>program by 유메미루";

?>
</td></tr>
</table>

댓글 8개:

  1. 어째.. 오류만 잔뜩뜨고.. 잘 안되서.. 질문좀드릴려구요..<br />

    첨에 디비필드 만드는 부분을 rank.php로 만들었는데요<br />

    실행시켜보았는데 그냥 하얀페이지만 떴거든요? 디비필드가 만들어진건가요?<br />

    디비가 안만들어져서 오류만 뜨는건지.. 어쩐건지.. 일단 그거부터 잘 모르겠거든요..<br />

    <br />

    <a href=http://www.gongyeon.com/rank.php target=_blank>http://www.gongyeon.com/rank.php</a><br />

    <a href=http://www.gongyeon.com/point.php target=_blank>http://www.gongyeon.com/point.php</a>

    답글삭제
  2. 디비관리페이지에 들어가서 확인해보았더니 디비는 만들어져있더군요..<br />

    그런데 계속 에러가 뜨는데..<br />

    한번 봐주시길 부탁드립니다..

    답글삭제
  3. may // zeeps.net 에서는 사용하지않는소스라 원본 소스를 보내드리지못해 죄송합니다.<br />

    원본 소스 링크부탁드릴게요!!<br />

    답글삭제
  4. 허걱;<br />

    소스 그대로 적었더니.. 이렇게 나와버리네요;;;

    답글삭제
  5. may // <br />

    // 제가 사용하는 홈페이지에서는 마지막글쓴날을 표기하도록 하였으므로 이런 방식을 사용합니다.<br />

    //$temp2 =mysql_query("select no,name from zetyx_member_table where last_write >&#039;$first_day&#039;",$connect);<br />

    $temp2 =mysql_query("select no,name from zetyx_member_table",$connect);<br />

    이부분을수정해보세요!!

    답글삭제
  6. 아.. 죄송한데요...<br />

    그부분을 어떻게 수정해야할지..;; 모르겠거든요..<br />

    안그래도.. 저는 유메미루님처럼 마지막글쓴날을 표기하도록.. 이런걸 안했으니.. 수정해야하는가 생각도 들었는데요..<br />

    어찌 수정해야하는건지 모르겠어서...<br />

    어떻게 수정해야할지 좀 알려주셔요;;

    답글삭제
  7. 현재 본문의 소스는 마지막 글쓴날을 체크하도록 하여 프로그램실행속도를 빨리하도록 한것입니다.<br />

    그게 아니라면 코멘트에 달린것처럼 <br />

    //$temp2 =mysql_query("select no,name from zetyx_member_table where last_write >&#039;$first_day&#039;",$connect);<br />

    $temp2 =mysql_query("select no,name from zetyx_member_table",$connect);<br />

    하시면 될듯하네요,,

    <!-- <zogNick><A HREF=&#039;http://www.zeeps.net/blog/&#039; title=&#039;http://www.zeeps.net/blog/&#039; target=_blank ><img border=0 alt=&#039;유메미루&#039; border=&#039;0&#039; src=http://www.nhacks.com/email/email.php?mail=eXVtZW1pcnU%3D&domain=TVNO

    ></A></zogNick> <zogURL>http://www.zeeps.net/blog/</zogURL> -->

    답글삭제
  8. $private_icon_file=$_zb_path."icon/private_icon/".$mem_no.".gif";<br />

    if(@file_exists($private_icon_file)) {<br />

    $private_icon_file=$_zb_url."icon/private_icon/".$mem_no.".gif";<br />

    $mem_name="< img src=&#039;$private_icon_file&#039; border=0 align=absmiddle>".$mem_name;<br />

    }<br />

    else{<br />

    $mem_name="< img src=&#039;".$_zb_url."images/zs.gif&#039; border=0 align=absmiddle>".$mem_name;<br />

    } <br />

    상단부분이 틀렸을겁니다..<br />

    저 같은 경우에는 개인 아이콘이 없는 경우 전체 아이콘이 보이도록 했거든요,,<br />

    images/zs.gif 가 그부분입니다..<br />

    그부분의 파일을 하나 만들어 주시면 됩니다..

    답글삭제