본문 바로가기

Knowhow/Programming

PHP 강의 2 조회(248)

PHP 강의 2
조회(248)
프로그래밍 | 2007/11/16 (금) 16:18
추천 | 스크랩
이 강의는 게시판을 만드는것에 대한것이 아닙니다.
일반 글을 쓰는 게시판이라기보단 DB의 데이타를 게시판형식으로 출력하는 부분에 대한 강의입니다.
웹프로그램을 하다보면 회원목록, 게시물목록, 로그등 다양한 DB의 기록을 게시판형식으로 보여줘야할 경우가 많습니다.
매번 같은일을 하면서 코딩이 많다고 느끼신적은 없는지요?

2편 게시판

본 강의는 1편 DB를 이용합니다.
일단 게시판 클래스 소스입니다. 억지로 소스코드를 이해하려고 할 필요는 없습니다.

  1. <?php
  2. require_once "common.php";    //common function
  3. require_once "mydb.php";    //db class
  4. class board
  5. {
  6.    var $db;
  7.    var $FNAME;
  8.    var $LIST_SIZE, $SQL_LIST;
  9.    var $TOTAL;
  10.    var $pagelist;
  11.    var $start;
  12.    function board($db)
  13.    {
  14.        $this->db=$db;
  15.        $this->FNAME=$_SERVER[PHP_SELF];
  16.    }
  17.    function config($totalsql, $listsql, $listsize)
  18.    {
  19.        $this->TOTAL=$this->db->qo($totalsql)+0;
  20.        $this->SQL_LIST=$listsql;
  21.        $this->LIST_SIZE=$listsize;
  22.    }
  23.    function blist($page, $add='', $pageline=10)
  24.    {
  25.        if(!$page) $page=1;
  26.        $this->pagelist=paging($this->FNAME, $page, $this->TOTAL, $this->LIST_SIZE, $pageline, $add, $start, $end);
  27.        if($start) $start--;
  28.        $sql=$this->SQL_LIST. " limit $start, ". $this->LIST_SIZE;
  29.        $data=$this->db->q($sql);
  30.        $this->start= $this->TOTAL - $start ;     //게시물의 번호를 얻기위한 변수
  31.        return $data;
  32.    }
  33. }
  34. ?>
소스는 간단합니다. 페이징 처리는 common.php 에 따로 함수로 만들어서 사용하고 있습니다.
그럼 게시판 클래스가 어떻게 사용되는지 한번 보도록 하겠습니다.

  1. <?php
  2. require_once "board.php";
  3. require_once "mydb.php";
  4. $page=$_REQUEST[page];    //현재 페이지를 받는다
  5. $mydb=new mydb();    //db생성
  6. $board=new board($db);    //게시판 클래스 생성
  7. $totalsql="select count(*) from user ";    //사용자의 수를 세는 퀴리
  8. $listsql="select * from user ";    //사용자의 정보를 보여주는 퀴리
  9. $board->config($totalsql, $listsql, 30);    //설정에 퀴리를 넣고 30은 한페이지당 보여줄 겟수이다
  10. $add="&age=$age&date=$date";     //검색후 페이지 이동시 추가정보
  11. $data=$board->blist($page, $add);    //현재 페이지와 페이지 이동시 추가적인 정보를 전달한다
  12. $pagelist=$board->pagelist;     //페이지 넘기는부분 코드가 생성되어 변수로 나온다
  13. foreach($data as $key => $val)
  14. {
  15.    $no=$board->start - $key;    //현재 글의 번호를 만든다
  16.    echo "$no - $val[name] - $val[birth]";    //글번호 - 이름 - 생일 을 출력한다
  17. }
  18. echo $pagelist;    //페이지 넘기는 부분[이전] [1] [2] [3] [다음] 출력 common.php 안에 참고
  19. ?>
조금 사용법이 복잡해 보일진 몰라도 그도안 게시판형식으로 데이타를 보여주기위한 작업을 생각하신다면 많이 간결해진것을 느끼실 겁니다.
그리고 디자인적인 요소는 템플릿을 하나 배우셔서 사용하시길 권합니다.
저는 보통 Template_ (http://www.xtac.net/ ) 를 많이 사용합니다. 템플릿의 종류는 중요하지 않습니다. 자신이 편하다고 생각하시는 것을 사용하시는게 좋습니다.
템플릿을 사용하면 속도가 느려지지 않을까하는 고민을 하시는분도 있습니다.
하지만 편리함을 생각하신다면 0.001초의 속도는 중요하지 않습니다.
프로그램은 반복적인것을 컴퓨터에게 명령하기 위해 배우니깐요^^;
그 속도를 줄이는 시간에 차라리 하드웨어를 업그레이드하는것이 비용이 더 적게든다고 생각합니다.

이와 비슷한 예제로 DB가 아닌 배열을 게시판형식으로 사용하는 클래스를 소개합니다.

  1. <?php
  2. class boardarr
  3. {
  4.    var $FNAME;
  5.    var $data;
  6.    function boardarr()
  7.    {
  8.        $this->FNAME=$_SERVER[PHP_SELF];
  9.    }
  10.    function config($data, $listsize)
  11.    {
  12.        $this->data=$data;
  13.        $this->LIST_SIZE=$listsize;
  14.    }
  15.    function blist($page, $add='', $pageline=10)
  16.    {
  17.        if(!$page) $page=1;
  18.        $total=count($this->data);
  19.        $this->pagelist=paging($this->FNAME, $page, $total, $this->LIST_SIZE, $pageline, $add, $start, $end);
  20.        if($start) $start--;
  21.        $data=array_slice($this->data, $start, $this->LIST_SIZE);
  22.                
  23.        $this->start= $this->TOTAL - $start ;
  24.        return $data;
  25.    }
  26.    function csort($array, $column, $ops=0)    // 디폴트 내림차순
  27.    {
  28.        foreach($array as $key => $val)
  29.        {
  30.            if($val[$column] != false)
  31.            {
  32.                $array2[]=$val;
  33.            }
  34.        }
  35.        for($i=0; $i<count($array2); $i++){
  36.                $sortarr[]=$array2[$i][$column];
  37.        }
  38.        $op = array(SORT_DESC, SORT_ASC);     // 내림차순 : 오름차순
  39.        @array_multisort($sortarr, $op[$ops], $array2);
  40.        return($array2);
  41.    }
  42. }
  43. ?>
위의 DB를 사용한 클래스와 비슷합니다.
다만 배열의 데이타를 게시판형식으로 보여주는데 사용합니다.

  1. <?php
  2. require_once "boardarr.php";
  3. //예제 배열 데이타
  4. $data[0][no]=1;
  5. $data[1][no]=2;
  6. $data[2][no]=3;
  7. $data[3][no]=4;
  8. $data[0][title]="aaa";
  9. $data[1][title]="bbb";
  10. $data[2][title]="ccc";
  11. $data[3][title]="ddd";
  12. $page=$_REQUEST[page];    //현재 페이지를 받는다
  13. $board=new boardarr();    //클래스 생성
  14. $data=$board->csort($data, 'no');    //no 를 기준으로 배열을 정렬한다
  15. $board->config($data, 10);    //배열 데이타와 한페이지에 보여줄갯수를 설정한다
  16. $add="&age=$age&date=$date";     //검색후 페이지 이동시 추가정보
  17. $data=$board->blist($page, $add);    //현재 페이지와 페이지 이동시 추가적인 정보를 전달한다
  18. foreach($data as $key => $val)
  19. {
  20.    $no=$board->start - $key;    //현재 글의 번호를 만든다
  21.    echo "$no - $val[no] - $val[title]";    //글번호 - 번호 - 제목 을 출력한다
  22. }
  23. echo $pagelist;    //페이지 넘기는 부분[이전] [1] [2] [3] [다음] 출력 common.php 안에 참고
  24. ?>

사용법도 DB를 사용하는 게시판 클래스와 비슷합니다.
배열형식을 게시판형식으로 보여줄일은 많지 않지만 디렉토리의 파일목록을 보여주는일등에 사용할 수 있습니다.

이것으로 2편 게시판 강의를 마칩니다^^ [이 게시물은 PHPSCHOOL님에 의해 2006-02-21 15:11:12 팁앤테크에서 복사 됨]