웹마스터 팁

list.gif
그제는 엔지오에 접속이 안되구 어제는 개인적인 일 때문에 글을 쓰지 못했네요

글을 쓰기에 앞서 첫머리에도 썼지만 제 글이 하나의 생각의 전환이 되길 바라는 마음에서 쓴 점을

다시 한번 이해해 주시면 고맙겠습니다  게시판의 속도 개선이라던지 보안면에선  아무래도  내 자신 조

차도

튜닝해야 할 필요성은 느끼구 있습니다  제가 강의라는 말을 쓰지 않구 제 생각이라구 쓰는 점도 이유를

거기에 두고 있기 때문입니다  미니홈 만들기라는 타이틀로 글을 쓰는 가장 큰 이유는 여러 사람에게 미

니홈을

어떻게 만들어 주며 거기에 사용되는 게시판을  원하는 갯수만큼 어떻게 만들어 나누어 줄 수 있는지에

더 큰 비중을 두고 있다는 점을 양지해 주셨으면 고맙겠습니다  php에 어느 정도 자신 있으신 분은

제 글이 와 닿는 글은 아니지만 저와 같이 php를 막 시작 하셨거나 또는 미니홈이라는 부제를 생각하시



분에겐  도움이 되리라 믿구 글을 씁니다 그렇지만 자꾸 뒤돌아 보게 되는군요 ^^;;;

미니홈과 게시판 생성에 어느 정도 자신이 생기신 분은 필요에 의해  디자인 게시판 속도 개선과 소스

개선

등을 하시길 권고합니다




글을 클릭하구 들어가서 내용을 볼수 있는 view.php파일은

전 단계와 동일한 형태이며 거기에 더 추가된 사항은 윗부분에 글쓴이와 날짜 등 기본 정보와 아울러

내용이 들어간 사항만  더해질 뿐입니다


그러니 과정은  생략하구  소스분석과 어떻게 해서 여러개의 게시판을 생성한 사람에 맞게 불러오는지

대해 쓰겠습니다


관리 페이지에서 게시판을 생성하게 되면 디비에 게시판을 생성한 사람의 아이디 멤버번호 보드아이디

보드네임

과 게시판의 생성되어진 갯수를 표시하기 위해서 임의로 부여되는 board_no 가 있습니다 이부분은 없어

도 되지만

컨트롤 해주기 위해서 넣은 부분입니다

레벨별로 게시판 생성수를 제한하구 싶다면 각자 몇개의 게시판을 보유하구 있는지 알아야 합니다

디비 테이블에서 일률적으로 몇개 갖구 있는지 구문을 만들어 돌려도 되지만 그 보다도 필드를 하나 할

당해서

거기에 순번을 적어 둔다면 다음 게시판을 만들 때 조건을 불러 들이기가 편합니다

또한 게시판1, 게시판2, 게시판3 과 같이 일률적으로 게시판 이름을 부여하기에도 편하구요

- 게시판의 이름과 아이디를 기재하지 않았을 경우에는 미리 지정된 이름과 아이디가 있어야하기 때문입

니다-

또한 삭제시 비어 있는 값을 찾아 미리 지정해 놓은 게시판 이름을 불러들여 쓸 수가 있는거죠

위의 예시 처럼 3개의 게시판이 있는데 게시판2를 삭제 시켰을 경우 다음에 불러들이는 값이 게시판4가

아닌

비어 있는 값인 게시판2가 쓰여질 수 있도록 호출되는거죠

초기에 만들어 보는 게시판의 정보를 담는 테이블에는 기본 사항만 기재되지만  여기에 담길 수 있는것

들은

보드타입 혹은 스킨타입이라던지 목록 보여주기 혹은 감추기 , 이름레이어쓰기 혹은 감추기,코멘트 받음

안받음,

읽기 쓰기 접근 권한 설정 ,게시판의 바탕 배경이미지 등을 이곳에서 설정하실 수 있습니다

다 넣지는 못해드려도 몇개의 기본 사항은  어떤식으로 넣어야 하며 어떻게 동작되어지는지를 본 후에  

차후에

게시판 다듬기에서 필드 추가와 함께 필요한 사항을 넣어 보겠습니다

아래의 소스는 list.php 의 소스입니다

파일로 저장해서 home.php와 동일 선상에 업로드 해주시면 됩니다

파일로 업로드를 하지 않음은 소스 중간에 페이지 처리하는 부분에 있어

제로보드의 쪽지 소스를 사용하기 때문입니다




------------------------------------------------------------------------------------------------

---
<?

   제로보드 절대경로
   제로보드 상대경로    
   include $_zb_path."lib.php";

// DB 연결
        if(!$connect) $connect=dbConn();

// 멤버정보 구하기
        $member=member_info();

// 글쓴이의 정보를 갖고옴;;
$data=mysql_fetch_array(mysql_query("select no, board_no, user_id,name, member_no,board_id

,board_name ,back_img   from member_board  where board_id='$id'"));

        $data[no] = stripslashes($data[no]);
        $data[name] = stripslashes($data[name]);
        $data[user_id] = stripslashes($data[user_id]);
                $data[board_name] = stripslashes($data[board_name]);
                $data[member_no] = stripslashes($data[member_no]);
                $data[width] = stripslashes($data[width]);


$data2=mysql_fetch_array(mysql_query("select * from $member_table where user_id='$id' ||  

no='$member_no'"));




// $data 가 없을때, 즉 탈퇴한 회원인경우 표시
        if(!$data[no]) Error("생성되지 않은 게시판입니다");








// 선택된 메모가 있을시 데이타 뽑아오기;;


if($no) {
                $now_data=mysql_fetch_array(mysql_query("select

no,board_name,board_id,user_id,member_id,name,homepage,email,member_no,subject,memo,reg_date,file

1,hit  from member_get_memo  where no='$no' "));
//and a.board_id ='$data[board_id]';
}

        

// 전체 글의 갯수
        $temp2=mysql_fetch_array(mysql_query("select count(*) from member_get_memo where

board_id='$data[board_id]'"));
        $total=$temp2[0];







// 페이지 계산
        if(!$page) $page=1;
        $page_num=10;
        $start_num=($page-1)*$page_num; // 페이지 수에 따른 출력시 첫번째가 될 글의 번호 구함

        $total_page=(int)(($total-1)/$page_num)+1; // 전체 페이지 구함

        if($page>$total_page) $page=$total_page; // 페이지가 전체 페이지보다 크면 페이지 번호 바





// 데이타 뽑아오는 부분...
$que="select * from member_get_memo where board_id='$data[board_id]' order by no desc limit

$start_num,$page_num";

$result=mysql_query($que) or Error(mysql_error());





// 이용자 아바타 보이기




//  조회수 증가

if($data[member_no] != $member[no])
{
@mysql_query("update member_get_memo set hit=hit+1 where no='$no'") or mysql_error();
}




// MySQL 닫기
if($connect) mysql_close($connect);
        
// 페이지 계산  $print_page 라는 변수에 저장
        $print_page="";
        $show_page_num=10;
        $start_page=(int)(($page-1)/$show_page_num)*$show_page_num;
        $i=1;

        if($page>$show_page_num) {
                $prev_page=$start_page;
                $print_page="<a href=$PHP_SELF?

id=$id&page=$prev_page&select_arrange=$select_arrange&desc=$desc&category=$category&sn=$sn&ss=$ss

&sc=$sc&keyword=$keyword&page_num=$page_num>[Prev]</a> ";
                $print_page.="<a href=$PHP_SELF?

id=$id&page=1&select_arrange=$select_arrange&desc=$desc&category=$category&sn=$sn&ss=$ss&sc=$sc&k

eyword=$keyword&page_num=$page_num>[1]</a>..";
        }

        while($i+$start_page<=$total_page&&$i<=$show_page_num) {
                $move_page=$i+$start_page;
                if($page==$move_page) $print_page.=" <b>$move_page</b> ";
                else $print_page.="<a href=$PHP_SELF?

id=$id&page=$move_page&select_arrange=$select_arrange&desc=$desc&category=$category&sn=$sn&ss=$ss

&sc=$sc&keyword=$keyword&page_num=$page_num>[$move_page]</a>";
                $i++;
        }

        if($total_page>$move_page) {
                $next_page=$move_page+1;
                $print_page.="..<a href=$PHP_SELF?

id=$id&page=$total_page&select_arrange=$select_arrange&desc=$desc&category=$category&sn=$sn&ss=$s

s&sc=$sc&keyword=$keyword&page_num=$page_num>[$total_page]</a>";
                $print_page.=" <a href=$PHP_SELF?

id=$id&page=$next_page&select_arrange=$select_arrange&desc=$desc&category=$category&sn=$sn&ss=$ss

&sc=$sc&keyword=$keyword&page_num=$page_num>[Next]</a>";
        }
  









?>

<?
        if($data[no]) {
?>
<html>

<head>
<title>제목없음</title>
<meta name="generator" content="Namo WebEditor v4.0">
</head>

<body bgcolor="white" text="black" link="blue" vlink="purple" alink="red">
<table border="0" cellpadding="0" cellspacing="0" width="100%">
    <tr>
        <td width="963" height="33" colspan="6">
            <p>  관리   게시판 >> 테스트 게시판 1</p>
        </td>
    </tr>
    <tr>
        <td width="48" height="21" align="center" valign="middle" bgcolor="#DEDEF7">
            번호
        </td>
        <td width="569" height="21" align="center" valign="middle" bgcolor="#DEDEF7">
            내용
        </td>
        <td width="112" height="21" align="center" valign="middle" bgcolor="#DEDEF7">
            이름
        </td>
        <td width="103" height="21" align="center" valign="middle" bgcolor="#DEDEF7">
            날짜
        </td>
        <td width="73" height="21" align="center" valign="middle" bgcolor="#DEDEF7">
            조회
        </td>
        <td width="68" height="21" align="center" valign="middle" bgcolor="#DEDEF7">
            추천
        </td>
    </tr>  
    <tr>
        <td width="973" height="1" align="center" valign="middle" colspan="6" bgcolor="silver">
        </td>
    </tr>
    



<?
        // 출력
        $loop_number=$total-($page-1)*$page_num;
        while($now_data=mysql_fetch_array($result)) {


        //글을 쓴 날짜;
        $reg_date=date("Y/m/d H:i",$now_data[reg_date]);  

?>
  <!-- 여기서부터 글을 반복 시켜 줍니다 -->  
    
    
    <tr>
        <td width="48" height="22">
            <?= $loop_number?>
        </td>
        <td width="569" height="22">
             <?=$now_data[subject]?>
        </td>
        <td width="112" height="22">
               <?=$now_data[name]?>
        </td>
        <td width="103" height="22">
             <?=$reg_date?>
        </td>
        <td width="73" height="22">
              <?=$now_data[hit]?>
        </td>
        <td width="68" height="22">
           추천수
        </td>
    </tr>
    <tr>
        <td width="973" height="1" colspan="6" bgcolor="silver">
        </td>
    </tr>
    
      <!-- 여기까지  글을 반복 시켜 줍니다 -->  

<?
                 $loop_number--;
        }
?>



    
    
    
    <tr>
        <td width="973" height="24" colspan="6">
            <table align="center" border="0" cellpadding="0" cellspacing="0" width="100%">
                <tr>
                    <td width="498">
                       <font style=font-family:Tahoma;font-size:7pt;color:#cc0000><?

=$print_page?></font>
                    </td>
                    <td width="475" align="right">
                        글쓰기 목록
                    </td>
                </tr>
            </table>
        </td>
    </tr>
    <tr>
        <td width="617" height="21" colspan="2">
        </td>
        <td width="356" height="21" colspan="4">
            찾기 기능  
        </td>
    </tr>
</table>
</body>

</html>
<?
}
?>

------------------------------------------------------------------------------------------------

----


소스 설명 :


//해당  게시판을 불러옴;;
$data=mysql_fetch_array(mysql_query("select * from member_board  where board_id='$id'+ '"));

이 부분이 게시판 아이디로 호출했을 때 불러오는 부분입니다 member_board  라는 테이블에 게시판의

기본 정보가 담기구 거기에 있는 자료를 불러들여 게시판의 스킨이나 아이디 게시판 이름을 보여주는거





$data2=mysql_fetch_array(mysql_query("select * from $member_table where user_id='$id'+ ' ||  

no='$member_no'"));

전에 설명 드렸듯이 멤버 테이블에서 기본 정보를 빼오기 위해서 해준 부분입니다

차후 이름 레이어를 쓰신다면 멤버의 홈페이지 이메일등 기초 사항은 멤버 테이블에서 불러들여야 하기

때문입니다



if($no) {
                $now_data=mysql_fetch_array(mysql_query("select

no,board_name,board_id,user_id,member_id,name,homepage,email,member_no,subject,memo,reg_date,file

1,hit  from member_get_memo  where no='$no' "));
}



$now_data 글의 데이터입니다  (데이터명을 달리 줘도 되겠지만 어디까지나  게시판으로의 발상은 제로

보드

쪽지에서 왔기 때문에 표기명을 바꾸지 않았습니다 )

member_get_memo 라는 테이블에서 글을 뽑아 오는데 no 라는 필드에서 번호별로 뽑아옵니다

- 이부분은 초기의 만들어서 섰던 소스입니다 현재의 제 소스와는 틀립니다 -




// 데이타 뽑아오는 부분...
$que="select * from member_get_memo  where board_id='$data[board_id]' order by no desc limit

$start_num,$page_num";

$result=mysql_query($que) or Error(mysql_error());


member_get_memo  테이블에서 board_id='$data[board_id]' 보드 아이디라는 필드에서 $data[board_id]

라는 변수를 가진 데이터의 글들을 뽑아 오는데 no desc limit $start_num,$page_num"; 번호로 불러오되

역순 시켜서 ($start_num,$page_num)갯수 만큼 불러들입니다 새글이 맨 위로 올라오게 되는거죠



$result=mysql_query($que의 값을 대입) or Error(mysql_error());


$data[board_id] 는 member_board라는 디비 테이블에 사용자가 임의로 집어 넣은 게시판 아이디입니다

만약 repter 라는 이름으로 게시판을 생성했다면 board_id 라는 필드에 repter 라고 기록되어지겠죠

불러들이면 http://계정주소/mini/list.php?id=repter 가 될테구요  

글이 입력되는 member_get_memo  디비테이블에는 글이 올라가면서 해당 게시판의 아이디도 들어갑니다

그래서 글을 불러 들일 때 repter라는 게시판의 이름이 써진 부분만 빼오는거죠



//  조회수 증가

if($data[member_no] != $member[no])
{
@mysql_query("update member_get_memo set hit=hit+1 where no='$no'") or mysql_error();
}

$data[member_no] 여기서의 데이터는 미니홈 어드민 테이블의 데이터가 아닌 게시판의 정보가 담긴 곳입

니다

물론 member_board  라는 테이블에  게시판을 생성한 사람의 멤버번호가 기입 될 수 있는 member_no 라



필드가 있구요

게시판의 주인과 로그인한 회원이 서로 같지 않다면 중괄호 안의 상황을 연출합니다

hit 라는 필드에 1씩 페이지를 열 때 마다 업데이트를 시켜 주는거죠 물론 비회원과 게시판의 주인과

멤버 번호가 틀리니 비회원이 보았을 때도 히트 수는 증가되죠

페이징 처리하는 부분은 제로보드 쪽지 소스에 아이디만 추가했습니다

아래의 html 부분은 전 페이지에서 써 놓은 소스를 이용해서 붙여 넣은거구 말씀 드렸듯이

tr 을 기준으로 반복되어 글이 돌려지기 때문에 맨위에는



<?
        // 출력
        $loop_number=$total-($page-1)*$page_num;
        while($now_data=mysql_fetch_array($result)) {


        //글을 쓴 날짜;
        $reg_date=date("Y/m/d H:i",$now_data[reg_date]);  

?>

이부분이


아래에는

<?
                 $loop_number--;
        }
?>

이부분이 들어가고 중간에는 글쓴이와 날짜등이 표기 될수 있도록 소스를 넣었습니다

$loop_number 는 가상 번호입니다 글을 썼을 때 맨 앞에 있는 숫자를 먹여주는 역활을 하죠 글이 1000개



있다면 1000 부터 999 ,998,997~~~ 1 하는 식으로 글의 위치를 짐작할 수 있게 해주는 가상 번호입니다

$loop_number--;  숫자를 하나씩 빼주는 역활을 해 줍니다
  

올려드린 디비 테이블 생성파일을  전과 동일하게 생성해 주시구

아래의 주소로 불러들여 보세요

http://계정주소/mini/list.php?id=repter

http://계정주소/mini/list.php?id=repter_1

http://계정주소/mini/list.php?id=repter_2

로 불러들여서  업로드2 에 올려진 그림과 같이  테스트 제목 1~9 까지 (게시판 별로 3개씩)잘 표기되어

나오는지 확인해 주세요

제목 글쓴이 날짜
나만의 미니홈 만들기 ㅡ list.php , 디비 테이블 생성 [6] file 예뜨락 2004.11.26
나만의 미니홈 만들기 ㅡ 미니홈 생성 페이지 [3] file 예뜨락 2004.11.20
나만의 미니홈 만들기 ㅡ 기초적인 관리 페이지 [3] file 예뜨락 2004.11.20
나만의 미니홈 만들기 ㅡ 메인 기초 설계3 .레이아웃 [2] file 예뜨락 2004.11.19
나만의 미니홈 만들기 ㅡ 메인 기초 설계 .home.php [12] file 예뜨락 2004.11.17
나만의 미니홈 만들기 ㅡ 글쓰기에 앞서... [1] 예뜨락 2004.11.17
PHP프로그램에 간단한 인증(로그인) 걸기. [15] Lepas 2004.08.09
히어닥 문법 활용 [14] ☺심심 2004.07.13
해당 ftp 파일 서버에서 다른곳의 ftp 파일 서버로 백업용도 및 전송하기.. [9] 김동욱 2004.05.30
제로카운터 쉽게 설치하기 [26] file 대류 2004.01.17
세션을 이용한 관리자 모드 구축하기 3강 [6] 박정호 2003.12.09
세션을 이용한 관리자 모드 구축하기 2강 [6] 박정호 2003.12.09
세션을 이용한 관리자 모드 구축하기 1강(중복?) 박정호 2003.12.09
한꼬마의 제로보드 이용법 (sql로 테이블 호출) [2] 한꼬마 2003.11.26
[Lotto 6/45] 로또 추첨 구현하기~ [5] file 전원주 2003.11.21
한꼬마의 제로보드 활용방법 (로그인 값 알아 보기) [3] 한꼬마 2003.11.20
홈페이지 관리자 모드 구축하기 (HTTP 인증, 중복 맞음) [10] file 9000㎒ 2003.11.01
알기쉬운 웹용 MySQL 관리도구, phpMyAdmin 설치하기 [10] 허창원 2003.10.11
제로보드 + MSN 메신저 (작성글에 리플이나 코멘트가 달리면 MSN으로 알려준다?) [18] file HungryMania 2003.08.01
세션파일 크기/만들어진 시간체크해서 정해진 시간이후엔 파일 지우기?;; (라고 써야되낭? ;;) [6] 다오케이 2003.05.12