다음 이전 차례

17. 데이터 베이스 유틸리티 및 Admin 부분

데이터 베이스의 경우 직접 local 에서 쿼리들을 실행 하는 방법만을 지금까지 보아 왔습니다.
여기서 소개할 데이터 베이스 유틸리티는 원격에서 mysql에 설정 되어 있는 계정으로
접속(host , id , password) 해서 각각의 데이터 베이스를 관리하는 유틸리티 스크립트를 소개 하겠습니다.
즉 브라우저 상에서 직접 쿼리들을 입력 하고 실행 하는 것입니다. 그리고, 각각의 게시판( 경매 , 자료실)의
다중 생성과 지움을 할 수 있는 Admin 영역을 살펴 보겠습니다.
이 두 스크립트는 아직 추가 되고 수정될 부분들이 많이 존재 합니다. 앞에서 설명한 소스와 마찬가지로
여러분들이 새로운 아이템을 추가 해서 사용 하기 바랍니다.
먼저 Admin 영역을 만들기 위해 하나의 데이터 베이스와 두개의 테이블을 생성 합니다.

17.1 Admin 영역 , 데이터 베이스 유틸리티 구성과 데이블 생성

Admin 영역은 여러 가지 권한을 사용한 다양한 방법으로 작성 할 수 있습니다. 다음에 소개 할 소스는 다소
못미치는 부분들이 많이 있지만 각각의 계정에 따른 권한의 설정 등으로 다양한 Admin 영역을 만들 수 있습니다.
즉, 회원제 사이트의 경우 각 게시판을 관리하는 사람을 설정하는 부분을 만든다든지 물론 이 관리자는 다른
게시판에 관한 권한은 없게 하는 등의 여러 방법들이 있습니다.
데이터베이스 유틸리티의 경우 외국 php 관련 사이트에서 이와 유사한 더 많은 기능과 사용자 중심의 스크립트
들이 존재합니다. 관련 소스는 php사이트를 방문 하면 얻을 수 있지만 보다 간단히 설명 하기위해 제가 직접 소스를
만들어 보았습니다.

 
이 두 부분을 만들기 위한 스크립트는 중요 부분이 3개 존재 합니다.
함수만 존재 하는 파일 그리고 이 함수를 이용한 화면용 루틴 파일 그리고 쿠키를 생성하고 Admin 영역으로
접속하게 하는 파일입니다.


파일은 

   db_view.php (함수를 이용한 화면출력 루틴들)
   db_func_all.php(함수 집합 파일)
   logon.php(쿠키의 생성과 어드민 접속)


먼저 Admin영역으로 접속 하기 위한 링크는 각 게시판 메인 화면에 보면 있습니다.
그림. 15-1 과 그림. 14-1 의 아래 부분에 Admin 링크를 클릭 하면 로그온 화면이 출력됩니다.
이 부분은 소스에서 설명 하겠습니다. 
그럼 이 영역을 만들기 위한 데이터 베이스와 테이블을 생성 하겠습니다.

그림. 17-1
위 그림. 17-1 은 자료실 게시판에서 Admin 영역으로 로그온 한 화면 입니다.
        
데이터 베이스와의 연관 부분은 

    no - 해당 게시판 번호 
    title - 해당 게시판 제목
    mview - 해당 게시판의 첫번째 테이블 이름
    view - 해당 게시판의 두번째 테이블 이름
    sum - 각 게시판에 게시된 글의 수량을 저장 하는 부분
    date - 해당 게시판의 생성된 날짜

위 항목들은 adminp 데이터 베이스에 존재하는 자료실 테이블(file) 입니다.
경매 게시판의 테이블(admin) 또한 위 항목과 같습니다.
먼저 데이터 베이스를 만듭니다.

그림. 17-2
데이터 베이스를 생성 했다면 자료실 테이블을 만들 파일을 생성 합니다.
Pico 편집기나 다른 유틸리티를 이용해서 만듭니다.

그림. 17-3
    다음 경매 게시판 테이블을 생성 합니다.

그림. 17-4
그림. 17-1 에서 해당 게시판 제목을 클릭 하면 해당 게시판으로 이동 하게 됩니다.
물론 Admin 권한으로 이동 하는 것입니다. 이렇게 되면 모든 게시물을 삭제 할 수 있는 권한이 주어 집니다.
이런 방법으로 각각의 계정 서비스를 할 경우 해당 아이디별 권한을 설정 할 수 있는 것입니다.
그럼 소스를 보면서 경매 Admin과 자료실 Admin 그리고 데이터 베이스 유틸리트 등을 설명하겠습니다.

17.2 db_func_all.php 파일

    <?php
    //////////////////////////////////////////////////
    //
    //    일자 : 2000.3.14 pm 5
    //   작성자: skycry (hong il)
    //
    //
    //   method : 데이타 베이스 utility ^^;
    //            그리고, Admin function
    //////////////////////////////////////////////////
    //먼저 소스의 각각의 함수를 설명 할 때 두서 없는 부분이 조금 있을 것입니다.
     각각의 함수 부분은 일부 영역들 이므로 이들은 조합하는 db_view.php를 볼 때 세심히 봐주기 바랍니다.//

    $connect = mysql_connect('localhost','root','gksmf444');
    // 데이터 베이스 접속 부분 입니다.// 
    ?>

    <?php
    //아래 함수는 화면을 먼저 보면서 설명 하겠습니다. 그림 17-1에서 Db Edit를 클릭하면 링크 되는 화면 입니다.//

그림. 17-5
    function main($page,$connect,$select,$dbs,$tableput,$root)
    {

    // 이 함수는 메인 화면 이지만 각각의 인자를 받으면서 다른 화면을 출력 합니다.
       즉 하나의 함수에 다양한 화면을 구성 한 것 입니다. 보다 전문적인 함수는 아니지만
       이런 방법으로 하나씩 만들면서 늘어 가는 것입니다. 위 인자 중 $select 가 tables ,
       field 중 하나를 받음에 따라 화면의 출력이 달라 집니다.


       if($select == tables)
       {

         mysql_select_db($dbs,$connect);
         $ally = mysql_query("show tables ",$connect);
         $t = "Table($dbs Db) hong il mansei~!";
         $link = "<a href=db_view.php?chanl=create_table&dbs=$dbs>";
         $linkdel = "<a href=db_view.php?chanl=dbdel&dbs=$dbs>";
       }
       // 위 조건일 경우 데이터 베이스 선택과 해당 데이터 베이스의 테이블을 쿼리하고
          테이블 화면의 메뉴 링크를 만들어 줍니다.//


       if(!$select)
       {
         $ally = mysql_query("show databases ",$connect);
         $t = "Database Names hong il mansei~!" ;
         $link = "<a href =db_view.php?chanl=create_db>";
       }
       //만약 $select 인자가 없다면 데이터 베이스 유틸 화면의 메인 부분을 보여 줍니다.//


       if($select == field)
       {
         mysql_select_db($dbs,$connect);
         $ally = mysql_query("describe $tableput " , $connect);
         $link1 = "<b><a href =db_view.php?chanl=main&select=tables&dbs=$dbs>
         ($dbs Db)</b></a> ";
         $link2 = "<b>($tableput Table)</b>";
       }
       //위 조건일 경우 해당 데이터 베이스를 선택 하고 해당 테이블을 쿼리 합니다.
         그리고, 해당 테이블의 필드 정보 화면의 메뉴들을 링크 합니다.//


       $t_num=mysql_num_rows($ally);
       $p_dip = 4 ;//페이지당 글 수
       $p_page =4  ;//페이지당 페이지 링크수
       $p_pagex = ceil($p_page / 2) ;
       $t_page = ceil($t_num / $p_dip) ;


       // 위 항목들은 게시판 스크립트 의 설명과 동일 합니다.//


       if(!$page)
       {
         $page = 1;
       }
       if( $page <= $p_pagex )
       {
         $p_start = $p_pagex + 1 ;
       }
       else
       {
         $p_start = $page + 1;
       }

           
       $pt_page = ceil($p_start - $p_pagex) ;
       $next_p = $page + 1 ;
       $pre_p = $page - 1 ;
       $start_num = ($t_num - ($page * $p_dip))+($p_dip-1) ;
       // 여기 까지 부분 역시 게시판의 글의 출력물 수와 패이지 링크 부분 입니다.//

그림. 17-6
    if($select == field)
    {// 만약 위 조건이면 해당 데이터 베이스의 테이블에서 각 필드 정보 화면의 제목
        부분을 출력 합니다. 그림. 17-6을 참고 하세요.//


      echo("
      <html>
      <title>
      main_view html
      </title>
      <body bgcolor=black>
      <center>
      <img src=skyt1.jpg border=0>
      <br>
      <table border=0 cellspacing=2 cellpadding=2 width=700 >
      <tr>
      <th bgcolor=white colspan=7 align=left>
      <font style='font-size:12px;font-style:italic;color:#blue'>
      <b>$t_page / $page </b></font></th>
      // 페이지 표시 부분 입니다.//


      </tr>
      <tr>
      <td bgcolor=#808080 width=150>0
      <font style='font-size:13px;font-style:italic;color:#fffff0'>
      <b>Field</b></font></td>
      <td bgcolor=#808080 width=200 align=center>
      <font style='font-size:13px;font-style:italic;color:#fffff0'>
      <b>Type</b></font></td>
      <td bgcolor=#808080 width=50 align=center>
      <font style='font-size:13px;font-style:italic;color:#fffff0'>
      <b>Null</b></font></td>
      <td bgcolor=#808080 align=center>
      <font style='font-size:13px;font-style:italic;color:#fffff0'>
      <b>Key</b></font></td>
      <td bgcolor=#808080 width=50 align=center>
      <font style='font-size:13px;font-style:italic;color:#fffff0'>
      <b>Default</b></font></td>
      <td bgcolor=#808080 width=150 align=center>
      <font style='font-size:13px;font-style:italic;color:#fffff0'>
      <b>Extra</b></font></td>
      </tr>
      ");
    }
    else
    {//해당 테이블의 필드 정보 항목이 아니면 나머지 화면은 아래 코드를 출력 합니다.//
      echo("
      <html>
      <title>
      main_view html
      </title>
      <body bgcolor=black>
      <center>
      <img src=skyt1.jpg border=0>
      <br>
      <table border=0 cellspacing=2 cellpadding=2 width=500 >
      <tr>
      <th bgcolor=white align=left>
      <font style='font-size:12px;font-style:italic;color:#blue'>
      <b>$t_page / $page </b></font></th>
      </tr>
      <tr>
      <td bgcolor=#808080 width=450>
      <font style='font-size:13px;font-style:italic;color:#fffff0'>
      <b>$t</b></font></td></tr>
      ");
    }


    if(!$t_num)
    {//해당 데이터 베이스에 내용이 없을 경우//
      echo ("
      <tr>
      <th bgcolor=black colspan=6>
      <font style='font-size:13px;font-style:italic;color:#fffff0'>
      <b>등록된 데이타,테이블이 엄스요...  ^^;</b></font></th>
      </tr>
      </center>
      </table>
      </html>
      ");
    }
    else
    {// 해당 데이터 베이스에 내용이 있을 경우//
      for($pd=$start_num ; $pd > $start_num-$p_dip ; $pd--)
      {
        if($pd >= 0 )
        {
          mysql_data_seek($ally,$pd);
          $db=mysql_fetch_array($ally);

          // 이 부분은 다른 게시판의 부분과 같습니다 14장 15장 참조//

          if(!$select)
          {//데이터 베이스 유틸의 메인 화면 출력 입니다.//
            echo("
            <tr>
            <td bgcolor=black>
            <a href ='db_view.php?chanl=main&dbs=$db[Database]&select=tables'>
            <font style='font-size:13px;font-style:italic;color:#fffff0'>
            <b>$db[Database]</b></font></a></td>
            ");
          }


          if($select == tables)
          {//해당 데이터 베이스의 테이블 항목을 출력합니다.//
            echo("
            <tr>
            <td bgcolor=black>
            <a href ='db_view.php?chanl=main&dbs=$dbs&select=field&tableput=$db[0]'>
            <font style='font-size:13px;font-style:italic;color:#fffff0'>
            <b>$db[0]</b></font></a></td>
            ");
          }
          // if($select == tables) 항목의 경우 이 소스에서는 아래 그림. 17-7을 참고 하세요//             

그림. 17-7
    if($select == field)
    {//해당 데이터 베이스 테이블의 필드 정보를 출력 합니다.//
      echo("
      <tr>
      <td bgcolor=black>
      <font style='font-size:13px;font-style:italic;color:#fffff0'>
      <b>$db[Field]</b></font></a></td>
      <td bgcolor=black>
      <font style='font-size:13px;font-style:italic;color:#fffff0'>
      <b>$db[Type]</b></font></a></td>
      <td bgcolor=black>
      <font style='font-size:13px;font-style:italic;color:#fffff0'>
      <b>$db[Null]</b></font></a></td>
      <td bgcolor=black>
      <font style='font-size:13px;font-style:italic;color:#fffff0'>
      <b>$db[Key]</b></font></a></td>
      <td bgcolor=black>
      <font style='font-size:13px;font-style:italic;color:#fffff0'>
      <b>$db[Default]</b></font></a></td>
      <td bgcolor=black>
      <font style='font-size:13px;font-style:italic;color:#fffff0'>
      <b>$db[Extra]</b></font></a></td>
      ");
    }
    }
    }


    echo("
    <tr>
    <td bgcolor=black colspan=7>&nbsp;</td>
    </tr>
    <tr>
    <td bgcolor=black colspan=7 align=center>
    ");


    if($page == 1)
    {
      echo ("
      <font style='font-size:12px;font-style:italic;color:#fffff0'>first </font> ");
    }
    else
    {
      if($select == tables)
      {// 해당 데이터 베이스의 테이블 항목 출력 시에 페이지 링크 입니다.//
        echo ("
        <a href =db_view.php?chanl=main&page=$pre_p&dbs=$dbs&select=tables>
        <font style='font-size:12px;font-style:italic;color:#fffff0'><< </font></a>");
      }
      if(!$select)
      {//해당 데이터 베이스 화면의 페이지 링크 입니다.//
        echo ("
        <a href =db_view.php?chanl=main&page=$pre_p>
        <font style='font-size:12px;font-style:italic;color:#fffff0'><< </font></a>");
      }
      if($select == field)
      {//해당 데이터 베이스 테이블의 필드 정보 화면의 페이지 링크 입니다.//
        echo ("
        <a href =db_view.php?chanl=main&page=$pre_p&dbs=
        $dbs&select=field&tableput=$tableput>
        <font style='font-size:12px;font-style:italic;color:#fffff0'><< </font></a>");
      }
    }


    for($pp=$pt_page ; $pp < $p_page+$pt_page ; $pp++)
    {
      if($pp == $page )
      {
        echo ("
        <font style='font-size:13px;font-style:italic;color:red'>
        $pp</font>
        ");
      }
      else
      {
        if($pp > 0  && $pp <= $t_page)
        {
          if(!$select)
          {
            echo("
            <a href =db_view.php?chanl=main&page=$pp>
            <font style='font-size:12px;font-style:italic;color:#808080'>[$pp]</font></a>
            ");
          }
          if($select == tables)
          {
            echo("
            <a href =db_view.php?chanl=main&page=$pp&dbs=$dbs&select=tables>
            <font style='font-size:12px;font-style:italic;color:#808080'>[$pp]</font></a>
            ");
          }
          if($select == field)
          {
            echo("
            <a href =db_view.php?chanl=main&page=$pp&dbs=
            $dbs&select=field&tableput=$tableput>
            <font style='font-size:12px;font-style:italic;color:#808080'>[$pp]</font></a>
            ");
            // 이 부분 역시 위 각 화면 마다의 링크 부분들 입니다.//
          }
        }
      }
    }
    // 이렇게 모든 게시판 형태의 스크립트는 한가지 방법에 다른 방법을 접목 함으로서
       다양한 형태의 스크립트를 생성 할 수 있습니다. 나머지 메인 화면 함수 부분 역시
       지금 까지 보아온 게시판 소스와 유사 합니다. 경매나 자료실 게시판의 소스를 이해
       했다면 이 부분은 쉽게 이해가 될 것입니다.//


        if($page == $t_page)
        {
          echo ("
          <font style='font-size:12px;font-style:italic;color:#fffff0'> last^^ </font>
          ");
        }
        else
        {
          if($select == tables)
          {
            echo ("
            <a href =db_view.php?chanl=main&page=$next_p&dbs=$dbs&select=tables>
            <font style='font-size:12px;font-style:italic;color:#fffff0'>pre>></font></a>
            ");
          }
          if(!$select)
          {
            echo ("
            <a href =db_view.php?chanl=main&page=$next_p>
            <font style='font-size:12px;font-style:italic;color:#fffff0'>pre>></font></a>");
          }
          if($select == field)
          {
            echo ("
            <a href =db_view.php?chanl=main&page=$next_p&dbs=
            $dbs&select=field&tableput=$tableput>
            <font style='font-size:12px;font-style:italic;color:#fffff0'>pre>></font></a>
            ");
          }
        }
      }


      if($select != field)
      {
        $td = "<td bgcolor=black width=100>
        $link
        // 이 함수 제일 처음 선언 했던 변수를 불러 오는 것입니다.
        $select가 위 조건일 경우 링크 입니다.//


        <font style='font-size:13px;font-style:italic;color:#ffd700'>
        <b>New </b></font></a></td>";


        if($select == tables)
        {
          $td = "<td bgcolor=black width=100>
          $link
          <font style='font-size:13px;font-style:italic;color:#ffd700'>
          <b>New </b></font></a></td>
          <td bgcolor=black width=100>
          $linkdel
          <font style='font-size:13px;font-style:italic;color:#ffd700'>
          <b>Db Del </b></font></a></td>";
        }
      }
      else
      {
        $td =  "<td bgcolor=black width=300>
        <font style='font-size:13px;font-style:italic;color:red'>
        $link1 > $link2
        // 함수 처음 부분의 변수 선언을 불러 오는 부분 입니다. 역시
           해당 테이블의 필드 정보 화면에서 전의 화면으로 링크 하는 부분
           입니다. 그림. 17-6 참조//


        </font></td>
        <td bgcolor=black width=100>
        <a href =db_view.php?chanl=tabledel&dbs=$dbs&tableput=$tableput>
        <font style='font-size:13px;font-style:italic;color:#ffd700'>
        Del Table
        </font></a></td>";
      }
          
      echo("
      </td>
      </tr>
      </center>
      </table>
      <br>
      <center>
      <table border=0 cellspacing=2 cellpadding=2 width=500 >
      <tr>
      $td
      <td bgcolor=black width=100>
      <a href = test.php>
      <font style='font-size:13px;font-style:italic;color:#ffd700'>
      <b>Home re</b></font></a></td>


      <td bgcolor=black width=100>
      <form method=post action=db_view.php>
      <select name=chanl>
      <option value=file_view selected>File edit
      <option value=title_view>Title edit
      <option value=main>Db edit
      </select>
      // 각 화면에 존재 하는 게시판 이동 풀다운 메뉴 항목 입니다.//
      </td>
      <td>
      <input type=submit value=Go.!>
      </td>
      </form>
      ");


      if($tableput)
      {// 위 인자가 존재 하면 해당 테이블 필드 정보 화면 이므로 아래의 메뉴를 더
          화면에 출력해 줍니다. 다음 코드는 alter 쿼리 명령어를 직접 입력 하는 메뉴 입
          니다. (그림. 17-6 을 참고 하세요.) 이러한 설정은 mysql의 모든 명령어를 나열
          하는 등의 여러 가지 사용자 중심의 인터페이스로 디자인 가능 합니다. 가령 필드
          정보를 파일로 저장 한다든지 테이블 정보를 담은 파일을 불러와 바로 입력 하는
          기능 생각하기에 따라 여러 다양한 형식이 존재 합니다. 여러분들이 더 새로운 기능
          을 추가 해서 만들어 보면 재미 있을 것입니다.//


        echo("
        </tr>
        </table>
        <br><br>
        <table border=0 cellspacing=2 cellpadding=2 width=500 >
        <tr>
        <th bgcolor=gray colspan=7 align=left>
        <font style='font-size:12px;font-style:italic;color:white'>
        <b>Attribute Add/Del insert Attribute Name</b></font></th>
        </tr>
        <tr>
        <td bgcolor=black width=200>
        <font style='font-size:13px;font-style:italic;color:blue'>
        <b>Alter Table $tableput</b></font></td>
        <td bgcolor=black width=50>
        <font style='font-size:13px;font-style:italic;color:#ffd700'>
        <form method=post action=db_view.php>
        <input type = hidden name=tn value=$tableput>
        <input type = hidden name=chanl value=e_field>
        <input type = hidden name=dbs value=$dbs>
        <select name=tct>
        <option value=add selected>Add
        <option value=drop >Del
        </select>
        //해당 테이블 명과 데이터 베이스명 그리고 alter 명령인 add ,drop 중 택해서
        해당 루틴으로 전달 하는 폼 문 입니다.//


        </td>
        <td bgcolor=black><font style='font-size:13px;font-style:italic;color:#ffd700'>
        <input type = text name='tablequ' size=14>
        // 해당 테이블의 필드 정보를 입력 하는 부분 입니다.//


        </font></td>
        <td>
        <input type=submit value=Go.!>
        //Go.! 버튼을 생성해 인자들을 전달 합니다.//


        </td>
        </form>
        ");
      }


      echo("
      </tr>
      </table>
      </center>
      </html>
      ");
    } //main( ) 함수의 끝입니다.//

    //경매 나 자료실 게시판과 달리 Db 유틸리티 메인 화면의 경우 한 함수에서 여러
      화면(데이터 베이스 , 테이블 , 테이블 필드정보)을 표현 했습니다. 이렇듯 생각 하기
      에 따라 여러 다양한 방법이 존재 합니다. 무엇보다 중요한 부분은 이러한 작업을 할 때
      데이터 베이스와의 연결 설정 입니다. 필자의 경우 아직 미숙한 점이 많습니다. 스크립트
      작성시에는 이 부분을 꼭 신경 써서 작성 하기 바랍니다.//


    function create_db1()
    {// 데이터 베이스 유틸의 메인 화면에서(그림. 17-5) 에서 New 를 클릭 할 경우 링크되는 부분 입니다. //

그림. 17-8
    echo("
    <html>
    <title>
    creat_db html
    </title>
    <body bgcolor=black>
    <center>
    <img src=skyt1.jpg border=0>
    <br>
    <form method=post action=db_view.php>
    <input type=hidden name=chanl value=create_db2>
    <table border=0 cellspacing=2 cellpadding=2  width=700 >
    <tr>
    <td bgcolor=#808080 width=74><font style='font-size:13px;font-style:italic;color:#fffff0'>
    <b>~Db Name</b></font></td>
    <td bgcolor=black width=100><font style='font-size:13px;font-style:italic;color:#fffff0'>
    <input type=text name=dbname size=10></font></td>
    //새로이 만들 데이터 베이스 이름을 적어주는 부분 입니다.//


    <td bgcolor=black><font style='font-size:13px;font-style:italic;color:#fffff0'>
    <input type=submit value=만들기>
    //만들기 버튼을 생성 합니다.//


    </font></td>
    </table>
    </tr>
    </form>
    </center>
    </body>
    </html>
    ");
    }

그림. 17-9
    //위 그림은 경매 게시판에서 Admin 으로 로그온 했거나 Db 유틸리티의 이동 메뉴로 이동
    했을 경우의 경매 Admin 부분 입니다.//
    //그림. 17-9 에서 Create 경매를 클릭 했을 경우 링크 화면과 함수를 보겠습니다.

그림. 17-10
   // 그림. 17-10을 보면 게시판에 사용될 테이블 이름을 적는 란과 게시판의 이름을 적는
    부분이 존재 합니다. 여기서 여러분들이 참고 할 부분은 테이블 이름은 데이터 베이스에
    생성하는 부분 이므로 영문 표기를 해야 되고 붙여 써야 합니다. 이 부분의 에러 화면은
    만들지 않았습니다. 하지만 간단한 자바를 이용한 방법이 있으므로 추가 하면 좋을 것입
    니다. 테이블 이름은 적어 보내면 두개의 테이블을 자동 생성 합니다. 아래 create_title()
    함수와 그림 17-10을 비교 해보기 바랍니다.//


    function create_title()
    {

      echo("
      <html>
      <title>
      creat_db html
      </title>
      <body bgcolor=black>
      <center>
      <img src=skyt1.jpg border=0>
      <br>
      <form method=post action=db_view.php>
      <input type=hidden name=chanl value=create_title2>
      <table border=0 cellspacing=2 cellpadding=2  width=700 >
      <tr>
      <td bgcolor=#808080 width=74><font style='font-size:13px;font-style:italic;color:#fffff0'>
      <b>~Table Name</b></font></td>
      <td bgcolor=black width=100><font style='font-size:13px;font-style:italic;color:#fffff0'>
      <input type=text name=ctitle size=10></font></td>
      //새로운 경매 게시판에 사용할 테이블 이름을 적는 부분 입니다.//


      </tr>
      <tr>
      <td bgcolor=#808080 width=74><font style='font-size:13px;font-style:italic;color:#fffff0'>
      <b>~게시판 Name</b></font></td>
      <td bgcolor=black width=100><font style='font-size:13px;font-style:italic;color:#fffff0'>
      <input type=text name=title size=10></font></td>
      // 새로운 경매 게시판의 이름을 적는 부분 입니다.//


      <td bgcolor=black><font style='font-size:13px;font-style:italic;color:#fffff0'>
      <input type=submit value=만들기>
      // 만들기 버튼을 생성 합니다.//
      </font></td>
      </tr>
      </table>
      </form>
      </center>
      </body>
      </html>
      ");
    }// create_title() 의 끝입니다.//

그림. 17-11
    // 그림 17-1은 그림 17-1에서 Create 자료실을 클릭 했을 경우 링크 입니다.//



    function create_file()
    {// 이 함수 역시 새로운 자료실 게시판을 생성하는 부분 입니다. 그림. 17-11을 참고 하세요//


      echo("
      <html>
      <title>
      creat_db html
      </title>
      <body bgcolor=black>
      <center>
      <img src=skyt1.jpg border=0>
      <br>
      <form method=post action=db_view.php>
      <input type=hidden name=chanl value=create_title3>
      <table border=0 cellspacing=2 cellpadding=2  width=700 >
      <tr>
      <td bgcolor=#808080 width=74>
      <font style='font-size:13px;font-style:italic;color:#fffff0'>
      <b>~Table Name</b></font></td>
      <td bgcolor=black width=100>
      <font style='font-size:13px;font-style:italic;color:#fffff0'>
      <input type=text name=ctitle size=10></font></td>
      // 새로 만들 자료실 게시판에 사용할 테이블 이름을 적는 부분 입니다.//
      </tr>
      <tr>
      <td bgcolor=#808080 width=74><font style='font-size:13px;font-style:italic;color:#fffff0'>
      <b>~자료실 Name</b></font></td>
      <td bgcolor=black width=100><font style='font-size:13px;font-style:italic;color:#fffff0'>
      <input type=text name=title size=10></font></td>
      //해당 자료실 이름을 적는 부분 입니다.//
      <td bgcolor=black><font style='font-size:13px;font-style:italic;color:#fffff0'>
      <input type=submit value=만들기>
      </font></td>
      </tr>
      </table>
      </form>
      </center>
      </body>
      </html>
      ");
    }// create_file() 의 끝입니다.//


    function title_view($page,$connect,$s_db)
    {// 이 함수는 경매 게시판의 메인 화면 출력 부분 입니다.(그림. 17-9) 이렇게 경매 메인
     화면과 자료실 메인 화면을 따로 할 수도 있겠지만 보다 부피를 줄인다면 앞의 데이터
     베이스 유틸의 화면 다중화처럼 만들 수도 있겠죠. 처음 부분은 지금 까지 봐온 메인 화
     면 부분과 동일 합니다. 다만 여기서는 데이터 베이스 연결 부분이 함수 안에 존재
     합니다//


      mysql_select_db(adminp,$connect);
      $ally = mysql_query("select no,title,mview,view,sum,wdate
      from admin  order by no ",$connect);
      $t_num=mysql_num_rows($ally);
      $p_dip = 1 ;//페이지당 글 수


      $p_page =4  ;//페이지당 페이지 링크수
      $p_pagex = ceil($p_page / 2) ;
      $t_page = ceil($t_num / $p_dip) ;


      if(!$page)
      {
        $page = 1;
      }
      if( $page <= $p_pagex )
      {
        $p_start = $p_pagex + 1 ;
      }
      else
      {
        $p_start = $page + 1;
      }


      $pt_page = ceil($p_start - $p_pagex) ;
      $next_p = $page + 1 ;
      $pre_p = $page - 1 ;
      $start_num = ($t_num - ($page * $p_dip))+($p_dip-1) ;


      echo("// 메인 화면 타이틀 부분 입니다.//
      <html>
      <title>
      main_view html
      </title>
      <body bgcolor=black>
      <center>
      <img src=skyt1.jpg border=0>
      <br>
      <form method=post action=db_view.php>
      <input type=hidden name=chanl value=del_title>
      <table border=0 cellspacing=2 cellpadding=2 width=700 >
      <tr>
      <th bgcolor=white colspan=7 align=left>
      <font style='font-size:12px;font-style:italic;color:#blue'>
      <b>$t_page / $page </b></font></th>
      </tr>
      <tr>
      <td bgcolor=#808080><font style='font-size:13px;font-style:italic;color:#fffff0'>
      <b>No</b></font></td>
      <td bgcolor=#808080 width=400>
      <font style='font-size:13px;font-style:italic;color:#fffff0'>
      <b>Title</b></font></td>
      <td bgcolor=#808080 width=75 align=center>
      <font style='font-size:13px;font-style:italic;color:#fffff0'>
      <b>MView</b></font></td>
      <td bgcolor=#808080 width=75 align=center>
      <font style='font-size:13px;font-style:italic;color:#fffff0'>
      <b>View</b></font></td>
      <td bgcolor=#808080 width=50 align=center>
      <font style='font-size:13px;font-style:italic;color:#fffff0'>
      <b>sum</b></font></td>
      <td bgcolor=#808080 width=150 align=center>
      <font style='font-size:13px;font-style:italic;color:#fffff0'>
      <b>date</b></font></td>
      <td bgcolor=#808080 width=50 align=center>
      <font style='font-size:13px;font-style:italic;color:#fffff0'>
      <b>check</b></font></td>
      </tr>
      ");


      if(!$t_num)
      {// 해당 데이터 베이스 테이블에 항목들이 없을 경우 입니다.//
        echo ("
        <tr>
        <th bgcolor=black colspan=6>
        <font style='font-size:13px;font-style:italic;color:#fffff0'>
        <b>등록된 글이 엄스요...  ^^;</b></font></th>
        </tr>
        </center>
        </table>
        </html>
        ");
      }
      else
      {//항목이 존재할 경우 입니다.//
        for($pd=$start_num ; $pd > $start_num-$p_dip ; $pd--)
        {

          if($pd >= 0 )
          {
            mysql_data_seek($ally,$pd);
            $put=mysql_fetch_array($ally);


            echo("
            <tr>
            <td bgcolor=black>
            <font style='font-size:13px;font-style:italic;color:blue'>
            $put[no]</font></td>
            //메인 화면 게시판 번호 출력 부분 입니다.//


            <td bgcolor=black>
            <a href =main_view.php?chanl=main_view&f=$put[mview]&f2=$put[view]>
            <font style='font-size:13px;font-style:italic;color:#fffff0'>
            <b>$put[title]</b></font></a></td>
            <td bgcolor=black align=center>
            <font style='font-size:13px;font-style:italic;color:red'>
            <b>$put[mview]</b></font></td>
            <td bgcolor=black align=center>
            <font style='font-size:13px;font-style:italic;color:red'>
            <b>$put[view]</b></font></td>
            <td bgcolor=black align=center>
            <font style='font-size:13px;font-style:italic;color:#fffff0'>
            <b>$put[sum]</b></font></td>
            <td bgcolor=black align=center>
            <font style='font-size:13px;font-style:italic;color:blue'>
            <b>$put[wdate]</b></font></td>
            <td bgcolor=black align=center>
            <input type=radio name=s value=$put[mview]>
            <input type=hidden name=x value=$put[view]>
            </td>
            </tr>
            ");
          }
        }


        echo("
        <tr>
        <td bgcolor=black colspan=7>&nbsp;</td>
        </tr>
        <tr>
        <td bgcolor=black colspan=7 align=center>
        ");


        if($page == 1)
        {
          echo ("
          <font style='font-size:12px;font-style:italic;color:#fffff0'>first </font> ");
        }
        else
        {
          echo ("
          <a href =db_view.php?chanl=title_view&page=$pre_p>
          <font style='font-size:12px;font-style:italic;color:#fffff0'><< </font></a>");
        }


        for($pp=$pt_page ; $pp < $p_page+$pt_page ; $pp++)
        {

          if($pp == $page )
          {
            echo ("
            <font style='font-size:13px;font-style:italic;color:red'>
            $pp</font>
            ");
          }
          else
          {
            if($pp > 0  && $pp <= $t_page)
            {
              echo("
              <a href =db_view.php?chanl=title_view&page=$pp>
              <font style='font-size:12px;font-style:italic;color:#808080'>
              [$pp]</font></a>
              ");
            }
          }
        }//for의 끝입니다.//

                
        if($page == $t_page)
        {
          echo ("
          <font style='font-size:12px;font-style:italic;color:#fffff0'> last^^ </font>");
        }
        else
        {
          echo ("
          <a href =db_view.php?chanl=title_view&page=$next_p>
          <font style='font-size:12px;font-style:italic;color:#fffff0'>pre>></font></a>");
        }
      }//else의 끝입니다.//


      echo("
      </td>
      </tr>
      </center>
      </table>
      <br>
      <center>
      <table border=0 cellspacing=2 cellpadding=2 width=700 >
      <tr>
      <td bgcolor=black width=100>
      <a href =db_view.php?chanl=create_title>
      <font style='font-size:13px;font-style:italic;color:#ffd700'>
      <b>Creat 경매</b></font></a></td>


      <td bgcolor=black width=100>
      <a href =db_view.php?chanl=main>
      <font style='font-size:13px;font-style:italic;color:#ffd700'>
      <b>Db Edit</b></font></a></td>
      <td bgcolor=black width=100>
      <input type=hidden name=put value=$start_num>
      <input type=submit value=Del>
      </td>
      </tr>
      </table>
      </form>
      </center>
      </html>
      ");
    }// title_view( ) 의 끝입니다.//

그림. 17-12
    function logon($file)
    {  // 이 부분은 각 메인 화면에서 Admin으로 로그온 할 경우 화면 입니다.

       그림. 17-12 를 참고 하세요.//

      echo("
      <html>
      <title>
      passw view
      </title>
      <body bgcolor=black>
      <center>
      <img src=skyt1.jpg border=0>
      <br>
      <form method=post action=logon.php>
      //여기 입력한 파일은 logon.php 파일로 인자들이 전달 되어 집니다. Logon.php파일
      에 대해서는 뒤에서 설명 하겠습니다.//
      <input type=hidden name=chanl value=$file>
      <table border=0 cellspacing=2 cellpadding=2  width=700 >
      <tr>
      <td bgcolor=#808080 align=center width=74>
      <font style='font-size:13px;font-style:italic;color:#blue'>
      <b>admin login</b></font></td>
      </tr>
      <tr>
      <td bgcolor=#808080 width=74><font style='font-size:13px;font-style:italic;color:#fffff0'>
      <b>~Host</b></font></td>
      <td bgcolor=black width=100><font style='font-size:13px;font-style:italic;color:#fffff0'>
      <input type=text name=host size=10></font></td>
      //mysql에 등록 되어 있는 계정의 host 이름을 적어 줍니다.//


      </tr>
      <tr>
      <td bgcolor=#808080 width=74><font style='font-size:13px;font-style:italic;color:#fffff0'>
      <b>~Name</b></font></td>
      fffff0'>
      <b>~Name</b></font></td>
      <td bgcolor=black width=100><font style='font-size:13px;font-style:italic;color:#fffff0'>
      <input type=text name=id size=10></font></td>
      //mysql 접속 계정을 입력 합니다.//


      </tr>
      <tr>
      <td bgcolor=#808080 width=74><font style='font-size:13px;font-style:italic;color:#fffff0'>
      <b>~passw</b></font></td>
      <td bgcolor=black width=100><font style='font-size:13px;font-style:italic;color:#fffff0'>
      <input type=password name=passw size=10></font></td>
      //mysql 접속 계정의 패스워드를 입력 합니다.//


      <td bgcolor=black><font style='font-size:13px;font-style:italic;color:#fffff0'>
      <input type=submit value=입력>
      </font></td>
      </tr>
      </table>
      </form>
      </center>
      </body>
      </html>
      ");
    }// logon($file) 의 끝입니다.//


    function file_view($page,$connect,$s_db)
    {// 자료실 게시판의 Admin(그림 17-1) 부분 입니다. 앞의 다른 메인 화면 부분과
        같은 부분 이므로 간략한 설명만 하겠습니다.//

      mysql_select_db(adminp,$connect);
      $ally = mysql_query("select no,title,mview,view,sum,wdate
      from file  order by no ",$connect);
      $t_num=mysql_num_rows($ally);
      $p_dip = 3 ;//페이지당 글 수
      $p_page =4  ;//페이지당 페이지 링크수
      $p_pagex = ceil($p_page / 2) ;
      $t_page = ceil($t_num / $p_dip) ;


      if(!$page)
      {
        $page = 1;
      }
      if( $page <= $p_pagex )
      {
        $p_start = $p_pagex + 1 ;
      }
      else
      {
        $p_start = $page + 1;
      }


      $pt_page = ceil($p_start - $p_pagex) ;
      $next_p = $page + 1 ;
      $pre_p = $page - 1 ;
      $start_num = ($t_num - ($page * $p_dip))+($p_dip-1) ;


      echo("
      <html>
      <title>
      main_view html
      </title>
      <body bgcolor=black>
      <center>
      <img src=skyt1.jpg border=0>
      <br>
      <form method=post action=db_view.php>
      <input type=hidden name=chanl value=del_title>
      <input type=hidden name=table value=file>
      <table border=0 cellspacing=2 cellpadding=2 width=700 >
      <tr>
      <th bgcolor=white colspan=7 align=left>
      <font style='font-size:12px;font-style:italic;color:#blue'>
      <b>$t_page / $page </b></font></th>
      </tr>
      <tr>
      <td bgcolor=#808080><font style='font-size:13px;font-style:italic;color:#fffff0'>
      <b>No</b></font></td>
      <td bgcolor=#808080 width=400>
      <font style='font-size:13px;font-style:italic;color:#fffff0'>
      <b>Title</b></font></td>
      <td bgcolor=#808080 width=75 align=center>
      <font style='font-size:13px;font-style:italic;color:#fffff0'>
      <b>MView</b></font></td>
      <td bgcolor=#808080 width=75 align=center>
      <font style='font-size:13px;font-style:italic;color:#fffff0'>
      <b>View</b></font></td>
      <td bgcolor=#808080 width=50 align=center>
      <font style='font-size:13px;font-style:italic;color:#fffff0'>
      <b>sum</b></font></td>
      <td bgcolor=#808080 width=150 align=center>
      <font style='font-size:13px;font-style:italic;color:#fffff0'>
      <b>date</b></font></td>
      <td bgcolor=#808080 width=50 align=center>
      <font style='font-size:13px;font-style:italic;color:#fffff0'>
      <b>check</b></font></td>
      </tr>
      ");


      if(!$t_num)
      {
        echo ("
        <tr>
        <th bgcolor=black colspan=6>
        <font style='font-size:13px;font-style:italic;color:#fffff0'>
        <b>등록된 글이 엄스요...  ^^;</b></font></th>
        </tr>
        </center>
        </table>
        </html>
        ");
      }
      else
      {
        for($pd=$start_num ; $pd > $start_num-$p_dip ; $pd--)
        {

          if($pd >= 0 )
          {
            mysql_data_seek($ally,$pd);
            $put=mysql_fetch_array($ally);


            echo("
            <tr>
            <td bgcolor=black>
            <font style='font-size:13px;font-style:italic;color:blue'>
            $put[no]</font></td>
            <td bgcolor=black>
            <a href =m.php?chanl=main_view&f=$put[mview]&f2=$put[view]>
            <font style='font-size:13px;font-style:italic;color:#fffff0'>
            <b>$put[title]</b></font></a></td>


            <td bgcolor=black align=center>
            <font style='font-size:13px;font-style:italic;color:red'>
            <b>$put[mview]</b></font></td>


            <td bgcolor=black align=center>
            <font style='font-size:13px;font-style:italic;color:red'>
            <b>$put[view]</b></font></td>


            <td bgcolor=black align=center>
            <font style='font-size:13px;font-style:italic;color:#fffff0'>
            <b>$put[sum]</b></font></td>


            <td bgcolor=black align=center>
            <font style='font-size:13px;font-style:italic;color:blue'>
            <b>$put[wdate]</b></font></td>


            <td bgcolor=black align=center>
            <input type=radio name=s value=$put[mview]>
            <input type=hidden name=x value=$put[view]>


            </td>
            </tr>
            ");
          }
        }


        echo("
        <tr>
        <td bgcolor=black colspan=7>&nbsp;</td>
        </tr>
        <tr>
        <td bgcolor=black colspan=7 align=center>
        ");


        if($page == 1)
        {
          echo ("
          <font style='font-size:12px;font-style:italic;color:#fffff0'>first </font> ");
        }
        else
        {
          echo ("
          <a href =db_view.php?chanl=file_view&page=$pre_p>
          <font style='font-size:12px;font-style:italic;color:#fffff0'><< </font></a>");
        }


        for($pp=$pt_page ; $pp < $p_page+$pt_page ; $pp++)
        {

          if($pp == $page )
          {
            echo ("
            <font style='font-size:13px;font-style:italic;color:red'>
            $pp</font>  ");
          }
          else
          {
            if($pp > 0  && $pp <= $t_page)
            {
              echo("
              <a href =db_view.php?chanl=file_view&page=$pp>
              <font style='font-size:12px;font-style:italic;color:#808080'>
              [$pp]</font></a>");
            }
          }
        }


        if($page == $t_page)
        {

          echo ("
          <font style='font-size:12px;font-style:italic;color:#fffff0'> last^^ </font>");
        }
        else
        {
          echo ("
          <a href =db_view.php?chanl=file_view&page=$next_p>
          <font style='font-size:12px;font-style:italic;color:#fffff0'>pre>></font></a>");
        }
      }


      echo("
      </td>
      </tr>
      </center>
      </table>
      <br>
      <center>
      <table border=0 cellspacing=2 cellpadding=2 width=700 >
      <tr>


      <td bgcolor=black width=100>
      <a href =db_view.php?chanl=create_file>
      <font style='font-size:13px;font-style:italic;color:#ffd700'>
      <b>Creat 자료실</b></font></a></td>


      <td bgcolor=black width=100>
      <a href =db_view.php?chanl=main>
      <font style='font-size:13px;font-style:italic;color:#ffd700'>
      <b>Db Edit</b></font></a></td>


      <td bgcolor=black width=100>
      <input type=hidden name=put value=$start_num>
      <input type=submit value=Del>
      </td>
      </tr>
      </table>
      </form>
      </center>
      </html>
      ");
    }

    ?>//db_func_all.php 의 끝입니다.//



다음은 logon.php 파일에 대해 설명하겠습니다. 그림. 17-12 의 전달인자를 받아 쿠키를 생성하는 부분입니다.

17.3 logon.php 파일

먼저 해당 쿠키를 생성 하는 방법 이외에 php 4.0 부터는 세션 항목이 추가 되어 있습니다.
이것을 이용해서 회원제 사이트를 구성할 경우 해당 계정 마다 각각의 세션을 저장할 필드를 생성함으로 해서
접속과 해당 유저의 접근관리가 수월해 집니다.   여기서는 이러한 방법을 적용하지는 않았지만 어렵지않은
구성이므로 한번 만들어 보기 바랍니다.


    <?php

    $connect = mysql_connect('localhost','root','gksmf444');
    mysql_select_db('mysql',$connect);


    $passwput = mysql_query("select password('$passw')");
    $passwput1 = mysql_result($passwput,0,0);
    //전달 받은 패스워드를 암호화 합니다.//


    $allyp = mysql_query("select Host,User,Password from user
    where Host='localhost' and User='root' ",$connect );

    //해당 조건에 맞는 정보들을 검색 합니다. 여기서 유저와 호스트 부분을 변수로
    만들 경우를 생각 해보기 바랍니다. 이러한 방법으로 각 게시판의 인증을 달리
    할 수 있습니다.//


    $puth = mysql_result($allyp,0,'Host');
    $puti =mysql_result($allyp,0,'User');
    $putp = mysql_result($allyp,0,'Password');
    //데이터 베이스 쿼리에서 각각의 정보를 변수에 저장 합니다.//


    if($puth != $host || $puti != $id || $putp != $passwput1 )
    {
      echo("
      <script>
      window.alert('host,id,passw가 틀립니다. 다시 입력해 주세요')
      history.go(-1)
      </script>
      ");
      exit;
    }// 해당 전달 인자가 하나라도 틀릴 경우 에러 화면을 출력 합니다.//
    else
    {// 다 맞을 경우 해당 쿠키를 만듭니다. 이것은 전달 인자가 하나라도 틀리면
     쿠키는 전혀 생성 되지 않는 것입니다.//

      $userid = md5(uniqid(rand()));
      setcookie("root",$userid,0);


      include('db_func_all.php');
      // 포함은 쿠키 보다 뒤에 와야 합니다.//


      if(!$chanl)
      {
        title_view($page,$connect,$s_db,$userid);
        // 채널이 없을 경우 경매 게시판 Admin으로 이동 합니다.//
      }
      else
      {
        file_view($page,$connect,$s_db,$userid);
        // 그 밖의 경우 자료실 게시판으로 이동 합니다.//
      }
    }

    ?>
    // 만약 쿠키를 얻고 난 후 다시 게시판으로 이동 한다면 게시판 메인 화면에는
    Admin 이라는 표시가 생기게 됩니다. 다음은 함수들을 이용한 각 화면 출력
    루틴 파일을 살펴 보겠습니다.//

17.4 db_view.php 파일

이 파일의 조건식은 쿠키가 존재 하는지 여부를 묻는 조건에 둘러져 있습니다. 이것은 Admin 영역 이므로 만약
다른 이가 이영역으로 바로 접근한다면 로그인 화면이 뜰것 입니다. 그것은 해당 쿠키의 존재 여부를 확인하는
방법입니다. 이것은 보안상 좋은 방법이 아닙니다. 여러분들은 소스를 다시 확인해서 더 새로운 방법을 택하기
바랍니다.


    <?php
        
    include('db_func_all.php');
        
    ?>

    <?php

    if($chanl == rootin || !$root)
    {
      logon($file);
    }
    //$chanl 의 값이 rootin 이거나 쿠키가 존재 하지 않을 경우 실행 되는 부분 입니다.//


    if($root)
    {
    // 쿠키가 존재 할 때 아래의 조건들을 검색 합니다.//


      if($chanl == main)
      {
        main($page,$connect,$select,$dbs,$tableput,$root);
      }
      //메인 화면 출력 부분 입니다.//


      if($chanl == create_db)
      {
        create_db1();
      }
      //새로운 데이터 베이스 생성 때 입력하는 화면 입니다. 여기에 그냥 HTML 코드를
      넣어 사용 하는 방법이 더 편할 수도 있습니다.//


      if($chanl == create_db2)
      {

        mysql_query("create database $dbname",$connect);
        // 새로운 데이터 베이스를 만듭니다. 그리고 아래 코드를 출력 합니다.//

        echo("
        <html>
        <body>
        <center>
        <form method=post action=db_view.php>
        <font style='font-size:13px;font-style:italic;color:#808080'>
        <b>db가 만들어 졌습니다.</b></font>
        <input type=hidden name=chanl value=main>
        <input type=submit value=확인>
        </form>
        </center>
        </body>
        </html>
        ");
      }


      if($chanl == e_field)
      {
      //새로운 테이블 필드를 생성,삭제하는 부분 입니다.필드 추가및 삭제 여기서 중요한건
        마지막 필드는 존재 해야 테이블이 존재 한다.~!
        default '0' 에서 ' '의 표현은 하지 않아야 합니다.//


        mysql_select_db($dbs,$connect);


        mysql_query("alter table $tn $tct $tablequ" , $connect);
        // $tn(테이블 이름) $tct(add ,drop) $tablequ(필드 정보) 로 구성 되어 alter 쿼리를

        수행 하는 부분 입니다.//

        echo("
        <html>
        <body>
        <center>
        <form method=post action=db_view.php>
        <font style='font-size:13px;font-style:italic;color:#808080'>
        <b>field를 수정 했습니다.</b></font>
        <input type=hidden name=chanl value=main>
        <input type=hidden name=dbs value=$dbs>
        <input type=hidden name=select value=field>
        <input type=hidden name=tableput value=$tn>


        <input type=submit value=확인>
        </form>
        </center>
        </body>
        </html>
        ");// 필드의 쿼리를 수행 하고 난후 확인 화면의 출력 입니다.//
      }


      if($chanl == dbdel)
      {
      // 해당 데이터 베이스를 삭제 하는 루틴 입니다. 이 쿼리는 입력 하자 마자 바로
      삭제 되므로 그전에 한번 더 확인을 묻는 박스를 만들면 사용자들이 편할 것입니다.//


        mysql_query("drop database $dbs",$connect);
        //해당 데이터 베이스 삭제//


        echo("
        <html>
        <body>
        <center>
        <form method=post action=db_view.php>
        <font style='font-size:13px;font-style:italic;color:#808080'>
        <b>Db를 삭제 했습니다.</b></font>
        <input type=hidden name=chanl value=main>
        <input type=submit value=확인>
        </form>
        </center>
        </body>
        </html>
        ");
      }


      if($chanl == tabledel)
      {
      // 해당 테이블을 삭제 하는 부분 입니다.//

        mysql_select_db($dbs,$connect);
        mysql_query("drop table $tableput",$connect);
        //삭제 쿼리 입니다.//
                
        echo("
        <html>
        <body>
        <center>
        <form method=post action=db_view.php>
        <font style='font-size:13px;font-style:italic;color:#808080'>
        <b>Table를 삭제 했습니다.</b></font>
        <input type=hidden name=chanl value=main>
        <input type=hidden name=select value=tables>
        <input type=hidden name=dbs value=$dbs>
        <input type=submit value=확인>
        </form>
        </center>
        </body>
        </html>
        ");
      }


      if($chanl == title_view)
      {
        title_view($page,$connect,$s_db);
      }
      //경매 Admin의 메인 화면을 출력 하는 부분 입니다.//


      if($chanl == file_view)
      {
        file_view($page,$connect,$s_db);
      }// 자료실 게시판의 메인 화면을 출력 하는 부분 입니다.//
      if($chanl == create_title)
      {
        create_title();
      }
      // 새로운 경매 게시판을 만드는 화면 입니다.//


      if($chanl == create_file)
      {
        create_file();
      }
      //새로운 자료실 게시판을 만드는 부분 입니다.//


      if($chanl == create_table)
      {
      // 새로운 테이블을 만들기 위한 입력 화면 입니다.//
        echo("
        <html>
        <title>
        creat_db html
        </title>
        <body bgcolor=black>
        <center>
        <img src=skyt1.jpg border=0>
        <br>
        <form method=post action=db_view.php>
        <input type=hidden name=chanl value=create_table2>
        <input type=hidden name=dbs value=$dbs>
        <table border=0 cellspacing=2 cellpadding=2  width=700 >
        <tr>
        <td bgcolor=#808080 width=74>
        <font style='font-size:13px;font-style:italic;color:#fffff0'>
        <b>~Table Name</b></font></td>
        <td bgcolor=black width=100>
        <font style='font-size:13px;font-style:italic;color:#fffff0'>
        <input type=text name=tablen size=10 ></font></td>
        </tr>
        <tr>
        <td bgcolor=#808080 width=74>
        <font style='font-size:13px;font-style:italic;color:#fffff0'>
        <b>query</b></font></td>
        <td bgcolor=black width=100>
        <font style='font-size:13px;font-style:italic;color:#fffff0'>
        <input type=text name=shot size=40></font></td>
        <td bgcolor=black><font style='font-size:13px;font-style:italic;color:#fffff0'>
        <input type=submit value=만들기>
        </font></td>
        </tr>
        </table>
        </form>
        </center>
        </body>
        </html>
        ");
      }


      if($chanl == del_title)
      {

        mysql_select_db('libchal',$connect);
        mysql_query("drop table $s ",$connect);
        mysql_query("drop table $x ",$connect);
        mysql_select_db('adminp',$connect);
        //각각의 게시판(경매 , 자료실)에서 전달 받은 테이블 명을 이용해 게시판을
        삭제 합니다. 이 부분은 경매와 자료실 모두 여기서 처리 합니다.//


        if(!$table)
        {
          $table = admin;
          $select = "<input type=hidden name=chanl value=title_view>";
        }
        else
        {
          $select = "<input type=hidden name=chanl value=file_view>";
        }
        mysql_query("delete from $table where mview='$s' ",$connect);
        // Adminp 데이터 베이스의 해당 게시판 테이블에서 각각의 게시판 정보를 지웁니다.//


        echo("
        <html>
        <body>
        <center>
        <form method=post action=db_view.php>
        <font style='font-size:13px;font-style:italic;color:#808080'>
        <b>게시판이 삭제 되었습니다.</b></font>
        $select
        <input type=submit value=확인>
        </form>
        </center>
        </body>
        </html>
        ");
      }


      if($chanl == create_table2)
      {// 전달 받은 인자로 새로운 테이블을 생성 합니다.//

        mysql_select_db($dbs,$connect);
        mysql_query("create table $tablen ($shot)",$connect);
        //해당 데이터 베이스에 새로운 테이블을 생성 하는 부분 입니다. 여기서 $shot는
        테이블 필드 인자 입니다.//


        echo("
        <html>
        <body>
        <center>
        <form method=post action=db_view.php>
        <font style='font-size:13px;font-style:italic;color:#808080'>
        <b>Table이 만들어 졌습니다.</b></font>
        <input type=hidden name=chanl value=main>
        <input type=submit value=확인>
        </form>
        </center>
        </body>
        </html>
        ");
      }


      if($chanl == create_title2)
      {
      //전달 받은 인자로 새로운 경매 게시판을 만드는 부분 입니다.//


        $s=$ctitle."cry";//테이블 이름 인자를 하나 더 만듭니다.//


        $wdate=date('y-m-d');
        mysql_select_db('adminp',$connect);
        $atitle = mysql_query("select mview from admin where mview='$ctitle'",$connect );
        $atitler = mysql_fetch_array($atitle);
        // Adminp 데이터 베이스에 admin 테이블(경매 테이블)에서 같은 테이블 이름이
        존재 하는지 검색 합니다.//


        if($ctitle == $atitler[mview])
        {
        // 같은 이름의 테이블이 있을 경우 출력 입니다.//
          echo("
          <script>
          window.alert('같은 table가 있습니다. 다시 입력해 주세요')
          history.go(-1)
          </script>
          ");
          exit;
        }
        else
        {// 같은 이름의 테이블이 없을 경우 입니다.//

          mysql_query("insert into admin(title,view,sum,wdate,mview)
          values('$title','$s','$page','$wdate','$ctitle')",$connect);
          mysql_select_db('libchal',$connect);
          //admin(경매 Admin 테이블)에 새로운 경매 게시판의 정보를 입력 합니다.//

          mysql_query("create table $ctitle (no int(10) NOT NULL default '0'
          auto_increment,name varchar(10),email varchar(25),tel varchar(12),
          passw varchar(20),title varchar(54),content text,edate datetime,
          smoney int(10) unsigned,wdate date,
          sise int(10) not null default '0' ,hit int(10) not null
          default '0',PRIMARY KEY(no))",$connect);
          //첫 번째 새로운 경매 테이블을 생성 합니다.//


          mysql_query("create table $s (no int(10) NOT NULL default '0' auto_increment,
          name varchar(10),email varchar(25),tel varchar(12),bmoney int(10),
          tnum int(10),passw varchar(20),PRIMARY KEY(no))",$connect);
          //두 번째 새로운 경매 테이블을 생성 합니다. 여기서 $s(두번째 테이블명)은
          앞에서 새로운 이름 생성에서 만들어진 이름 입니다.//


          echo("
          <html>
          <body>
          <center>
          <form method=post action=db_view.php>
          <font style='font-size:13px;font-style:italic;color:#808080'>
          <b>게시판이 만들어 졌습니다.</b></font>
          <input type=hidden name=chanl value=title_view>
          <input type=submit value=확인>
          </form>
          </center>
          </body>
          </html>
          ");
        }
      }


      if($chanl == create_title3)
      {
      //새로운 자료실 게시판을 생성 하는 부분 입니다.//


        $s=$ctitle."cry";
        // 전달 받은 테이블 이름을 이용해 또 다른 테이블 이름을 생성 합니다.
        이것은 두개의 테이블을 만들기 위함 입니다.//


        $wdate=date('y-m-d');
        mysql_select_db('adminp',$connect);
        $atitle = mysql_query("select mview from file where mview='$ctitle'",$connect );
        $atitler = mysql_fetch_array($atitle);
        //똑 같은 이름의 테이블이 존재하는지 검색 합니다.//
        if($ctitle == $atitler[mview])
        {
        // 같은 이름의 테이블이 존재할 경우의 출력 입니다.//


          echo("
          <script>
          window.alert('같은 table가 있습니다. 다시 입력해 주세요')
          history.go(-1)
          </script>
          ");
          exit;
        }
        else
        {// 같은 이름의 테이블이 없을 경우 입니다.//


          mysql_query("insert into file(title,view,sum,wdate,mview)
          values('$title','$s','$page','$wdate','$ctitle')",$connect);
          mysql_select_db('libchal',$connect);
          //file(자료실 게시판 admin 테이블)에 새로운 게시판의 정보를 저장 합니다.//


          mysql_query("create table $ctitle (no int(10) NOT NULL default '0' auto_increment,
          name varchar(10),email varchar(25),path varchar(50),passw varchar(20),
          title varchar(54),content text, wdate date,hit int(10) not null
          default '0',PRIMARY KEY(no))",$connect);
          //전달 받은 인자로 새로운 자료실 게시판 테이블을 생성 합니다. 처음 테이블//


          mysql_query("create table $s (name varchar(10),email varchar(25),
          tnum int(10),wdate date,content text)",$connect);
          //전달 받은 인자와 $s(새로 생성한 테이블 이름)을 이용해서 두 번째 테이블을
          생성 합니다.//


          echo("
          <html>
          <body>
          <center>
          <form method=post action=db_view.php>
          <font style='font-size:13px;font-style:italic;color:#808080'>
          <b>게시판이 만들어 졌습니다.</b></font>
          <input type=hidden name=chanl value=file_view>
          <input type=submit value=확인>
          </form>
          </center>
          </body>
          </html>
          ");
        }
      }
    }//이 파일 처음 부분의 쿠키 조건의 끝 입니다.//

    ?>


이렇게 해서 모든 설명을 했습니다. 이것을 바탕으로 새로운 스크립트를 꼭 한번 만들어 보길 권합니다. 아무리
잘되어 있는 여타 다른 소스를 보더라도 적용할 수 없다면 그것은 그림의 떡일 뿐입니다. 처음 접하는 분들일수록
꼭 한번 직접 만들어 봐야 됩니다.
한번 만들고 난 후 여러분들은 이렇게 말할 것입니다. 되는데…. 라고^^;


자 그럼 이렇게 만들어진 게시판들을 이용해서 Top 화면을 간단히 만들어 봤습니다.  아주 간단한 코드 입니다.
단지 링크뿐 입니다. Top 화면은 최신 뉴스 라든지 각각의 게시판에서 제일 조회수가 많은 글을 보여 준다든지
하는 여러 알림의 글들이 존재해야 합니다.   이것은 고정된 시각입니다. 여러 방법으로 여러분들이 Top화면을
만들어보기 바랍니다.

그림. 17-13
일단 위 화면은 참고로 하길 바라며 test.php파일로 작성 했습니다.
아래 화면과 비교 하면서 스크립트를 보기 바랍니다. 이것은 예에 불과하며 플래쉬나 다이나믹 코드를 사용해서
보다 깔끔한 Top화면을 만들어 보기 바랍니다.


    <?php

    include('db_func_all.php');
    mysql_select_db('libchal',$connect);
    $wdate = date('H:i:s');
    $ally = mysql_query("select no,title,hit from cry5  order by hit desc",$connect);
    $ally2 = mysql_query("select no,title,hit from cry12 order by hit desc",$connect );
    $put = mysql_fetch_array($ally);
    $put2 = mysql_fetch_array($ally2);
        
    if($wdate < 7)
    {
      $title = " <img src=moon.gif border=0 align=left>
      한참 잠잘 시간 이군요~! 우리모두 밤샘을~ 얍~~ cry는 잠자유~ ";
    }
    else
    {
     $title = " <img src=sam.gif border=0 align=left>
     열심히 싸워요 다들~~ 뭐든지 싸워서 이겨여~~~ ";
    }


    echo("
    <html>
    <title>
    main_view html
    </title>
    <body bgcolor=black>
    <center>
    <img src=skyt1.jpg border=0>
    <br>
    <br>
    <table border=0 cellspacing=2 cellpadding=2 width=700 >
    <tr>
    <th rowspan=5 bgcolor=black width=240><font style='font-size:12px;color:gray'>
    $title</font></th>
    <th bgcolor=black >
    <a href ='m.php?chanl=main_view&f=cry5&f2=cry5cry' >
    <font style='font-size:12px;text-decoration:none;color:blue'>
    <img src=icon.jpg border=0 align=center>cry~ file system ~</font></a></th>
    </tr>
    <tr>
    <td bgcolor=black  align=center>
    <a href ='main_view.php?chanl=main_view&f=cry12&f2=cry12cry' >
    <font style='font-size:13px;text-decoration:none;font-style:italic;color:blue'>
    <img src=icon.jpg border=0 align=center>cry~ 경매 system ~</font></a></td>
    </tr>
    <td bgcolor=black  align=center>
    <a href ='shop.php' >
    <font style='font-size:13px;text-decoration:none;font-style:italic;color:blue'>
    <img src=icon.jpg border=0 align=center>cry쇼핑몰 system ~</font></a></td>
    </tr>
    </table>
    ");


    echo("
    <br>
    <table border=0 cellspacing=2 cellpadding=2 width=700 >
    <td bgcolor=black  align=center width=200>
    <font style='font-size:13px;font-style:italic;color:white'>
    <img src=icon.jpg border=0 align=center>Top 경매</font></td>


    <td bgcolor=black  align=left width=500>
    <a href ='main_view.php?chanl=title&no=$put2[no]&f=cry12&f2=cry12cry' >
    <font style='font-size:13px;text-decoration:none;font-style:italic;color:gray'>
    <strong>$put2[title]</strong></font></a></td>
    <tr>


    <td bgcolor=black  align=center width=200>
    <font style='font-size:13px;font-style:italic;color:white'>
    <img src=icon.jpg border=0 align=center>Top 자료</font></td>


    <td bgcolor=black  align=left width=500>
    <a href ='m.php?chanl=title&no=$put[no]&f=cry5&f2=cry5cry' >
    <font style='font-size:13px;text-decoration:none;font-style:italic;color:gray'>
    <strong>$put[title]</strong></font></a></td>
    </tr>
    </table>
    </center>
    </body>
    <html>
    ");

    ?>



이렇게 모든 설명을 했습니다.
여러분들에게 보다 좋은 소스에 다양한 방법을 보여 드리고 싶었지만 필자의 게으름 때문에 이정도의 수준에서
머물러야 했습니다. 하지만 여러분들은 충분이 이것을 바탕으로 이 보다 더 좋은 스크립트는 충분히 만들 수
있을 것입니다.   만약 C에 익숙하다면 더 복잡하고 성능 좋은 스크립트가 탄생 될 것입니다.
웹언어는 각각의 주어진 환경과 조건에 따라 무엇을 사용 해야 할지 선택 하면 될 것입니다
PHP든 ASP든 둘 중 하나의 스크립트에 정통 하길 바랍니다. 둘 다 습득하면 좋지만 하나를 먼저 알고 또 다른
하나에 접근하는 방법이 더 좋을 것 같습니다.  그럼 다들 스크립트에 매진 하시길 바라며 이만 줄이겠습니다.

17.5 역 경매 게시판 만들기

역 경매 게시판의 경우 제일 처음 소개한 경매 소스를 조금만 수정하면 됩니다. 여기서 역 경매란 경매를 올리는
사람이 특정 물건을 보다 적은 가격에 구매하는 것을 원하므로 보다 적은 금액을 입찰하는 사람이 낙찰되는 것입
니다.   그러니 기존의 경매의 스크립트 소스에서 입찰자의 순위를 금액이 작은 순으로 정렬 하면 되는 것입니다.
화면의 구성은 경매와 달리 조금 다르게 여러분이 바꾸어 주면 됩니다. 이 부분은 자세한 설명이 없더라도 여기
까지 읽으신 분은 충분히 이해 하리라 생각 합니다. 만약 모르신다면 경매 게시판의 입찰자 데이터 베이스 쿼리
부분을 참고 하세요.

17.6 간단한 chating 화면 만들기

해당 사이트에 접속을 한 사람들 끼리 대화명  없이 간단히 채팅을 주고 받을 수 있는 부분입니다. 이것은
보다 다양한 방법을 이용해서 대화방을 만들 수 있는 기초 입니다. 오직 php만을 이용한 방법이며, 서버의
부하가 있을 가능성이 있습니다. 즉, 채팅에 사용할 파일을 만든후 이 파일을 읽어 들여 다른 사용자가
자신이 이 파일에 입력한 파일을 확인 하는 방법입니다. 
이것은 계속적으로 해당 파일을 읽어야 되므로 서버에 부하가 생길 수도 있습니다. 하지만 조금만 다르게
수정한다면 상당히 좋은 채팅방을 만들 수 있습니다.


그럼 지금까지 생성 했던 스크립트에 조금의 수정과 chat.php파일을 이용한 간단한 채팅모드를 설명 하겠
습니다.   우선 생성 되는 윈도우 두개를 보겠습니다. 

그림. 17-14 chat_view.php
위 그림. 17-14는 입력한 글을 확인 하는 창 입니다. 작은 윈도우 크기 이고, 모니터 구석에 두면서 글을 보면
됩니다. 물론 입력한 글은 위 윈도우에 뿌려지며 다른 접속자들도 같이 보여 집니다.

그림. 17-15 chat.php
그림.17-15의 경우는 글을 입력 하는 창 입니다. 이 윈도우 역시 작으며 간단히 입력할 수 있습니다. 모니터의
구석에 두고 사이트를 돌아 다니면서 해당 사이트에 접속한 사람과 간단한 질문을 할 수 있습니다. -? 부분은
자신이 전에 입력 했던 글이 출력 되는 부분입니다. 그럼 이 간단한 채트 모드의 소스를 확인 하겠습니다.


아래 소스 부분을 m.php 파일에 추가 해서 사용 하면 됩니다. 필자의 경우 메인 화면에서 자료실을 클릭하면
채트 윈도우 두개가 뜨도록 구성했습니다. 이것은 여러분들이 원하는 방법으로 수정 해서 사용 하시면 됩니다.



    if($chanl == chat)
    {
      echo("
      <html>
      <body> 
      <center>
      <script>
      window.open('chat.php','send','height=100px width=325px')
      window.open('chat_view.php','send2','height=200px width=325px')
      </script>
      // 두개의 윈도우를 생성 합니다.//


      <form method=post action=m.php>
      <font style='font-size:13px;font-style:italic;color:#808080'>
      <b>자료실에서 간단히 대화를 할 수 있는 기능 입니다.</b></font>
      <input type=hidden name=chanl value=main_view>
      <input type=hidden name=f value=$f>
      <input type=hidden name=f2 value=$f2>
      <input type=submit value=확인>
      // 이 부분은 자료실로 링크 되는 부분 입니다.//
      </form>
      </center>
      </body>
      </html>
      ");
    }



    여기서 물론 메인 화면(test.php)의 자료실 링크 부분은 아래와 같습니다.

    <a href ='m.php?chanl=chat&f=cry5&f2=cry5cry' >



    그럼 채팅 모드의 루틴을 수행 하는 chat.php 파일을 살펴 보겠습니다.
    그림. 17-15을 참고 하세요.


    <?php
    //filesystem function()
    //chat mod make(cry) date(00.4.17)
    ?>


    <?php

    echo("
    <html>
    <head>
    <SCRIPT>
    function set_focus(){
    document.chat.wdata.focus();
    }</SCRIPT>
    // 위 부분은 글을 입력 하는 부분에 커서를 두기 위한 설정 입니다.//
    </head>
    <body bgcolor=black onload='set_focus()'>
    // onload 부분에 ‘set_focus()’ 부분을 추가 해야 합니다.//


    <font style='font-size:13px;font-style:italic;color:#fffff0'>
    ");


    if($s == send)
    {
      echo("
      </font><br>
      ");
      $fp = fopen("/home/ftp/pub/cry.txt" , "w+");
      // 위 패스에 해당 파일을 엽니다. 여기서 사용한 디렉토리는 ftp 디렉토리 입니다.//


      fwrite($fp , "$wdata");
      // 입력 받은 글을 해당 파일에 저장 합니다.//


      fclose($fp);
      // 파일 포인트를 닫습니다.//


      $open = file("/home/ftp/pub/cry.txt");
      //해당 파일의 내용을 배열로 저장 합니다.//
    }

    echo("
    </font>
    <form method=post action=chat.php name=chat>
    <input type=hidden name=s value=send>
    <input name=wdata size=40><br>
    <br>
    <font style='font-size:13px;font-style:italic;color:#fffff0'>
    ?       $open[0]
    // 파일의 내용을 화면에 출력 합니다.//
    </font>
    </form>
    </body>
    </html>
    ");

    ?>



    다음은 chat_view.php 파일을 살펴 보겠습니다.
    그림. 17-14를 참고 하세요.


    <?php
    //filesystem function()
    //chat mod make(cry) date(00.4.17)
    ?>

    <?php

    $open = file("/home/ftp/pub/cry.txt");
    // 글이 입력 되어 있는 파일을 배열로 읽어 들입니다.//


    echo("
    <html>
    <body bgcolor=black>
    <meta http-equiv=/"refresh/" content=/"3 url=http://chat_view.php/">
    // 메타 테그를 이용해  해당 파일의 내용을 주기적으로 읽어 들입니다. 여기서는
    3초마다 읽어 들이도록 했습니다.//


    <center>
    <img src=skyt1.jpg border=0>
    </center>
    <br>
    <font style='font-size:13px;font-style:italic;color:#fffff0'>
    ");


    echo("
    $open[0]<br>
    // 화면에 입력되어진 글을 출력 합니다.//
    </font>
    </body>
    </html>
    ");

    ?>



여기까지 간단한 채팅 모드를 보여 드렸습니다. 이렇게 간단한 모드는 쉽게 만들 수 있습니다. 하지만 보다
크고 다양한 대화방을 만들 경우 서버의 부하 부분은 꼭 생각 해야 됩니다. 그럼 위 소스를 바탕으로 다양한
대화방을 직접 만들어 보길 바랍니다.
맺음말
        시간은 정말 빨리 흘러 갑니다. 인생의 절반을 걸어온 지금 뭔가 해보고 싶었을 때 벌써 인생의 절반이 흘러 갔나
        
    생각하면 정말 가슴이 터질듯 열 받습니다. 지금것 금전을 위해 이러구 저러구 아직도 그러지만.. 정말 금전 문제는
        
    죽기 까지 걱정이 끊이질 않을 듯 합니다. 진정한 부자는 자기가 뭔가를 했을 때 라구 생각하지만 그건 배부른
        
    사람들이 하는 소리 같습니다.
        
    하루 하루 열심히 생활 하시는 우리 어머님과 여러분들의 부모님을 생각하면 이 모든게 뭘 위해 존재 하는지 다
        
    뿌수고 싶습니다.

다음 이전 차례