웹마스터 팁

오랜만에 글을 쓰느것 같네요 기다리신 분들께는 죄송함을 대신 전합니다

먹고사는 일도 그렇구 만들고 있는 플러그인을 계속 손을 대다 보니 시간이 여의치가 않네요

전시간에는 글 지우기를 했습니다

글을 지울려면 무엇보다도 글을 쓴사람 이외의 사람은 글을 지울수 없어야 합니다 물론 홈의 주인과

전체 관리자는 글을 지울수 있는 권한이 있어야겠죠

그러기 위해서 오늘은 패스워드를 맞추어서 글을 지울수 있도록 해보겠습니다

처음부터 체계적으로 강의를 준비하구 썼어야 되는데 생각나는대로 쓰다보니 엉망인 곳이 한두군데가

아니네요 패스워드 필드도 안 만들어 뒀으니

제 소스를 보구 응용하신 분들은 업로드 된 소스를 돌려서 패스워드 필드를 추가합시길 바랍니다

오늘 이후 강좌를 보시는 분은 하지 않아도 됩니다 업로드 된 sql문을 고쳐 놓을테니까요



모든 상황이 그렇지만  글을 쓰고 지우구 하는 것도 일종의 규칙이 있어야 합니다

즉 멤버 비멤버 관리자 전체 관리자 즉 네가지가 기본 사항으로 들어가야 합니다

그래야 제어하기가 편합니다

비멤버일 경우에는 글을 쓰면서 패스워드란을 보여주구 패스워드를 쓸수 있도록하며

그 패스워드를 디비에 입력시키구 수정 또는 삭제시에 디비에 있는 패스워드와 수정또는 삭제시

쓰여진 패스워드가 일치하는지 확인후 맞다면 다음 단계인 수정 또는 삭제할 수 있도록 합니다

만약 패스워드가 일치하지 않는다면 exit; 를 이용해서 더 이상 상황을 진행 시키지 않고

뻐져 나와서 자료를 타인이 지우지 못하게 보호합니다


멤버일 경우도 마찬가지인데 다만 멤버는 이미 제로보드에 패스워드란이 있기에 그걸 이용합니다

즉 글을 쓸 경우 제로보드의  멤버 테이블에서 그 멤버의 패스워드를 글을 쓰면서 임의로 넣어주는거죠

그후 그을 지울때는 멤버 값만 맞추면 됩니다

로그인 한 상태에서 글을 쓴후 로그 아웃한 상태에서는 자신의 제로보드 비번을 쓰면 글을 지울수 있겠죠


관리자는 미니홈의 주인 아이디와 멤버 아이디를 맞추면 됩니다

그런데 우리가 지금 할려구 하는것은 게시판에 올려진 글을 지우거나 수정하는 부분이므로

미니홈이 아닌 게시판 주인을 불러오는게 더 맞는 답안입니다

미니홈 주인은 가계도를 따지면 아버지가 아닌 할아버지뻘이 되기 때문입니다

관리자는  멤버레벨 혹은 멤버 번호가 1일때 혹은 슈퍼유저 테이블의 아이디와 멤버아이디를 맞추어서

넘기면 됩니다


잠깐 디비 테이블을 짚고 넘어간다면

모든 상황을 관리 체크할수 있는 슈퍼유저 테이블이 있어야 하며

- 이곳에서 전체 회원관리와 미니홈의 전체 관리가 이루어집니다 미니홈 레이아웃과 게시판 기본 관리까지 ㅡ

그 다음으로 개인 미니홈 정보관리 테이블이 있어야 합니다

- 이곳에서는 자신의 홈 관리를 할수 있겠죠 자신의 미니홈 제목이나 스킨변경 레이아웃변경등-

그리고 게시판 (관리) 테이블이 있어야 합니다

- 이곳에서 각자의 게시판 관리가 이루어집니다 생성 삭제 수정을 하면 그 정보가 담기구 게시판의

스킨 접근관리 글쓰기 관리등 세세한 게시판에 대한 정보가 담깁니다-

마지막으로 글이 담기는 테이블이 있습니다

- 이곳에서는 글을 쓰면 그 글들이 어느 게시판에서 누가 언제 썼는지등의 세세한 정보가 들어가겠죠-

그후 여러가지 테이블들이 존재하겠구요

코멘트 테이블이라던지 기타 이벤트 테이블요



잠깐 팁을 드린다면

프로그램을 하면서 가장 힘든부분이 연관성입니다

그 연관성만 잘 이해하구 습득하신다면 프로그램을 보는 눈이 좀더 밝아질 겁니다

제가 그나마 다른 사람보다 빨리 이해한 부분은 연관성을 조금이나마 이해하기 시작하면서 부터입니다

어떠한 프로그램을 돌릴때 어떤 형식으로 돌아가야 하며 어떻게 접근해야 되는지 등을 미리 생각하고

계획한다면 좀 더 빨리 접근하실수 있습니다


예를 들어서 여러개의 게시판에서 글을 뽑아오구 싶습니다 그런데 어떻게 해야할지 막연할 때가 있습니다

그럴경우 생각해 볼수 있는 것은 번호별로 정렬시키거나 하면 될텐데 문제는 번호가 게시판 마다 1번 부터

시작하기에 그럴경우 충돌이 생깁니다 여러분이라면 어떻게 하겠습니까?

저라면 날짜로 불러오겠습니다  게시판 마다 글을 쓴 시간 필드가 존재합니다

글을 쓸때 게시물 마다 다 시간이 틀리므로 시간을 이용해서 정렬시키면 되겠죠

위와 같은 것이 바로 연관성입니다

제 글을 읽어본 분들은 아시겠지만 저는 제로보드 쪽지에서 게시판과 같아 보인다는 연관성을 찾았고

그게 나만의 미니홈을 만들수 있는 계기가 되었습니다





본론으로 돌아가겠습니다

글을 쓸때 멤버와 비 멤버로 구분을 지어야겠죠

글쓰기 파일부터 손을 보겠습니다











write.php 파일을 연후에 아래와 같은 코드를 넣어줍니다




    <tr>
        <td width="1079" height="35" colspan="3" align="center" valign="middle"

bgcolor="#F2F2F2">
♧  좋은 글을 남겨 주세요  ♧        </td>
    </tr>
    <tr>
        <td width="1079" height="9" colspan="3">
        </td>
    </tr>
    <tr>
        <td width="1079" height="1" colspan="3" bgcolor="silver">
        </td>
    </tr>

--------------------------------
추가된 코드


<?if(!$member[no]){?>


ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
    <tr>
        <td width="111" height="25">
           페스워드
        </td>
        <td width="1" height="25" bgcolor="silver">
        </td>
        <td width="967" height="25">
<input type=password name=password value="" size="34"  maxlength=200 class=input style=width:97%>
        </td>
    </tr>
    <tr>
        <td width="1079" height="1" colspan="3" bgcolor="silver">
        </td>
    </tr>
    <tr>
        <td width="111" height="25">
            이름
        </td>
        <td width="1" height="25" bgcolor="silver">
        </td>
        <td width="967" height="25">
<input type=text name=name value="" size="34"  maxlength=200 class=input style=width:97%>
        </td>
    </tr>
    <tr>
        <td width="1079" height="1" colspan="3" bgcolor="silver">
        </td>
    </tr>
    <tr>
        <td width="111" height="25">
           홈페이지
        </td>
        <td width="1" height="25" bgcolor="silver">
        </td>
        <td width="967" height="25">
<input type=text name=homepage value="" size="34"  maxlength=200 class=input style=width:97%>
        </td>
    </tr>
    <tr>
        <td width="1079" height="1" colspan="3" bgcolor="silver">
        </td>
    </tr>
    <tr>
        <td width="111" height="25">
           이메일
        </td>
        <td width="1" height="25" bgcolor="silver">
        </td>
        <td width="967" height="25">
<input type=text name=email value="" size="34"  maxlength=200 class=input style=width:97%>
        </td>
    </tr>


--------------------------------
추가된 코드


<?}?>


ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
   <tr>
        <td width="1079" height="1" colspan="3" bgcolor="silver">
        </td>
    </tr>
    <tr>
        <td width="111" height="25">
           옵션
        </td>




들어간 것은 <?if(!$member[no]){?> 내용 <?}?> 이부분입니다 즉 메버가 아니라면 내용부분 (위에서는

패스워드 홈페이지 이름 이메일등이 되겠죠)을 출력해 주는거죠

멤버라면 당연히 위의 조건과 맞지 않으므로 감추게 되는거구요











write_ok.php파일은 예전에 소스 적용하신분만 아래와 같이 변경해 주세요

불필요한 질의어를 하나 지우구

멤버와 비멤버로 구분지었습니다 이전 해당 게시물의 소스와 아래 소스는 동일합니다

이하 소스
-----------------------------------------------------------------------------------------------

<?

제로보드 절대경로

제로보드 상대경로


   include $_zb_path."lib.php";


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

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


// 글쓴이의 정보를 갖고옴;;
$data=mysql_fetch_array(mysql_query("select * from member_board where board_id='$id'"));
            
                 if(isblank($subject)) Error("제목이 없습니다. 제목을 입력해 주십시오.");
                 if(isblank($memo)) Error("내용이 없습니다. 내용을 입력해 주십시오.");
                 $subject=addslashes($subject);
                 $memo=addslashes($memo);
                 $reg_date=time();

                 if($password) {
                 $temp=mysql_fetch_array(mysql_query("select password('$password')"));
                 $password=$temp[0];  
                 }

if($member[no]){// 회원일때 입력사항;

                 $name=$member[name];
                 $homepage=$member[homepage];
                 $email=$member[email];
                 $member_no=$member[no];
                 $level=$member[level];
                 $password=$member[password];

}// 회원일때 입력사항;
if(!$member[no]){// 비회원일때 입력사항;
                 if(isblank($password))Error("암호를 입력하여 주세요.<p>암호를 입력하셔야 수정/삭제를 할수 있습니다");
                 if(isblank($name)) Error("이름이 없습니다. 이름을 입력해 주십시오.");        
                 $name=$name;
                 $homepage=$homepage;
                 $email=$email;
                 $member_no=$member[no];
                 $level=$member[level];
                 $password=$password;  

}
$memo = addslashes($memo);
            
mysql_query("insert into member_get_memo(board_name,board_id,member_id,name,password,homepage,email,member_no,subject,memo,reg_date,file1)values('+ '$data[board_name]','$data[board_id]','$data[user_id]','$name','$password','$homepage','$email','$member_no','$subject','$memo','$reg_date','$path')") or error(mysql_error());


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

------------------------------------------------------------------------------
이상 소스












글 지우기 파일( delete.php )로 넘어가겠습니다

회원일 때는 멤버 값과 맞춰서 글을 지우면 되기에 큰 무리는 없습니다

다만 비회원일때가 문제겠죠 과연 그 글을 쓴사람이 누군지 알아야 하기 때문에

파일을 열어서 아래와 같이 추가분을 넣어주시면 됩니다


이하 소스
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
      if(!$member[no]){//비회원일 떄 처리;
         include "password.php";
         if($password!=$now_data[password]){//로그아웃된 회원이거나 비회원일 때 패스워드 묻기;;
         exit;
         }
      //디비 테이블에서 자료를 지워주는 쿼리문;



                 mysql_query("delete from member_get_memo where no='+ '$no' and board_id='$data[board_id]'");

echo"
                  <script language="javascript">
                  window.alert("선택하신 $now_data[name]님의 글이 삭제되었습니다!!");
                  location.href='list.php?id=$id';
                  </script> ";







      }//비회원일 때 처리;
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

이상 소스

위에서 추가된 부분은 아래와 같은 구문이 추가 되었습니다
=====================================================================================
                 mysql_query("delete from member_get_memo where no='$no' and board_id='$data[board_id]'");

echo"
                  <script language="javascript">
                  window.alert("선택하신 $now_data[name]님의 글이 삭제되었습니다!!");
                  location.href='list.php?id=$id';
                  </script> ";


=====================================================================================



소스 설명을 하자면

비회원일 경우 대괄호 안의 상황을 연출하게 됩니다

처음 들어오는 문구가 password.php 파일의 인크루드입니다

즉 패스워드 파일로 연결되어서 패스워드를 적게 되는거죠 그후에 기입한 패스워드와 테이블에 입력된

패스워드가 일치되지 않는다면    exit; 문에 의해  더이상 상황 진행을 하지 않습니다

만약 패스워드가 일치한다면 exit; 문을 벗어나 다음 상황인 테이블에서 글을 삭제하게 되는거죠

적어 놓은 패스워드랑 테이블에 들어간 패스워드랑 비교해서 틀리다면 대괄호 속의

        exit; 문을

연출해서 더 이상 상황을 진행하지 않는거죠

만약에 패스워드랑 테이블에 입력된 패스워드랑 맞게 된다면 위에 동작은 건너 뛰게 되어서 다음 진행 상황인

테이블에서 글을 지우는 동작을 하게 됩니다  글번호 값과 게시판 아이디를 맞추어서 글을 삭제하게 됩니다

그후에 글이 삭제되었다는 안내문구와 더블어 리스트 페이지로 이동됩니다

동작 설명은 이쯤이면 될거 같구 패스워드를 묻는   password.php 파일을 만들어야겠죠








password.php  아래의 소스를 password.php 로 만들어 미니홈 파일이 있는 곳에 올리시면 됩니다
이하 소스
------------------------------------------------------------------------



<html>

<head>
<title>패스워드를 입력하세요</title>
<meta name="generator" content="Namo WebEditor v4.0">
<link rel=StyleSheet HREF=style.css type=text/css title=style>
</head>
<body bgcolor="white" text="black" link="blue" vlink="purple" alink="red">
<table align="center" border="0" width="100%" height="100%">
    <tr>
        <td width="963" align="center" valign="middle">
<table align="center" border="0" cellpadding="0" cellspacing="0" width="239">
<form name=write method=post action="delete.php">
<input type=hidden name=page value=<?=$page?>>
<input type=hidden name=id value=<?=$id?>>
<input type=hidden name=user_id value=<?=$user_id?>>
<input type=hidden name=name value=<?=$name?>>
<input type=hidden name=member_no value=<?=$member[no]?>>
<input type=hidden name=no value=<?=$no?>>
<input type=hidden name=board_id value="<?=$board_id?>">

    <tr>
        <td width="239" height="2" bgcolor="silver">
        </td>
    </tr>
    <tr>
        <td width="239" height="8">
        </td>
    </tr>
    <tr>
        <td width="239" height="25" bgcolor="#F4F4F4" align="center" valign="middle">
<FONT class=view_title1>Enter</FONT> <FONT class=view_title2>Password</FONT>        </td>
    </tr>
    <tr>
        <td width="239" height="1" bgcolor="silver" align="center" valign="middle">
        </td>
    </tr>
    <tr>
        <td width="239" height="39" bgcolor="#F4F4F4" align="center" valign="middle">



<?
//패스워드를 암호화
        if($password) {
                $temp=mysql_fetch_array(mysql_query("select password('$password')"));
                  $password=$temp[0];
                      }

if(!$password){echo"<font color="#F44343">비밀번호를 입력하여 주십시요</font>";}
elseif($now_data[password]!=$password){echo"비밀번호가 올바르지 않습니다";}

?>

      </td>
    </tr>
    <tr>
        <td width="239" height="28" bgcolor="#F4F4F4" align="center" valign="middle">
                            <input type=password name=password size=20 maxlength=20 class=input>
        </td>
    </tr>
    <tr>
        <td width="239" height="1" bgcolor="silver" align="center" valign="middle">
       </td>
    </tr>
    <tr>
        <td width="239" height="30" bgcolor="#F4F4F4" align="center" valign="middle">
                           <input type=image src=ok.gif border=0 accesskey="s" onfocus=blur()> <a href="list.php?id=<?=$id?>"><img src=list.gif border=0></a>             <a href=javascript:void(history.back()) onfocus=blur()><img src=back.gif border=0></a>
       </td>
    </tr>
    <tr>
        <td width="239" height="12">
        </td>
    </tr>
    <tr>
        <td width="239" height="2" bgcolor="silver">
        </td>
    </tr></form>
</table>
        </td>
    </tr>
</table>
</body>

</html>






--------------------------------------------------------------------------
이상 소스




설명

삭제 버튼을 누르면 패스워드 파일로 넘겨지구 패스워드를 적게 됩니다

중요한 부분은
<?
//패스워드를 암호화
        if($password) {
                $temp=mysql_fetch_array(mysql_query("select password('$password')"));
                  $password=$temp[0];
                      }

if(!$password){echo"<font color="#F44343">비밀번호를 입력하여 주십시요</font>";}
elseif($now_data[password]!=$password){echo"비밀번호가 올바르지 않습니다";}

?>

이부분입니다

패스워드가 있다면 즉 패스워드를 기입하면 패스워드를 암호와 해서 배열로 받아둡니다

그후의 동작은 패스워드가 없다면 비밀번호를 입력하라는 메세지를 보여주구 다음단계로 넘어가서

패스워드가 있다면 첫번째 해준 배열로 받아둔 패스워드와 테이블에 입력한 패스워드가 맞는지 검사합니다

서로 틀리다면 비밀번가 올바르지 않다는 메세지를 출력하게 되는거죠 위의 단계를 모두 통과 했다면

비밀 번호가 맞는다는 결론이 나오니 그 다음 단계를 진행해서 폼값을 실행합니다

폼값에 히든으로 넣어준 게시판의 기본 정보를 함께 삭제 파일로 넘겨주구 인클루드 시킨 다음 부분인

삭제 동작을 하는거죠 그후 삭제 되었다는 메세지를 출력해 주구 리스트로 페이지를 옮겨줍니다


두서 없이 쓰다 보니 많이 부족하네요

필요한 부분이나 혹은 잘못된 부분이 있으면 코멘트 달아 주시면 고맙겠습니다




업로드한 password_add.txt를 연후 기재할 부분을 기재한후  확장자를 php로 바꾸어 계정에 올려서 불러들이면

패스워드 필드가 생성됩니다

임의로 패스워드란을 만드신 분과  처음 제 글을 접하신 분은 해당 없으며

위에 업로드한 것은 현 시간 이전에 소스 적용하신분에 한합니다