다음 이전 차례

13. 자료실 만들기?

자료실은 간단한 데이터의 경우 매우 유용하게 사용할 수 있습니다. 보통 일반적인 유틸리티 자료 공유로 활용할 수 있으며

여기서 구현할 자료실은 자료에 관한 응답 글 기능이 있는 아주 간단한 소스입니다.

그림. 13-1 자료실 메인 화면

13.1 소스의 구성

자료실 테이블 만들기

자료실의 테이블은 총 두개로 이루어져 있습니다.    전체 자료에 관한 테이블과 해당 자료에 관한 응답 글 테이블입니다.    여기서 만들 테이블은 단지 자료실 하나만 만들 경우 그 과정을 설명한 것이며 이후 본 사이트를 구성할 때 자료실과 경매 게시판은 admin 영역에서 자신이 원하는 만큼 게시판을 생성할 수 있습니다.    즉, 여기서 수작업으로 만든 자료실 테이블은 나중에 생성할 admin 기능에서 자료실 항목에 나타나지 않습니다. 또한 자료실 소스 부분 중 자료실 테이블($f , $f2)을 지금 생성하는 테이블 명으로 바꾸어서 사용해야 합니다.    여기서는 자료실 소스의 구성과 작성 요령을 중점적으로 설명합니다.

    1) 데이터베이스 만들기

        mysql>create databases libchal ;
        자료실 테이블을 만들 데이터베이스를 생성합니다. Libchal 데이터베이스는 경매 게시판의 테이블도 생성합니다.

                
    2) 테이블 만들기

        ./mysql -u root -p libchal < filetest.sql 

 

    CD의 filetest.sql 파일을 이용해서 간단히 자료실 테이블을 생성합니다.
    이 방법은 새롭게 파일을 생성해서 각 테이블의 속성을 변경해서 사용해도 됩니다. 
    여기서 만든 테이블은 현재 구성할 스크립트의 자료실 테이블 명을 수정해서 볼 수 있습니다.
    즉 , 나중에 admin 영역에서 생성한 자료실 게시판이 아닐 경우는 메인 화면에 나타나지 않습니다.
    생성되는 테이블은 filetest와 filetest2이고 이 테이블을 자료실 스크립트에 적용하기 위해서 아래의 링크를
    사용해야 합니다.

  
        <a href ='m.php?chanl=main_view&f=자료실 메인 테이블명

        &f2=응답 글 테이블 명&ssid=$username' >

   
    이것은 경매 게시판의 경우도 마찬가지입니다.

그림. 13-2 filetest.sql


    3) 테이블의 구성 인자들

        자료실의 테이블은 총 두개로 이루어져 있습니다.
        여기서 테이블을 만들어 보는 것은 단지 자료실의 테이블 구성 요소를 확인하기 위함입니다. 
        즉 테이블을 여기서 만들지 않더라도 admin 영역에서 생성해서 사용하면 됩니다.

자료실 메인 테이블

    각 인자 중에 등록자 이름과 패스워드 등을 설정한 것은 회원제 사이트지만 자료실의 이용은 공개하기
    위함입니다.   즉 , 회원 가입을 하지 않고 guest로 입장 하더라도 자료의 다운로드는 가능합니다.
    그리고 회원인 경우라도 다양한 이름과 패스워드로 등록가능합니다.

 
        no - 자료의 번호를 부여합니다. (자동 증가)
        name - 자료 등록자 이름
        email - 자료 등록자 메일 주소
        path - 등록된 자료의 위치
        passw - 등록자 패스워드
        title - 자료 제목
        content - 자료 설명
        wdate - 자료 등록 날짜
        hit - 해당 자료 조회 수

응답 글 테이블

    응답 글의 경우 해당 자료에 대한 고유 번호를 저장하며 해당 글의 내용에 나열됩니다.

 
        name - 응답 글 등록자 이름
        email - 응답 글 등록자 메일 주소
        tnum - 해당 자료의 고유 번호 저장
        wdate - 응답 글 등록 날짜
        content - 응답 글 내용

소스 만들기

    자료실 스크립트는 총 두개로 구성됩니다.
    이 방법은 앞의 메인 화면 구성과 뒤에 설명할 경매 게시판 , 쇼핑 몰 , admin 영역 또한 마찬가지입니다. 
    구성은 자료실 각 화면을 구성하는 파일(f.php)과 함수들을 다양한 방법으로 출력하는 파일(m.php)로 이루어 집니다.

f.php 전체 코드

    <?php

    /////////////////////////////////////////////
    //
    //    일자 : 2000.3.27 pm 5
    //   작성자: skycry (hong il)
    //
    //   method : 자료실 함수 모음
    //
    //////////////////////////////////////////////
    ?>


    <?php

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


    if($findtype == name)
    {
      $ally = mysql_query("select no ,title ,name ,hit ,wdate ,email ,path from $f
      where name like '%$findname%' order by no " ,$connect);
    }


    if($findtype == title)
    {
      $ally = mysql_query("select no ,title ,name ,hit ,wdate ,email ,path from $f
      where title like '%$findname%' order by no " ,$connect);
    }


    if($findtype == content)
    {
      $ally = mysql_query("select no ,title ,name ,hit ,wdate ,email ,path from $f
      where content like '%$findname%' order by no " ,$connect);
    }


    if($findtype == t_c)
    {
      $ally = mysql_query("select no ,title ,name ,hit ,wdate ,email ,path from $f
      where title like '%$findname%' or content like '%$findname%' order by no " ,$connect);
    }


    if(!$findtype)
    {
      $ally = mysql_query("select no ,title ,name ,hit ,wdate ,path ,email from $f
      order by no " ,$connect);//$connection 생략 했음
    }


    $ally4 = mysql_query("select no ,hit ,passw ,name ,path from $f where no='$no'" ,$connect );


    $ally3 = mysql_query("select name ,email ,tnum ,wdate ,content from $f2 where tnum ='$no'
    order by tnum desc" ,$connect );


    $ally2 = mysql_query("select no ,email ,title ,name ,content ,path ,wdate from $f
    where no='$no'" ,$connect );


    $t_num=mysql_num_rows($ally);
    $putup = mysql_fetch_array($ally4);

    ?>



    <?php

    function main_view($t_num ,$ally ,$page ,$findtype ,$findname ,$f ,$f2 ,$root ,$username)
    { 

      $p_dip = 4 ;
      $p_page =5 ;
      $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) ;


      if(!$root)
      {
        $admin = "User " ;
      }
      else
      {
        $admin = "Admin 입니다.";
      }

          
      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=6 align=left>
      <font style='font-size:12px;font-style:italic;color:#blue'>
      <b>$t_page / $page : $admin</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=370>
      <font style='font-size:13px;font-style:italic;color:#fffff0'>
      <b>Title</b></font></td>


      <td bgcolor=#808080 width=50 align=center>
      <font style='font-size:13px;font-style:italic;color:#fffff0'>
      <b>Name</b></font></td>


      <td bgcolor=#808080 align=center>
      <font style='font-size:13px;font-style:italic;color:#fffff0'>
      <b>Cnt</b></font></td>


      <td bgcolor=#808080 width=50 align=center>
      <font style='font-size:13px;font-style:italic;color:#fffff0'>
      <b>down</b></font></td>


      <td bgcolor=#808080 width=125 align=center>
      <font style='font-size:13px;font-style:italic;color:#fffff0'>
      <b>등록일</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=title&no=$put[no]&f=$f&f2=$f2'>


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


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


            <td bgcolor=black align=center>
            <a href ='ftp://192.168.0.3/home/ftp/pub/$put[path]'>
            <font style='font-size:13px;font-style:italic;color:blue'>
            <img src=disksmblk.gif border=0></font></a></td>
            <td bgcolor=black align=center>
            <font style='font-size:13px;font-style:italic;color:red'>
            <b>$put[wdate]</b></font></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 =m.php?chanl=main_view&page=$pre_p&f=$f&f2=$f2>
          <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 )
          {
            <font style='font-size:13px;font-style:italic;color:red'>
            $pp</font>  ");
          }
          else
          {
            if($pp > 0  && $pp <= $t_page)
            {
              echo("
              <a href =m.php?chanl=main_view&page=$pp&f=$f&f2=$f2>
              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 =m.php?chanl=main_view&page=$next_p&f=$f&f2=$f2>
          <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 =m.php?chanl=new_libchal&f=$f&f2=$f2>
      <img src=write.gif border=0>
      </a></td>
          

      <td bgcolor=black width=100>
      <a href =userin.php?chanl=main_view&username=$username>
      <img src=home.gif border=0>
      </a></td>
      <td bgcolor=black width=100>
      <a href =db_view.php?chanl=rootin&file=file>
      <img src=admin.gif border=0>
      </a></td>
          

      <td bgcolor=black align=right width=150>
      <form method=post action=m.php>
      <input type=hidden name=chanl size=14 value=main_view>
      <input type=hidden name=f value=$f>
      <input type=hidden name=f2 value=$f2>
      <select name=findtype>
      <option value=name selected>Name
      <option value=title>Title
      <option value=content>Content
      <option value=t_c>Titl+Cont
      </select>
      </font></td>


      <td bgcolor=black width=150>
      <input type=text name=findname size=14>
      </td>


      <td bgcolor=black width=100>
      <input type=submit value=Find>

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



    function edit_libchal($ally2 ,$no ,$f ,$f2)
    {

      $put3=mysql_fetch_array($ally2);


      echo("
      <html>
      <title>
      input_view html
      </title>
      <body bgcolor=black>
      <center>
      <img src=skyt1.jpg border=0>
      <br>


      <form method=post action=m.php>


      <input type=hidden name=chanl value=edit_libchal_in>
      <input type=hidden name=f value=$f>
      <input type=hidden name=f2 value=$f2>
      <input type=hidden name=no value=$no>


      <table border=0 cellspacing=2 cellpadding=2 width=700 >


      <tr>
      <td bgcolor=#808080><font style='font-size:13px;font-style:italic;color:#fffff0'>
      <b>~Title</b></font></td>
      <td bgcolor=black align=left><font style='font-size:13px;font-style:italic;color:#fffff0'>
      <input type=text name=title size=50 value='$put3[title]'></font></td>
      </tr>


      <tr>
      <td bgcolor=#808080><font style='font-size:13px;font-style:italic;color:#fffff0'>
      <b>~Name</b></font></td>
      <td bgcolor=black><font style='font-size:13px;font-style:italic;color:#fffff0'>
      <input type=text name=name size=10 value='$put3[name]'></font></td>
      </tr>


      <tr>
      <td bgcolor=#808080><font style='font-size:13px;font-style:italic;color:#fffff0'>
      <b>~Passw</b></font></td>
      <td bgcolor=black><font style='font-size:13px;font-style:italic;color:#fffff0'>
      <input type=password name=passw size=10></font></td>
      </tr>


      <tr>
      <td bgcolor=#808080><font style='font-size:13px;font-style:italic;color:#fffff0'>
      <b>~E-mail</b></font></td>
      <td bgcolor=black><font style='font-size:13px;font-style:italic;color:#fffff0'>
      <input type=text name=email size=20 value='$put3[email]'></font></td>
      </tr>


      <tr>
      <td bgcolor=#808080><font style='font-size:13px;font-style:italic;color:#fffff0'>
      <b>~Content</b></font></td>
      <td bgcolor=black><font style='font-size:13px;font-style:italic;color:#fffff0'>
      <textarea name=content rows=10 cols=70 >$put3[content]</textarea></font></td>
      </tr>


      <tr>
      <td bgcolor=black align=center colspan=4>
      <font style='font-size:13px;font-style:italic;color:#fffff0'>
      <input type=submit value=수정하기>
      </font></td>
      </tr>
      </table>
      </form>
      </center>
      </body>
      </html>
      ");
    }



    function view_title($ally2 ,$ally3 ,$no ,$f ,$f2)
    {

      $put=mysql_fetch_array($ally2);
      $content=nl2br($put[content]) ;
      $size = filesize("/ftp/pub/$put[path]");
      $t_num=mysql_num_rows($ally3);


      echo("
      <html>
      <title>
      view_title html
      </title>
      <body bgcolor=black>
      <center>
      <img src=skyt1.jpg border=0>
      <br>


      <table border=0 cellspacing=2 cellpadding=2 width=700 >


      <tr>
      <td bgcolor=white align=center width=120>
      <font style='font-size:13px;font-style:italic;color:#blue'><b>$no No</b></font></td>


      <td bgcolor=white align=center width=580>
      <font style='font-size:13px;font-style:italic;color:#black'>
      <b>$put[title]</b></font></td>
      </tr>
      </table>


      <table border=0 cellspacing=2 cellpadding=2 width=700 >


      <tr>
      <td bgcolor=#808080 align=center width=100>
      <font style='font-size:13px;font-style:italic;color:#fffff0'>
      <b>$put[wdate]</b></font></td>


      <td bgcolor=#808080 align=center width=200><a href = mailto:$put[email] >
      <font style='font-size:13px;font-style:italic;color:#fffff0'>
      <b>name:$put[name]</b></font></a></td>


      <td bgcolor=#808080 align=center width=280>
      <a href ='ftp://192.168.0.3/home/ftp/pub/$put[path]'>
      <font style='font-size:13px;font-style:italic;color:red'>
      <b>$put[path]($size Byte)</b></font></a></td>
      </tr>


      <tr>
      <table border=0 cellspacing=2 cellpadding=2 width=700 height=250>
      <td bgcolor=black valign=top colspan=3 width=700 height=250>
      <font style='font-size:13px;font-style:italic;color:blue'><b>$content</b></font></td>
      </tr>


      <tr>
      <td bgcolor=blue width=700>
      </td>
      </tr>
      </table>

          
      <table border=0 cellspacing=2 cellpadding=2 width=700 height=100>
      ");


      for($s=1 ; $s <= $t_num  ; $s++)
      {
        $put2=mysql_fetch_array($ally3);
        $content=nl2br($put2[content]);


        echo("
        <tr>
        <td bgcolor=#808080><a href = mailto:$put2[email] >
        <font style='font-size:13px;font-style:italic;color:black'>
        <b>$put2[name]님이 말하길^^;</b>
        </font></a></td>


        <td bgcolor=#808080 align=center width=200>
        <font style='font-size:13px;font-style:italic;color:#fffff0'><b>$put2[wdate]</b>
        </font></td>
        </tr>

        <tr>
        <td bgcolor=black width=700 height=100>
        <font style='font-size:13px;font-style:italic;color:#fffff0'><b>$content</b>
        </font></td>
        </tr>
        ");
      }


      echo("
      </table>
      <table border=0 cellspacing=2 cellpadding=2 width=700 height=100>
     
         
      <tr>
      <td bgcolor=black > &nbsp </td>
      </tr>
      <tr>
      <td bgcolor=black width=200>
      <a href =m.php?chanl=input_newlibchal&tnum=$no&f=$f&f2=$f2>
      <img src=write.gif border=0></a></td>
     

      <td bgcolor=black width=><a href =m.php?chanl=main_view&f=$f&f2=$f2>
      <img src=list.gif border=0></a></td>


      <td bgcolor=black ><a href =m.php?chanl=edit_libchal&no=$no&f=$f&f2=$f2>
      <img src=rewrite.gif border=0></a></td>


      <td bgcolor=black ><a href =m.php?chanl=del&no=$no&f=$f&f2=$f2>
      <img src=delete1.gif border=0></a></td>


      </tr>
      </table>
      </center>
      </html>
      ");
    }



    function error_view($title ,$name ,$passw ,$email ,$content ,$f ,$f2)
    {

      if(!$title)
      {
        echo("
        <script>
        window.alert('주제가 없습니다. 다시 입력해 주세요')
        history.go(-1)
        </script>
        ");
        exit;
      }


      if(!$name)
      {
        echo("
        <script>
        window.alert('이름이 없습니다. 다시 입력해 주세요')
        history.go(-1)
        </script>
        ");
        exit;
      }


      if(!$passw)
      {
        echo("
        <script>
        window.alert('passw가 없습니다. 다시 입력해 주세요')
        history.go(-1)
        </script>
        ");
        exit;
      }


      if(!$email)
      {
        echo("
        <script>
        window.alert('메일 주소가 없습니다. 다시 입력해 주세요')
        history.go(-1)
        </script>
        ");
        exit;
      }


      if(!$content)
      {
        echo("
        <script>
        window.alert('내용이 없습니다. 다시 입력해 주세요')
        history.go(-1)
        </script>
        ");
        exit;
      }
    }



    function input_newlibchal($tnum ,$f ,$f2)
    {

      echo("
      <html>
      <title>
      input_newlibchal html
      </title>
      <head>
      </head>
      <body bgcolor=black>
      <center>
      <img src=skyt1.jpg border=0>
      <br>
      <form method=post action=m.php>
      <input type=hidden name=chanl value=input_newlibchal>
      <input type=hidden name=chanl2 value=input_newlibchal2>
      <input type=hidden name=tnum value=$tnum>
      <input type=hidden name=f value=$f>
      <input type=hidden name=f2 value=$f2>


      <table border=0 cellspacing=2 cellpadding=2 width=700 >
      <tr>
      <td bgcolor=#808080 width=100>
      <font style='font-size:13px;font-style:italic;color:#fffff0'>
      <b>~Name</b></font></td>
      <td bgcolor=black><font style='font-size:13px;font-style:italic;color:#fffff0'>
      <input type=text name=name size=10></font></td>
      </tr>


      <tr>
      <td bgcolor=#808080 width=100>
      <font style='font-size:13px;font-style:italic;color:#fffff0'>
      <b>~E-mail</b></font></td>


      <td bgcolor=black><font style='font-size:13px;font-style:italic;color:#fffff0'>
      <input type=text name=email size=24></font></td>
      </tr>


      <tr>
      <td bgcolor=#808080><font style='font-size:13px;font-style:italic;color:#fffff0'>
      <b>~Content</b></font></td>


      <td bgcolor=black><font style='font-size:13px;font-style:italic;color:#fffff0'>
      <textarea name=content rows=10 cols=70></textarea></font></td>
      </tr>
      </table>
      <br><br>


      <table border=0 cellspacing=2 cellpadding=2  width=71% >


      <tr>
      <td bgcolor=black align=center colspan=4>
      <font style='font-size:13px;font-style:italic;color:#fffff0'>
      <input type=submit value=글올리기>
      <input type=reset  value=지우기></font></td>
      </tr>
      </table>
      </form>
      </center>
      </body>
      </html>
      ");
    }



    function input_view($f ,$f2)
    {
      echo("
      <html>
      <title>
      input_view html
      </title>
      <body bgcolor=black>
      <center>
      <img src=skyt1.jpg border=0>
      <br>
      <form method=post enctype=multipart/form-data action=m.php>
      <input type=hidden name=chanl value=input_new>
      <input type=hidden name=f value=$f>
      <input type=hidden name=f2 value=$f2>

 
      <table border=0 cellspacing=2 cellpadding=2 width=700 >


      <tr>
      <td bgcolor=#808080><font style='font-size:13px;font-style:italic;color:#fffff0'>
      <b>~Title</b></font></td>
      <td bgcolor=black align=left><font style='font-size:13px;font-style:italic;color:#fffff0'>
      <input type=text name=title size=44></font></td>
      </tr>


      <tr>
      <td bgcolor=#808080><font style='font-size:13px;font-style:italic;color:#fffff0'>
      <b>~Name</b></font></td>
      <td bgcolor=black><font style='font-size:13px;font-style:italic;color:#fffff0'>
      <input type=text name=name size=10></font></td>
      </tr>
 

      <tr>
      <td bgcolor=#808080><font style='font-size:13px;font-style:italic;color:#fffff0'>
      <b>~Passw</b></font></td>
      <td bgcolor=black><font style='font-size:13px;font-style:italic;color:#fffff0'>
      <input type=password name=passw size=10></font></td>
      </tr>


      <tr>
      <td bgcolor=#808080><font style='font-size:13px;font-style:italic;color:#fffff0'>
      <b>~E-mail</b></font></td>
      <td bgcolor=black><font style='font-size:13px;font-style:italic;color:#fffff0'>
      <input type=text name=email size=24></font></td>
      </tr>


      <tr>
      <td bgcolor=#808080><font style='font-size:13px;font-style:italic;color:#fffff0'>
      <b>~up File</b></font></td>
      <td bgcolor=black><font style='font-size:13px;font-style:italic;color:#fffff0'>
      <input type=file name=upfile size=24></font></td>
      </tr>


      <tr>
      <td bgcolor=#808080><font style='font-size:13px;font-style:italic;color:#fffff0'>
      <b>~Content</b></font></td>


      <td bgcolor=black><font style='font-size:13px;font-style:italic;color:#fffff0'>
      <textarea name=content rows=10 cols=70></textarea></font></td>
      </tr>


      <tr>
      <td bgcolor=black align=center colspan=4>
      <font style='font-size:13px;font-style:italic;color:#fffff0'>
      <input type=submit value=자료등록>
      <input type=reset  value=지우기></font></td>
      </tr>
      </table>
      </form>
      </center>
      </body>
      </html>
      ");
    }



    function del($no ,$f ,$f2 ,$root)
    {

      echo("
      <html>
      <title>
      input_newlibchal html
      </title>
      <body bgcolor=black>
      <center>
      <img src=skyt1.jpg border=0>
      <br>
      <form method=post action=m.php>
      <input type=hidden name=chanl value=del_no>
      <input type=hidden name=tnum value=$no>
      <input type=hidden name=no value=$no>
      <input type=hidden name=f value=$f>
      <input type=hidden name=f2 value=$f2>


      <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>~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>


      <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>
      ");
    }


    ?>

자료실 소스 구성

    이 자료실의 각 화면은 함수 형식으로 만든 것입니다.

    이 파일에 새로운 자료실 화면을 추가할 수 있으며 m.php의 화면 구성을 바꿀 수 있습니다. 

database 접속과 검색 모드 만들기

    f.php 파일의 처음에 이 부분이 들어 가며 자료실의 자료를 검색하기 위해 mysql의 query를 모드 별로($findtype)

    나누어 나열했습니다.


    <?php

    $connect = mysql_connect('localhost' ,'root' ,'gksmf444');
    mysql_select_db('libchal' ,$connect);
    /* mysql 접속과 데이터베이스를 선택하게 합니다. */

 
    if($findtype == name)
    {
      $ally = mysql_query("select no ,title ,name ,hit ,wdate ,email ,path from $f
      where name like '%$findname%' order by no " ,$connect);
    }
    /* $findtype이 name일 경우 mysql query는 해당 테이블($f)에서 이름에 관해 검색합니다.
       여기서 $f는 자료실 테이블을 나타내는 변수이며, 여러 개의 자료실을 처리하기 위해 변수를 사용합니다.
       만약 특정 자료실만 검색하려면 해당 자료실 테이블 명을 적어주면 됩니다.
       하지만 궁극적인 목적이 여러 개의 자료실 생성이고 사용이므로 자료실 테이블은 변수로 사용합니다.
       쿼리의 검색은 like문을 사용해서 검색합니다.
       Like문의 자세한 내용은 mysql 설명 부분을 참고하세요. */


    if($findtype == title)
    {                   
      $ally = mysql_query("select no , title , name , hit , wdate , email , path from $f
      where title like '%$findname%' order by no " ,$connect);
    }
    /* $findtype 이 title일 때 해당 테이블에서 제목을 검색합니다. */


    if($findtype == content)
    {
      $ally = mysql_query("select no ,title ,name ,hit ,wdate ,email ,path from $f
      where content like '%$findname%' order by no " ,$connect);
    }
    /* $findtype이 content일 때 해당 테이블에서 내용을 검색합니다. */


    if($findtype == t_c)
    {
      $ally = mysql_query("select no ,title ,name ,hit ,wdate ,email ,path from $f
      where title like '%$findname%' or content like '%$findname%' order by no " ,$connect);
    }
    /* $findtype가 t_c일 때 해당 테이블에서 제목과 내용을 검색합니다. */


    if(!$findtype)
    {
      $ally = mysql_query("select no ,title ,name ,hit ,wdate ,path ,email from $f
      order by no " ,$connect);//$connection 생략 했음
    }
    /* $findtype이 없을 경우 해당 테이블에서 모든 자료를 번호 순으로 정렬합니다. */


    $ally4 = mysql_query("select no ,hit ,passw ,name ,path from $f where no='$no'" ,$connect );
    /* 해당 테이블 특정 번호에($no) 해당하는 글을 검색합니다. */


    $ally3 = mysql_query("select name ,email ,tnum ,wdate ,content from $f2
    where tnum ='$no' order by tnum desc" ,$connect );
    /* 해당 테이블($f2 - 자료실 응답 글 테이블) 특정 번호에 해당하는 응답 글을 검색합니다.
       이것은 해당 글의 응 글을 검색하는 것입니다. */


    $ally2 = mysql_query("select no ,email ,title ,name ,content ,path ,wdate from $f
    where no='$no'" ,$connect );
    /* 해당 테이블 특정 번호에 해당하는 글의 정보를 검색합니다. */


    $t_num=mysql_num_rows($ally);
    /* 자료실 메인 테이블에 등록된 모든 자료의 수를 저장합니다. */


    $putup = mysql_fetch_array($ally4);
    /* 자료실 메인 테이블에 등록된 특정 번호의 자료 정보를 $putup 변수에 배열로 저장합니다. */

    ?>

main_view( ) 함수

    처음 자료실 접속했을 때 메인 화면을 출력하는 함수입니다. 자료실 메인 화면 그림을 참고하세요.

함수 인자

    function main_view($t_num , $ally , $page , $findtype , $findname , $f , $f2 , $root , $username)

    /* 자료실 메인 화면을 출력하기 위해 전달받는 인자들입니다.

    $t_num - 해당 테이블의 등록된 자료의 숫자를 전달합니다.
    $ally -  해당 테이블의 등록된 모든 자료의 정보를 전달합니다.
    $page - 해당 테이블의 페이지를 전달합니다.
    $findtype - 해당 테이블의 검색 모드를 전달합니다.
    $findname - 해당 테이블의 검색 단어를 전달합니다.
    $f - 자료실 테이블의 메인 화면 테이블을 전달합니다. 여러 게시판 사용을 위함입니다.
    $f2 - 자료실 테이블의 응답 글 테이블을 전달합니다.
    $root - 자료실 메인 화면에 유저의 접속과 admin의 접속을 구분하기 위해 admin 접속 유무를 전달합니다.
    $username - 해당 사이트에 로그인한 ID 세션을 전달합니다.

페이지 설정과 admin 표시 만들기

    $p_dip = 4 ;


    /* 페이지당 글 수 */
    $p_page =5  ;


    /* 페이지당 페이지 링크수 */
    $p_pagex = ceil($p_page / 2) ;
    $t_page = ceil($t_num / $p_dip) ;
    /* ceil 함수를 이용해서 최소의 정수를 구해 줍니다. */


    if(!$page)
    {
      $page = 1;
    }
    /* 전달된 페이지 번호가 없을 경우 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) ;
    /* 자료실의 한 페이지에 출력하는 글의 시작 번호를 출력합니다. */


    if(!$root)
    {
      $admin = "User " ;
    }
    else
    {
      $admin = "Admin 입니다.";
    }
    /* $root가 있을 경우 $admin 변수를 할당합니다. */

등록된 자료가 없을 경우

    자료실에 등록된 자료가 없는 초기에 보여주는 화면입니다. 이 경우는


    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>
      ");
    }
    /* 해당 자료실 테이블에 등록된 자료 수가($t_num) 없을 경우 출력하는 부분입니다. */

그림. 13-3 등록된 글이 없을 경우

등록된 자료 글 출력하기

    $t_num이 있을 때 for문을 이용해서 해당 자료실 테이블의 글을 페이지 글 수만큼 출력합니다.

        
    for($pd=$start_num ; $pd > $start_num-$p_dip ; $pd--)
    {
      if($pd >= 0 )
      {
      /* 페이지당 글 수만큼 $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=title&no=$put[no]&f=$f&f2=$f2'>
        <font style='font-size:13px;font-style:italic;color:#fffff0'>
        <b>$put[title]</b></font></a></td>
        /* 해당 자료의 제목을 출력합니다. */


        <td bgcolor=black align=center>
        <a href = mailto:$put[email] >
        <font style='font-size:13px;font-style:italic;color:#fffff0'>
        <b>$put[name]</b></font></a></td>
        /* 해당 자료의 등록자 이름을 출력합니다. */


        <td bgcolor=black align=center>
        <font style='font-size:13px;font-style:italic;color:#fffff0'>
        <b>$put[hit]</b></font></td>
        /* 해당 자료의 조회 수를 출력합니다. */


        <td bgcolor=black align=center>
        <a href ='ftp://192.168.0.3/home/ftp/pub/$put[path]'>
        <font style='font-size:13px;font-style:italic;color:blue'>
        <img src=disksmblk.gif border=0></font></a></td>
        /* 해당 자료의 위치를 디스켓 이미지로 링크 시킵니다. */


        <td bgcolor=black align=center>
        <font style='font-size:13px;font-style:italic;color:red'>
        <b>$put[wdate]</b></font></td>
        /* 해당 자료의 등록 날짜를 출력합니다. */
        </tr>
        ");
      }
    }

이전 page 링크 만들기

    if($page == 1)
    {
      echo ("
      <font style='font-size:12px;font-style:italic;color:#fffff0'>first </font> ");
    }
    /* $page가 1일 경우 first에 해당 페이지를 링크하지 않습니다. */
        
    else
    {
      echo ("
      <a href =m.php?chanl=main_view&page=$pre_p&f=$f&f2=$f2>
      <font style='font-size:12px;font-style:italic;color:#fffff0'><< </font></a>");
    }
    /* $page가 1이 아닐 경우 << 기호에 $pre_p 변수를 링크합니다. 이것은 이전 페이지로 이동 가능하게 합니다. */

페이지 링크 만들기

    페이지 링크는 자료실 하단에 [1][2][3][4]…를 표현하기 위함입니다. 자료실 메인 화면을 참고 하세요.


    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 =m.php?chanl=main_view&page=$pp&f=$f&f2=$f2>
          <font style='font-size:12px;font-style:italic;color:#808080'>[$pp]</font></a>");
        }
        /* 링크 페이지는 0보다 크고 그리고 총 페이지보다 작거나 같을 때 생성합니다. */
      }
    }

다음 페이지 링크만들기

    if($page == $t_page)
    {
      echo ("
      <font style='font-size:12px;font-style:italic;color:#fffff0'> last^^ </font>");
    }
    /* 현재 페이지가 총 페이지와 같을 경우 last^^에 링크를 만들지 않습니다. */
    else
    {
      echo ("
      <a href =m.php?chanl=main_view&page=$next_p&f=$f&f2=$f2>
      <font style='font-size:12px;font-style:italic;color:#fffff0'>pre>></font></a>");
    }
    /* 현재 페이지가 총 페이지와 같지 않을 경우 >> 기호에 링크를 만듭니다. */

다른 메뉴 링크 만들기

    자료실 메인 화면과 나머지 화면들에서 다른 화면으로 이동하는 링크를 만듭니다.
    이것은 보통 top 화면과 자료등록 , 지우기 , 고치기 등입니다.


    echo("
    </td>
    </tr>
    </center>
    </table>
    <br>
    <center>

    <table border=0 cellspacing=2 cellpadding=2 width=700 >


    <tr>
    <td bgcolor=black width=100>
    <a href =m.php?chanl=new_libchal&f=$f&f2=$f2>
    <img src=write.gif border=0>
    </a></td>
    /* 해당 테이블의 자료실에 자료를 등록하는 화면으로 링크합니다. */


    <td bgcolor=black width=100>
    <a href =userin.php?chanl=main_view&username=$username>
    <img src=home.gif border=0>
    </a></td>
    /* 해당 자료실 테이블에서 사이트 메인 화면으로 링크합니다. */


    <td bgcolor=black width=100>
    <a href =db_view.php?chanl=rootin&file=file>
    <img src=admin.gif border=0>
    </a></td>
    /* 해당 자료실 테이블에서 admin 접속 화면으로 링크합니다. */


    <td bgcolor=black align=right width=150>
    <form method=post action=m.php>
    <input type=hidden name=chanl size=14 value=main_view>
    <input type=hidden name=f value=$f>
    <input type=hidden name=f2 value=$f2>
    <select name=findtype>
    <option value=name selected>Name
    <option value=title>Title
    <option value=content>Content
    <option value=t_c>Titl+Cont
    </select>
    </font></td>
    /* 해당 자료실 테이블에서 이름 , 제목 , 내용 , 제목과 내용을 선택하는 form문을 만듭니다.
       이것은 해당 자료 테이블에서 위 인자들에 대한 검색을 하기 위함입니다. */


    <td bgcolor=black width=150>
    <input type=text name=findname size=14>
    /* $findname 변수에 검색 단어를 저장합니다. 이 변수를 이용해서 해당 테이블을 검색합니다. */
    </td>


    <td bgcolor=black width=100>
    <input type=submit value=Find>
    /* find 버튼을 생성합니다. */


    </td>
    </tr>
    </table>
    </center>
    </html>
    ");

edit_libchal( ) 함수

    자료실의 글을 수정하는 함수입니다. 
    자료실의 해당 자료를 수정하는 것은 아니고 자료 제목과 이름 등을 수정할 수 있게 합니다.

그림. 13-4 자료실 수정 화면

함수 인자

    edit_libchal($ally2 ,$no ,$f ,$f2)

    자료실 글 내용과 제목 이름 등을 수정 하려면 해당 자료에 대한 번호와 테이블 데이터베이스 Query를
    전달받아야 됩니다. 

   $ally2 - 해당 자료에 대한 데이터베이스 검색을 전달합니다.
   $no - 해당 자료의 번호를 전달합니다.
   $f - 해당 자료실의 메인 테이블 이름을 전달합니다.
   $f2 - 해당 자료실의 응답 글 테이블 이름을 전달합니다.

원본 자료의 정보 저장 하기

    $put3=mysql_fetch_array($ally2);

    /* $ally2는 수정할 자료 번호에 대해 데이터베이스에서 검색한 자료의 정보이며 , 이것을 $put3 변수에 배열로 저장합니다. */

수정 항목 전달 form문 만들기

    수정할 자료 목록을 수정한 후 수정된 항목들을 전달하기 위해 form문을 만듭니다.


    <form method=post action=m.php>
    <input type=hidden name=chanl value=edit_libchal_in>
    /* m.php파일에서 $chanl이 edit_libchal_in 인 항목에 수정 사항을 전달합니다. */


    <input type=hidden name=f value=$f>
    <input type=hidden name=f2 value=$f2>
    <input type=hidden name=no value=$no>
    /* 해당 자료실 테이블 이름 두개와 자료 번호를 전달합니다. */

입력란 만들기

    선택한 자료의 정보를 입력하는 부분을 만듭니다. 물론 처음 등록한 유저의 ID와 패스워드가 일치해야 수정 가능합니다.


    <tr>
    <td bgcolor=#808080><font style='font-size:13px;font-style:italic;color:#fffff0'>
    <b>~Title</b></font></td>
    <td bgcolor=black align=left><font style='font-size:13px;font-style:italic;color:#fffff0'>
    <input type=text name=title size=50 value='$put3[title]'></font></td>
    /* 해당 자료의 제목을 출력하고 수정할 수 있습니다.
       $put3[title] 변수에 ‘ ’를 한 것은 해당 제목에 공백이 있을 경우 같이 출력하게 하는 것입니다. */
    </tr>


    <tr>
    <td bgcolor=#808080><font style='font-size:13px;font-style:italic;color:#fffff0'>
    <b>~Name</b></font></td>
    <td bgcolor=black><font style='font-size:13px;font-style:italic;color:#fffff0'>
    <input type=text name=name size=10 value='$put3[name]'></font></td>
    </tr>
    /* 해당 자료의 등록자 이름을 출력하고 수정하게 합니다. */


    <tr>
    <td bgcolor=#808080><font style='font-size:13px;font-style:italic;color:#fffff0'>
    <b>~Passw</b></font></td>
    <td bgcolor=black><font style='font-size:13px;font-style:italic;color:#fffff0'>
    <input type=password name=passw size=10></font></td>
    </tr>
    /* 해당 자료의 등록자 패스워드를 입력 하는 부분입니다. Type는 password로 다른 사람이 볼 수 없게 합니다. */


    <tr>
    <td bgcolor=#808080><font style='font-size:13px;font-style:italic;color:#fffff0'>
    <b>~E-mail</b></font></td>
    <td bgcolor=black><font style='font-size:13px;font-style:italic;color:#fffff0'>
    <input type=text name=email size=20 value='$put3[email]'></font></td>
    </tr>
    /* 해당 자료의 등록자 메일 주소를 출력하고 수정하는 부분 입니다. */


    <tr>
    <td bgcolor=#808080><font style='font-size:13px;font-style:italic;color:#fffff0'>
    <b>~Content</b></font></td>
    <td bgcolor=black><font style='font-size:13px;font-style:italic;color:#fffff0'>
    <textarea name=content rows=10 cols=70 >$put3[content]</textarea></font></td>
    </tr>
    /* 해당 자료의 설명을 출력하고 수정하는 부분 입니다.
       Textarea의 경우 해당 자료 정보는 <textarea>와 </textarea> 사이에 넣어 줍니다.*/


    <tr>
    <td bgcolor=black align=center colspan=4>
    <font style='font-size:13px;font-style:italic;color:#fffff0'>
    <input type=submit value=수정하기>
    </font></td>
    </tr>
    </table>
    </form>
    /* 수정한 모든 항목을 m.php 파일에 전달하기 위해 수정하기 버튼을 생성하고 , form문을 종료합니다. */

view_title($ally2 ,$ally3 ,$no ,$f ,$f2) 함수

    선택한 자료의 정보를 상세하게 보여주는 함수입니다.

    즉 , 자료실 메인 화면에서 특정 자료의 제목을 클릭하면 보여주는 부분이며 , 자료에 대한 설명과
        
    등록자 응답 글 등을 출력합니다.

그림. 13-5 특정 자료 보기 화면

함수 전달 인자

    view_title($ally2 , $ally3 , $no , $f , $f2)

    특정 자료의 설명과 등록자 , 응답 글 등을 볼 수 있게 하기 위해 여러 인자들을 사용합니다.

    $ally2 - 해당 테이블에서 선택한 자료 번호에 대한 데이터베이스 검색 결과를 전달합니다.
    $ally3 - 응답 글 테이블에서 선택한 자료 번호의 응답 글 정보를 전달합니다.
    $no - 선택한 자료 번호를 전달합니다.
    $f - 자료실 메인 테이블 이름을 전달합니다.
    $f2 - 자료실 응답 글 테이블 이름을 전달합니다.

선택한 자료의 정보 저장하기

    $put=mysql_fetch_array($ally2);
    /* $ally2는 선택한 자료에 대한 검색 결과를 전달합니다. $put 변수에 배열로 저장합니다.*/


    $content=nl2br($put[content]) ;
    /* nl2br( ) 함수를 이용해서 선택한 자료의 설명 내용 중 nl 부분을 <br>로 변환합니다.
       이것은 HTML로 브라우저에 출력하기 때문에 처음 글 등록 때 enter를 입력한 부분을 다시
       <br>로 변환하는 것입니다. */


    $size = filesize("/ftp/pub/$put[path]");
    /* filesize( ) 함수를 이용해서 등록한 자료의 크기를 byte로 구합니다. */


    $t_num=mysql_num_rows($ally3);
    /* 선택한 자료의 응답 글의 수를 $t_num 변수에 저장합니다. */

자료 정보 출력하기

    선택한 자료의 정보를 출력하는 부분입니다. 즉 해당 자료의 크기 , 등록자 , 등록일 , 번호 , 자료 설명 등이 있습니다.


    <tr>
    <td bgcolor=white align=center width=120>
    <font style='font-size:13px;font-style:italic;color:#blue'><b>$no No</b></font></td>
    /* 선택한 자료의 번호를 출력합니다. */


    <td bgcolor=white align=center width=580>
    <font style='font-size:13px;font-style:italic;color:#black'><b>$put[title]</b></font></td>
    /* 선택한 자료의 제목을 출력합니다. */


    </tr>
    </table>
    <table border=0 cellspacing=2 cellpadding=2 width=700 >


    <tr>
    <td bgcolor=#808080 align=center width=100>
    <font style='font-size:13px;font-style:italic;color:#fffff0'>
    <b>$put[wdate]</b></font></td>
    /* 선택한 자료의 등록 날짜를 출력합니다. */


    <td bgcolor=#808080 align=center width=200>
    <a href = mailto:$put[email] >
    <font style='font-size:13px;font-style:italic;color:#fffff0'>
    <b>name:$put[name]</b></font></a></td>
    /* 선택한 자료의 등록자를 출력하고 등록자의 메일 주소를 링크합니다. */


    <td bgcolor=#808080 align=center width=280>
    <a href ='ftp://192.168.0.3/home/ftp/pub/$put[path]'>
    <font style='font-size:13px;font-style:italic;color:red'>
    <b>$put[path]($size Byte)</b></font></a></td>
    /* 선택한 자료의 자료 이름을 출력하고 자료의 위치를 링크합니다.
       위 링크의 경우 레드핫 리눅스의 경우 ftp는 자동으로 설정되어 있으며 링크를 ftp://서버 명/pub/$put[path]로
       설정 하면 됩니다. 이것은 리눅스의 설정에 따라 다를 경우가 있으며 자신의 ftp 서버의 설정을 nobody 접속이
       가능하도록 해야하고 해당 디렉토리의 퍼미션 또한 nobody 유저가 접속 가능 하도록 해야 합니다.         */
    </tr>


    <tr>
    <table border=0 cellspacing=2 cellpadding=2 width=700 height=250>
    <td bgcolor=black valign=top colspan=3 width=700 height=250>
    <font style='font-size:13px;font-style:italic;color:blue'><b>$content</b></font></td>
    </tr>
    /* 해당 자료의 설명을 출력합니다. */

응답 글 출력하기

    해당 자료에 대한 응답 글을 출력하게 합니다.
        
    즉 , 선택한 자료의 번호를 이용해서 그 자료에 대한 응답 글을 검색하고 출력합니다.



    for($s=1 ; $s <= $t_num  ; $s++)
    {

      $put2=mysql_fetch_array($ally3);
      $content=nl2br($put2[content]);
      /* 선택한 자료의 응답 글 정보를 $put2 변수에 배열로 저장합니다.
         그리고 nl2br( ) 함수를 이용해서 응답 글의 내용을 수정합니다. */


      echo("
      <tr>
      <td bgcolor=#808080><a href = mailto:$put2[email] >
      <font style='font-size:13px;font-style:italic;color:black'>
      <b>$put2[name]님이 말하길^^;</b>
      </font></a></td>
      /* 해당 자료의 응답 글 등록자를 출력하고 메일 주소를 링크합니다. */


      <td bgcolor=#808080 align=center width=200>
      <font style='font-size:13px;font-style:italic;color:#fffff0'><b>$put2[wdate]</b>
      </font></td>
      </tr>
      /* 응답 글 등록 날짜를 출력합니다. */


      <tr>
      <td bgcolor=black width=700 height=100>
      <font style='font-size:13px;font-style:italic;color:#fffff0'><b>$content</b>
      </font></td>
      </tr>
      /* 응답 글 내용을 출력합니다. */
      ");
    }

error_view($title ,$name ,$passw ,$email ,$content ,$f ,$f2) 함수

    자료를 등록했을 경우 등록 항목 중 비어있는 부분을 체크하는 부분입니다.

그림. 13-6 자료 등록 에러 화면

에러 화면 출력 하기

    자료 등록 때 각 항목의 입력 여부만을 확인합니다.
    간단한 java 스크립트를 이용해서 해당 항목이 없을 경우 에러 박스를 출력합니다.


    if(!$title)
    {
      echo("
      <script>
      window.alert('주제가 없습니다. 다시 입력해 주세요')
      history.go(-1)
      </script>
      ");
      exit;
    }
    /* 자료 제목을 입력하지 않았을 경우 출력하는 부분이며 나머지 항목의 에러 출력도 같은 방법으로 구성 했습니다 */

input_newlibchal($tnum , $f , $f2) 함수

    해당 자료의 응답 글을 등록하기 위해 입력하는 부분입니다.

그림. 13-7 응답 글 입력하기

form문과 전달 인자

    응답 글을 입력하고 해당 인자들을 m.php파일에 전달 하기위해 form문 만듭니다.
    이 함수의 전달 인자는 $tnum(응답 글의 번호) , $f , $f2가 있습니다.


    <form method=post action=m.php>
    <input type=hidden name=chanl value=input_newlibchal>
    <input type=hidden name=chanl2 value=input_newlibchal2>
    /* 등록한 응답 글 항목을 m.php 파일의 $chanl이 input_newlibchal이고 $chanl2가
    input_newlibchal2인 항목에 전달하는 form문을 만듭니다. */


    <input type=hidden name=tnum value=$tnum>
    <input type=hidden name=f value=$f>
    <input type=hidden name=f2 value=$f2>
    /* 해당 자료실의 두개의 테이블과 응답 글 번호를 전달합니다. */

그림. 13-8 새로운 자료 등록하기

파일 등록을 위한 form문

    파일 등록을 위해 form문의 설정을 enctype=multipart/form-data로 합니다.
    하지만 이 설정 이외에 PHP.INI의 파일 설정 부분을 조금 수정해서 사용할 수 있습니다.
    파일 등록 용량의 설정 , 저장할 디렉토리 등의 설정을 할 수 있으며 여기에 사용하는 방법은 디폴트
    설정이며 form문의 설정만 해서 사용하면 됩니다.


    <form method=post enctype=multipart/form-data action=m.php>
    <input type=hidden name=chanl value=input_new>
    <input type=hidden name=f value=$f>
    <input type=hidden name=f2 value=$f2>

입력란 만들기

    자료 등록을 위해 여러 입력 사항과 파일을 선택하는 부분을 만듭니다.


    <tr>
    <td bgcolor=#808080><font style='font-size:13px;font-style:italic;color:#fffff0'>
    <b>~Title</b></font></td>
    <td bgcolor=black align=left><font style='font-size:13px;font-style:italic;color:#fffff0'>
    <input type=text name=title size=44></font></td>
    </tr>
    /* 등록 자료의 제목을 입력하는 부분입니다. */


    <tr>
    <td bgcolor=#808080><font style='font-size:13px;font-style:italic;color:#fffff0'>
    <b>~Name</b></font></td>
    <td bgcolor=black><font style='font-size:13px;font-style:italic;color:#fffff0'>
    <input type=text name=name size=10></font></td>
    </tr>
    /* 등록 자료의 등록자 이름을 입력하는 부분입니다. */


    <tr>
    <td bgcolor=#808080><font style='font-size:13px;font-style:italic;color:#fffff0'>
    <b>~Passw</b></font></td>
    <td bgcolor=black><font style='font-size:13px;font-style:italic;color:#fffff0'>
    <input type=password name=passw size=10></font></td>
    </tr>
    /* 등록자 패스워드를 입력하는 부분이며 password type입니다. */


    <tr>
    <td bgcolor=#808080><font style='font-size:13px;font-style:italic;color:#fffff0'>
    <b>~E-mail</b></font></td>
    <td bgcolor=black><font style='font-size:13px;font-style:italic;color:#fffff0'>
    <input type=text name=email size=24></font></td>
    </tr>
    /* 등록자의 메일 주소를 입력하는 부분입니다. */


    <tr>
    <td bgcolor=#808080><font style='font-size:13px;font-style:italic;color:#fffff0'>
    <b>~up File</b></font></td>
    <td bgcolor=black><font style='font-size:13px;font-style:italic;color:#fffff0'>
    <input type=file name=upfile size=24></font></td>
    </tr>
    /* 등록할 파일을 찾는 부분입니다. Type=file로 설정하며 이것은 자신의 컴퓨터에서 등록할 파일을 찾을 수 있게 합니다. */

그림. 13-9 파일 upload 하기

    <tr>
    <td bgcolor=#808080><font style='font-size:13px;font-style:italic;color:#fffff0'>
    <b>~Content</b></font></td>
    <td bgcolor=black><font style='font-size:13px;font-style:italic;color:#fffff0'>
    <textarea name=content rows=10 cols=70></textarea></font></td>
    </tr>
    /* 등록할 자료의 설명을 입력하는 부분입니다. */


    <tr>
    <td bgcolor=black align=center colspan=4>
    <font style='font-size:13px;font-style:italic;color:#fffff0'>
    <input type=submit value=자료등록>
    <input type=reset  value=지우기></font></td>
    </tr>
    /* 자료 등록을 위해 입력한 사항과 파일을 m.php에 보내기 위해 "자료등록" 버튼을 만듭니다.
       그리고 모든 항목을 다시 입력하기 위해 "지우기" 버튼을 만듭니다. */

del($no ,$f ,$f2 ,$root) 함수

    등록한 자료를 지우는 함수입니다. 전달 인자는 $no(해당 자료 번호) , $f , $f2 , $root(admin) 입니다.
    여기서 $root 변수를 전달하는 것은 해당 자료를 admin이 등록자 패스워드 없이 지우게 하는 역할을 합니다.

그림. 13-10 자료 지우기 화면

form문 만들기

    해당 자료를 삭제하기 위해 form문으로 자료 정보를 전달합니다.


    <form method=post action=m.php>
    <input type=hidden name=chanl value=del_no>
    /* m.php 파일의 $chanl=del_no인 항목으로 해당 자료의 정보를 전달합니다. */
 

    <input type=hidden name=tnum value=$no>
    <input type=hidden name=no value=$no>
    <input type=hidden name=f value=$f>
    <input type=hidden name=f2 value=$f2>
    /* 해당 자료의 번호($tnum)와 응답 글 번호($no) , 자료실 두 테이블 이름을 전달합니다.*/

패스워드 입력란 만들기

    등록자의 패스워드 입력란을 만듭니다.


    <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>
    /* 해당 자료 등록자의 패스워드를 입력하는 부분입니다. */


    <td bgcolor=black><font style='font-size:13px;font-style:italic;color:#fffff0'>
    <input type=submit value=지우기>
    </font></td>
    /* 입력한 패스워드를 전달하기 위해 "지우기" 버튼을 생성합니다. */

13.2 m.php 전체 코드

f.php의 함수들을 브라우저에 출력하기 위한 스크립트로 구성되어 있습니다.

    <?php
    session_start();
    //////////////////////////////////////////////////
    //
    //    일자 : 2000.3.27 pm 5
    //   작성자: skycry (hong il)
    //
    //
    //   method : 자료실 메인 화면들..^^;
    //
    //////////////////////////////////////////////////
    ?>


    <?php

    if($username)
    {

      include('f.php');


      if($chanl == new_libchal && $username != guest)
      {
        input_view($f ,$f2) ;
        mysql_close($connect);
      }


      if($chanl == new_libchal && $username == guest)
      {
        echo("
        <script>
        window.alert('guest는 이용할 수 없습니다.')
        history.go(-1)
        </script>
        ");
        exit;
      }


      if($chanl == input_new)
      {
        error_view($title ,$name ,$passw ,$email ,$content ,$f ,$f2);
        $max = mysql_query("select max(no) from $f " ,$connect );
        $new_no = mysql_result($max ,0 ,0);
        $no = $new_no + "1" ;
        $wdate = date("y-m-d");
        $gg=explode("." ,"$upfile_name");
        $tt=$gg[sizeof($gg)-1];
        $path= "/home/ftp/pub/$upfile_name";
     

        if($tt == "php" || $tt == "php3" || $tt == "php4" || $tt == "html" 
                                  || $tt == "htm" || $tt == "inc" || $tt == "txt" )
        {
          echo("
          <script>
          window.alert('이 화일은 등록 할 수 없습니다. 다시 입력해 주세요')
          history.go(-1)
          </script>
          ");
          exit;
        }


        if(file_exists("$path"))
        {
          echo("
          <script>
          window.alert('같 이름의 화일이 존재합니다. 다시 입력해 주세요')
          history.go(-1)
          </script>
          ");
          exit;
        }
        else
        {
          copy("$upfile" ,"$path");
          mysql_query("insert into $f(title ,name ,passw ,path ,email ,content ,wdate ,no)
          values('$title' ,'$name' ,password('$passw') ,'$upfile_name' ,'$email' ,'$content' ,
          '$wdate' ,'$no')" ,$connect);


          echo("
          <html>
          <body>
          <center>
          <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>
          ");

          unlink($upfile);
          mysql_close($connect);
        }
      }


      if($chanl == input_newlibchal)
      {
        if($chanl2 == input_newlibchal2)
        {
          $wdate = date("y-m-d");
          mysql_query("insert into $f2(name ,email ,tnum ,wdate ,content)
          values('$name' ,'$email' ,'$tnum' ,'$wdate' ,'$content')" ,$connect);


          echo("
          <html>
          <body>
          <center>
          <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>
          ");
        }
        else
        {
          input_newlibchal($tnum ,$f ,$f2) ;
        }


        mysql_close($connect);
      }


      if($chanl == edit_libchal)
      {
        edit_libchal($ally2 ,$no ,$f ,$f2) ;
        mysql_close($connect);
      }


      if($chanl == edit_libchal_in)
      {
        error_view($title ,$name ,$passw ,$email ,$content ,$f ,$f2);
        $input=mysql_query("select password('$passw') " ,$connect );
        $inputpassw = mysql_result($input ,0 ,0);


        if($putup[passw] == $inputpassw)
        {
          mysql_query("update $f set title='$title' , name='$name' ,passw=password('$passw') , email='$email', 
          content='$content' where no = '$no'" ,$connect);
 
          mysql_close;
        }
        else
        {
          echo("
          <script>
          window.alert('passw가 틀렸습니다. 다시 입력해 주세요')
          history.go(-1)
          </script>
          ");
          exit;
        }


        echo("
        <html>
        <body>
        <center>
        <form method=post action=m.php>
        <font style='font-size:13px;font-style:italic;color:#808080'>
        <b>글이 수정 되었습니다</b></font>
        <input type=hidden name=no value=$no>
        <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>
        ");
 
        mysql_close($connect);
      }


      if($chanl == title)
      {
        mysql_query("update $f set hit = '$putup[hit]'+1 where no = '$no'" ,$connect) ;
        view_title($ally2 ,$ally3 ,$no ,$f ,$f2) ;
        mysql_close($connect);
      }


      if($chanl == main_view)
      {
        mysql_select_db('adminp' ,$connect);
        mysql_query("update file set sum='$t_num' where mview = '$f'" ,$connect);
        main_view($t_num ,$ally ,$page ,$findtype ,$findname ,$f ,$f2 ,$root ,$username);
        mysql_close($connect);
      }


      if($chanl == del)
      { 
        del($no ,$f ,$f2 ,$root);
        mysql_close($connect);
      }


      if($chanl == del_no)
      {
        $input=mysql_query("select password('$passw') " ,$connect );
        $inputpassw = mysql_result($input ,0 ,0);


        if($putup[passw] == $inputpassw || $root )
        {
          unlink("/home/ftp/pub/$putup[path]");
          $mldel = "delete from $f where no=$no";
          $rsult = mysql_query($mldel ,$connect);
          $ml2del = "delete from $f2 where tnum=$tnum ";
          $rsult2 = mysql_query($ml2del ,$connect);
        }
        else
        {
          echo("
          <script>
          window.alert('passw가 틀렸습니다. 다시 입력해 주세요')
          history.go(-1)
          </script>
          ");
          exit;
        }


        echo("
        <html>
        <body>
        <center>
        <form method=post action=m.php>
        <font style='font-size:13px;font-style:italic;color:#808080'>
        <b>글이 삭제 되었습니다</b></font>
        <input type=hidden name=no value=$no>
        <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>
        ");

        mysql_close($connect);
      }
    }
    else
    {
      echo("
      <script>
      window.alert('Login 하세요.')
      history.go(-1)
      </script>
      ");
      exit;
    }

    ?>

소스 설명

    m.php는 f.php 파일의 함수를 화면에 다양한 방법으로 출력하게 합니다.
    그 밖에 전달 받은 인자와 자료를 데이터베이스에 입력하고 삭제하는 기능을 합니다.

세션 항목

    자료실의 각 화면을 출력하는 함수의 실행은 등록된 ID의 로그인 여부에 따라 권한을 달리합니다.


    session_start();
    /* 세션을 시작합니다. */


    if($username)
    {
    /* 로그인 한 세션을 가진 ID가 있을 경우입니다. */

      include('f.php');
      /* f.php 파일의 함수를 포함합니다. 그리고 if($username){   와   }else 사이에 각 화면의 함수 출력 부분을 둡니다.
         이것은 세션으로 로그인했을 경우만 화면을 보여주기 위함이며 if문 안에 보다 세부적으로 설정할 수 있습니다. */
    }
    else
    {
      echo("
      <script>
      window.alert('Login 하세요.')
      history.go(-1)
      </script>
      ");
      exit;
    }
    /* 등록된 ID로 로그인하지 않았을 경우 출력하는 화면입니다. */

자료 등록 모드

    if($chanl == new_libchal && $username != guest)
    {
      input_view($f ,$f2) ;
      mysql_close($connect);
    }
    /* $chanl = new_libchal이고 로그인한 세션이 guest가 아닐 경우 자료 등록 화면을 출력합니다. */


    if($chanl == new_libchal && $username == guest)
    {
      echo("
      <script>
      window.alert('guest는 이용할 수 없습니다.')
      history.go(-1)
      </script>
      ");
      exit;
    }
    /* 만약 로그인한 세션이 guest일 경우 해당 메시지 박스를 출력합니다. */

자료를 서버와 데이터베이스에 저장하기

    자료 등록 화면에서 자료에 대한 정보를 서버와 데이터베이스에 저장하는 항목을 만듭니다.


    if($chanl == input_new)
    {
    /* $chanl=input_new일 때 실행합니다. */


      error_view($title , $name , $passw , $email , $content , $f , $f2);
      /* 전달 되어온 자료 정보의 입력 여부를 체크합니다. */


      $max = mysql_query("select max(no) from $f " ,$connect );
      /* 해당 테이블의 자료 중 가장 높은 번호를 검색합니다. */


      $new_no = mysql_result($max ,0 ,0);
      /* 가장 높은 번호를 $new_no 변수에 저장합니다. */
 

      $no = $new_no + "1" ;
      /* 새롭게 등록되는 자료의 번호를 부여합니다. */


      $wdate = date("y-m-d");
      $gg=explode("." ,"$upfile_name");
      /* 전달 되어온 파일을 explode( ) 함수를 이용해서 파일 이름과 확장자를 구분합니다. */


      $tt=$gg[sizeof($gg)-1];
      /* 전달 되어온 파일의 확장자를 $tt 변수에 저장합니다. */


      $path= "/home/ftp/pub/$upfile_name";
      /* 전달 되어온 파일 이름을 path와 함께 $path에 저장합니다. 위는 레드핫 리눅스의 경우 입니다.
         모든 ftp 설정이 디폴트일 경우이며 해당 디렉토리는 nobody가 접근 가능한 상태 입니다. */


      if($tt == "php" || $tt == "php3" || $tt == "php4" || $tt == "html" 
                                || $tt == "htm" || $tt == "inc" || $tt == "txt" )
      {
        echo("
        <script>
        window.alert('이 파일은 등록할 수 없습니다. 다시 입력해 주세요')
        history.go(-1)
        </script>
        ");
        exit;
      }
      /* 업로드 되는 파일의 확장자를 구분해서 등록할 수 없는 파일을 가려 냅니다.
         만약 위 조건에 해당할 경우 에러 박스 화면을 출력합니다. */


      if(file_exists("$path"))
      {
        echo("
        <script>
        window.alert('같은 이름의 화일이 존재합니다. 다시 입력해 주세요')
        history.go(-1)
        </script>
        ");
        exit;
      }
      /* 등록 되는 파일과 똑 같은 이름의 파일이 존재하는지 알아보고 있을 경우 에러 화면을 출력합니다. */
      else
      {
        copy("$upfile" ,"$path");
        /* 업로드 되는 파일을 PHP.INI의 파일 설정에서 정한 디렉토리에서 $path 변수가 가리키는 디렉토리로 copy합니다.
           여기서는 PHP.INI 설정을 디폴트로 했으며 /tmp 디렉토리로 처음 파일을 업로드합니다. */


        mysql_query("insert into $f(title ,name ,passw ,path ,email ,content ,wdate ,no)
        values('$title' ,'$name' ,password('$passw') ,'$upfile_name' ,'$email' ,'$content' ,
        '$wdate' ,'$no')" ,$connect);
        /* 자료실 메인 테이블에 등록하는 자료의 정보를 저장합니다. Password의 경우 mysql 암호화 방식을 통해 저장합니다. */


        echo("
        <html>
        <body>
        <center>
        <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>
        ");


        unlink($upfile);
        /* 글의 등록 여부를 출력하고 , 디폴트로 업로드된(/tmp) 파일을 삭제합니다. */
        mysql_close($connect);
      }
        }

응답 글 입력 화면과 데이터베이스 저장 만들기

    선택한 자료의 응답 글을 입력하는 부분과 입력된 응답 글의 항목들을 데이터베이스에 저장하는 부분을 만듭니다.


    if($chanl == input_newlibchal)
    {
    /* $chanl=input_newlibchal 일 때 응답 글을 입력하는 화면을 출력합니다. */


      if($chanl2 == input_newlibchal2)
      {
      /* $chanl=input_newlibchal , $chanl2 == input_newlibchal2 일 때 입력한 응답 글의 내용을 데이터베이스에 저洋爛求. */

        $wdate = date("y-m-d");
        mysql_query("insert into $f2(name ,email ,tnum ,wdate ,content)
        values('$name' ,'$email' ,'$tnum' ,'$wdate' ,'$content')" ,$connect);
        /* 전달 되어온 응답 글의 내용을 응답 글 테이블에 저장합니다. */


        echo("
        <html>
        <body>
        <center>
        <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>
        ");
      }
      else
      {
        input_newlibchal($tnum ,$f ,$f2) ;
      }
      /* 응답 글 입력 화면을 출력합니다. */

      mysql_close($connect);
    }

특정 자료 정보 보여 주기

    자료실 메인 화면에서 특정 자료의 제목을 클릭할 경우 출력하는 화면입니다.


    if($chanl == title)
    {
      mysql_query("update $f set hit = '$putup[hit]'+1 where no = '$no'" ,$connect) ;
      /* $chanl= title 일 때 해당 자료의 조회수를 1 더해서 저장합니다. */


      view_title($ally2 ,$ally3 ,$no ,$f ,$f2) ;
      /* $chanl= title 일 때 특정 자료의 내용을 보여 줍니다. */
      mysql_close($connect);
    }

자료의 삭제

    특정 자료를 삭제하기 위한 등록자 패스워드 입력 화면과 패스워드를 이용한 해당 자료의 삭제 루틴을 만듭니다.


    if($chanl == del)
    {
      del($no ,$f ,$f2 ,$root);
      mysql_close($connect);
    }
    /* $chanl=del 일 때 해당 자료를 삭제하기 위한 등록자 패스워드 입력 화면을 출력합니다. */


    if($chanl == del_no)
    {
      $input=mysql_query("select password('$passw') " ,$connect );
      $inputpassw = mysql_result($input ,0 ,0);
      /* $chanl == del_no일 때 전달 되어온 패스워드를 password( )함수를 이용해서 암호화합니다. */


      if($putup[passw] == $inputpassw || $root )
      {
        unlink("/home/ftp/pub/$putup[path]");
        /* 전달 되어온 패스워드와 데이터베이스의 패스워드가 일치할 경우 해당 파일을 삭제합니다. */
        $mldel = "delete from $f where no=$no";
        $rsult = mysql_query($mldel ,$connect);
        /* 자료실 메인 테이블에서 해당 자료의 정보를 모두 삭제합니다. */


        $ml2del = "delete from $f2 where tnum=$tnum ";
        $rsult2 = mysql_query($ml2del ,$connect);
        /* 자료실 응답 글 테이블에서 해당 자료의 응답 글의 정보를 모두 삭제합니다. */
      }
      else
      {
        echo("
        <script>
        window.alert('passw가 틀렸습니다. 다시 입력해 주세요')
        history.go(-1)
        </script>
        ");
        exit;
      }


      echo("
      <html>
      <body>
      <center>
      <form method=post action=m.php>
      <font style='font-size:13px;font-style:italic;color:#808080'>
      <b>글이 삭제 되었습니다</b></font>
      <input type=hidden name=no value=$no>
      <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>
      ");
      /* 해당 자료의 모든 정보를 삭제한 후 확인 버튼을 생성하고 자료실 메인 화면으로 이동하게 합니다. */

      mysql_close($connect);
    }



    다음 장에서는 경매 게시판을 설명하겠습니다.

  
    참고. 위 자료실은 지금 쓰는 방식이 아닙니다… 중요한건 위 방법을 이용해서 여러 게시판을 독창적으로
          만들어 볼 수 있습니다.   응답형도 말이져… 요즘의 ftp 자료실은 글게시판과 연동해서 많이들 만들며
          방법은 헤더를 이용해서 파일을 전송 합니다.   자세한 사항은 몇줄 않됩니다. 
          하지만 저가 지금 생각이 나질 않는군요.   허접 하지만 만들어둔게 있어 뒤지면 나올 듯 한데 궁금하신
          분은 메일 주세요…   그리고 경매의 경우 실시간이 아닙니다. 
          단지 처리되는 부분만을 구현 했습니다. 실시간으로 구현하는 방법은 여러 가지가 있으며 쉽게 얻어질
          것입니다…

다음 이전 차례