웹마스터 팁

제홈에 와서 다음 글은 언제 나오냐구 물어보시는 분들이 간혹 계시더군요

요즘  이런 저런 작업을 하다 보니 자연 글을 쓰는게 많이 늦어지네요 별로 명쾌하거나 혹은

재밌는 글이 아님에도 불구하고 지켜 보시는 분들께 감사함을 전합니다


전 시간엔 메모장의 디자인을 짜봤는데요 오늘은 그 디자인으로 메모장을 만들어보겠습니다

대부분 그렇지만 구성은

디비 연결

데이터의 정의(메모장의 주인이 누구인지 메모장의 기본 정보를 불러옵니다)

전체글의 갯수를 불러옴( 해당 메모의 전체 갯수를 알아야 페이징을 할수 있습니다)

페이징

메모장의 글을 불러오기 위한 기본 쿼리문 정의

html문 시작

form ( 글쓰기시 메모와 글쓴이등 해당 정보를 넘겨줌)

글쓰기 입력문

/form

table (본격적인 메모글 추출을 위한 테이블 시작)

while문 시작 (위에 적힌 기본적인 쿼리문을 배열로 만들어 줌  $memo_data 로 메모의 글과 작성자 날짜등

메모의 전반적인 사항을 불러 들이기 위한 데이터의 정의 )
tr

$memo_data [name]  $memo_data [memo] 등으로 표기

tr
while문 닫음

/table

디비연결 끊어줌


위와 같은 식으로 만들수 있습니다



한가지 알아 두실것은

폼태그를 작성할 때 주의점은 폼태그 안에 다른 폼태그를 넣을수 없습니다

<form name1><form name2></form></form>

위와 같은 식으로 쓰실수 없습니다 괜히 고생하시지 말고 폼안에 있는 일정부분을 다른 곳으로 타겟을

주고 싶을 때는 자바 스크립트를 이용해 해당 객체의 타겟을 넘겨주는 식으로 알아 보시기 바랍니다


항상 강조하지만 프로그램을 잘하고 싶으시면 소스를 짜다가

막히는 부분이 있으면 질문 이전에 검색부터 해보구 비슷하게 만드는게 더 효율적입니다

그 후에도 안되면 질문을 하구요 만들어 놓고 보면 웃음밖에 나오지 않을정도로 어이없이 만들어질 수 있습니다

하지만 계속 그 상태로 둔다면 실패한 소스밖에 되지 않지만 그걸 자꾸 응용하구 바꾸고 하다 보면

자신만의 노하우와 팁이 생겨납니다  제가 엔지오에 글이라도 몇줄 남길수 있는 부분 또한 그런식의

노력이 어느 정도 있었기에 가능한겁니다 전 미니홈에 투자한 시간만 2500시간이 넘습니다

그러니 글을 읽는 여러분도 처음부터 기죽을 필요도 없을뿐더러

소스를 보면서 자꾸 생각하다 보면 처음엔 허술하지만 차곡 차곡 곡식 쌓이듯 자신의 노하우가 생길 것입니다

모두를 잘할 필요는 없습니다 자신이 필요한 하나만 잘해도 기분 좋은 프로그램밍을 하실수 있으실 겁니다


사설은 접구 이하 소스입니다


이하 소스
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ



<?
제로보드 절대 상대주소 인크루드

   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]);


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


// 전체 글의 갯수
        $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());



        
// 페이지 계산  $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&keyword=$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=$ss&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" leftmargin="0"

marginwidth="0" topmargin="0" marginheight="0">

<table border="0" width="100%" cellpadding="0" cellspacing="0">
<form method=post name=write action=write_ok.php onsubmit="return check_submit();" enctype=multipart/form-data>
<input type=hidden name=page value=<?=$page?>>
<input type=hidden name=id value=<?=$id?>>
<input type=hidden name=no value=<?=$no?>>
<input type=hidden name=member_id value="<?=$data[user_id]?>">
    <tr>
        <td height="1" bgcolor="silver">

        </td>
    </tr>
<!-- 비 회원일 때: 시작-->
<?if(!$member[no]){?>

    <tr>
        <td  height="39" bgcolor="#F2F2F2">
            <table border="0"align="center" cellpadding="0" cellspacing="0">
                <tr>
                    <td width="180" height="42" style="text-indent:20px;">
                    <font class=td>비밀번호:</font> <INPUT class=input type=password maxLength=20

size=8 value="" name=password>
                    </td>
                    <td  width="180" height="42" style="text-indent:20px;"><font class=td>이름:

</font><INPUT class=input maxLength=5 size=10 name=name>
                    </td>
                </tr>
            </table>

        </td>
    </tr>
    
<?}?>
<!-- 비 회원일 때: 끝-->    
    
    <tr>
        <td  height="47" bgcolor="#F2F2F2">
        <table border="0" cellpadding="0" cellspacing="0" width="100%">
           <tr>
             <td width="100%" style='word-break:break-all;'>
           <input class=input type=text name=memo value=""  style="width:100%">
             </td>
             <td width="43" style="padding-top:1px;">
             <table align="center" border="1" cellspacing="0" width="59" bordercolordark="white"
bordercolorlight="black" cellpadding="0">
                <tr>
                  <td width="55" height="11" bgcolor="#F8F8FF">
           <input type=submit check_submit() style="border:solid 0;font-
size:9pt;color:black;background-color:#F8F8FF;height:15px;width:50;cursor:pointer;" value='글쓰기'
onclick="this.form.action='write_ok.php'" accesskey="s" style="height:11;" >
                  </td>
                </tr>
              </table>
              </td>
            </tr>
         </table>
        </td>
    </tr>
    <tr>
        <td height="1" bgcolor="silver">
        </td>
    </tr>
    <tr>
        <td height="75" valign="top">
            <table border="0" cellpadding="0" cellspacing="0"width="100%">
                <tr>
                    <td height="1" colspan="3" bgcolor="silver">
                    </td>
                </tr>
                
<!-- while 문으로 들어온 데이터를 돌림-->    



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

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

?>


          
                <tr>
                    <td width="15%" height="25"  style="text-indent:20px;word-break:break-all;">
                       <?=$memo_data[name]?>

                    </td>
                    <td height="25"  style=" padding-left:15px;word-break:break-all;">
                        <?=$memo_data[memo]?>

                    </td>
                    <td width="15%" height="25" style="text-indent:20px;word-break:break-all;">
                        <?=$reg_date?>
                    </td>
                </tr>
                <tr>
                    <td height="1" colspan="3" bgcolor="silver">
                    </td>
                </tr>  



<?
                $loop_number--;
        }
?>
<!-- while 문으로 들어온 데이터를 돌림-->                
                        
            </table>
        </td>
    </tr>
    <tr>
        <td height="1" valign="top" bgcolor="silver">

        </td>
    </tr>
    <tr>
        <td height="37" valign="middle" bgcolor="#F2F2F2"align="center">
<font style=font-family:Tahoma;font-size:7pt;color:#cc0000><?=$print_page?></font>
        </td>
    </tr>
    <tr>
        <td height="1" valign="top" bgcolor="silver">
        </td>
    </tr></form>
</table>
</body>
</html>
<?

}

// MySQL 닫기
if($connect) mysql_close($connect);

?>




ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
이상 소스


특별히 어려운 부분은 없을것입니다


글을 입력시키는 write_ok.php을 조금 수정해 주어야 합니다

이유는 메모장이거나 혹은 방명록일때 제목이 들어가지 않기 때문에 그냥 이대로 쓰면

제목이 없다구 에러 페이지가 나오기 때문입니다 더블어 메모를 입력시키고 페이지를 옮겨줄때

무조건 게시판으로 넘겨주기 때문입니다






여기서 한가지 더 알아 두실 부분이 있습니다

현재 메모장은 자신의 아이디로 생성되게 했습니다 그게 제일 간단하고 편하기 때문입니다

메모장 같은경우 하나만 쓰기 때문에 그렇게 해 놓는게 편하구 관리하기가 좋습니다

방명록일 경우엔 게시판을 타입을 줘서 설치한다거나 혹은 아이디_guest 식으로 게시판 아이디를 정해줘도

되겠죠  미니홈에서 가장 문제시 되구 힘든 부분이 게시판을

어떻게 생성해서 각자에게 주느냐가 제일 큰 관건입니다


제가 생각한 방법은 위에 쓴것 처럼 메모장은 자신의 아이디로 생성해서 불러오게 하구

기타의 게시판이나 엘범 방명록등은 게시판을 생성할 때 자신이 아이디를 지정해 쓰는 방법입니다

물론

사용자 이이디_1
사용자 이이디_2
사용자 이이디_3

이런식으로 일률적으로 만들수도 있지만요

메모장도 게시판들 마냥 따로 아이디를 활당해 줄수 있지만 차후에 제로보드와 연결시킨다면

아이디로 해두는게 더 효율적입니다


글저장 파일에서 고쳐야 할 부분은 아래와 같습니다
                 if(isblank($subject)) Error("제목이 없습니다. 제목을 입력해 주십시오.");
이부분을 찾아서 아래와 같이 바꾸어 줍니다

                 if($id!=$data[user_id]){            
                 if(isblank($subject)) Error("제목이 없습니다. 제목을 입력해 주십시오.");
                 }else{
                 $subject="메모장에서 쓰인 글입니다";
                 }


게시판 아이디가  데이터(유저아이디) =메모장의 주인 즉 저 같은 경우 repter이기 때문에

repter로 들어온 게시판의 글은 메모장의 글로 인지 되겠죠

위의 소스는 게시판 아이디가 게시판 생성자의 아이디와 같지 않다면 다음 중괄호의 상황인 제목이 없다는

에러를 내게 됩니다 게시판 아이디와 게시판 생성자의 아이디가 같기 때문에 엘스 구문으로 넘어와서

제목에 메모장에서 쓰인글입니다란 임시 제목이 들어가게 됩니다



그리고 맨 아래에 보면 다음과 같은 스크립트가 있습니다


         echo"<script language="javascript">
               window.alert("$data[board_name]에 글이 등록되었습니다.");
               location.href='list.php?id=$id';
              </script>";

이부분을 다음과 같이 바꾸어줍니다


                 if($id!=$data[user_id]){            
         echo"<script language="javascript">
               window.alert("$data[board_name]에 글이 등록되었습니다.");
               location.href='list.php?id=$id';
              </script>";
                 }else{
         echo"<script language="javascript">
               window.alert("메모장에 글이 등록되었습니다.");
               location.href='memo.php?id=$id';
              </script>";
                 }

마찬가지로 게시판이면 게시판 리스트로 메모장이면 메모장으로 타겟을 옮겨줍니다




처음 게시판을 생성해서 만들때 이미 자신의 아이디 ,자신의 아이디_1 ,자신의 아이디_2 이런 유형으로

게시판을 생성했기 때문에 게시판과 메모장이 중복이 됩니다 이점은 미리 생각하시구요

차후에 소스가 어느 정도 정립되면 그때는 좀더 다듬어 회원이 관리자의 승인 여하에 따라 미니홈을

생성하고 생성 과정에서 기본으로 메모장과 기본게시판 엘범 방명록을 만들수 있게 조절될겁니다


왜 전체 소스를 내 놓지 않느냐 혹은 좀더 다듬어서 내놓지 여기 했다 저기했다 중구난방으로 가느냐라고

질문하시는 분도 계시지만  글을 쓸때 초기에 썼듯 이건 소스 해설이 주목적이 아닌

팁을 알려 드리기 위한 하나의 글임을 알아주시기 바랍니다

전체 코딩은 더 이상 쓰지 않아도 될만큼 진행 됐을 때 올릴 생각입니다


다음에는 게시판에 쓰이는 코멘트 부분을 해보겠습니다

혹여 오류나거나 틀린 부분이 있으면 코멘트 달아주세요 테스트용으로 설치한 것이라 간혹 발견하지 못하는

소스상 잘못된점이 있을수 있습니다


제목 글쓴이 날짜
[PHP 동영상강좌] 9. form태그를 이용한 값의 전달 [15] 서기 2005.11.22
[PHP 동영상강좌] 8. Get방식의 전달과 테이블, 스타일태그의 사용 [13] 서기 2005.11.22
[PHP 동영상강좌] 7. Get방식을 이용한 변수의 전달 [12] 서기 2005.11.22
[PHP 동영상강좌] 6. Hello PHP [14] 서기 2005.11.22
[PHP 동영상강좌] 5. 웹서버/웹브라우져/PHP란 무엇인가 [12] 서기 2005.11.17
[PHP 동영상강좌] 4. 스타일 시트 [17] 서기 2005.11.17
[PHP 동영상강좌] 3. 테이블 태그의 심화 [10] 서기 2005.11.17
[PHP 동영상강좌] 2. 하이퍼링크, 테이블태그의 사용방법 [15] 서기 2005.11.17
[PHP 동영상강좌] 1. HTML이란 무엇인가! [22] 서기 2005.11.17
주민등록번호 진위확인 [5] file 엔시™ 2005.11.08
예전에 책원고로 만들었던것인데 필요한분 사용하세요 [7] file 유창화 2005.10.22
이쁜 달력소스입니다. [2] file 최문혁 2005.09.05
자기계정에서 file()가 잘안될때.... [5] 이진환님 2005.08.18
일년치 달력을 한꺼번에 보자!!! [4] 未淚 2005.08.07
효율적인 경로 지정하기 [9] 대류 2005.07.27
대용량 파일 업로드 컴포넌트 [4] file OTLNO 2005.06.15
트랙백 기능 구현하기. 태규 2005.06.12
나만의 미니홈 만들기 ㅡ 메모장 소스 예뜨락 2005.06.09
mysql 테이블 스키마 보는법. [2] 최문혁 2005.05.14
나만의 미니홈 만들기 ㅡ 메모장 디자인 (html 소스) [4] 예뜨락 2005.05.12