자유게시판

제목 기존 DB를 이용해서 게시판을 만들어봤습니다. 고쳐야할부분이 있을까요?..
글쓴이 개락 작성시각 2017/04/18 17:28:50
댓글 : 5 추천 : 0 스크랩 : 0 조회수 : 523   RSS
컨트롤러 파일입니다.
<?php
if (!defined('BASEPATH')) exit('No direct script access allowed');

/**
 * todo controller.
 *
 *
 */
class Board extends CI_Controller
{

    function __construct()
    {
        parent::__construct();
        $this->load->database();
        $this->load->model('board/Board_m');
        $this->load->helper(array('url', 'date', 'lib'));
        $this->load->library('session');
        $this->load->helper('alert');
    }

    /**
     * 주소에서 메소드가 생략되었을 때 실행되는 기본 메소드
     */
    public function index()
    {
        $this->lists();
    }

    public function _remap($method)
    {
        get_login(@$this->session->userdata['logged_in']);
        //헤더 include
        $this->load->view('Header_v');

        if (method_exists($this, $method)) {
            $this->{"{$method}"}();
        }

        //푸터 include
        $this->load->view('Footer_v');
    }

    public function lists()
    {
        $this->load->library("pagination");
        //파라미터 처리
        $page = $this->input->get('page', true);
        $sch_val = urldecode($this->input->get('sch_val', true));
        $where = " AND BOA_TITLE LIKE '%" . iconv("euc-kr", "utf-8", $sch_val) . "%'";
        //페이지네이션 설정
        $config['num_links'] = 9;
        $config['use_page_numbers'] = true;
        $config['page_query_string'] = TRUE;
        $config['query_string_segment'] = 'page';
        $config['base_url'] = '/board/lists/?sch_val=' . $sch_val;
        $config['total_rows'] = $this->Board_m->total_rows('gms2010..tb_postboard', $where);//전체 게시물 수
        $config['per_page'] = 20;
        $config['uri_segment'] = 4;

        $this->pagination->initialize($config);
        $data['pagination'] = $this->pagination->create_links();
        $data['sch_val'] = $sch_val;
        $data['lnkParam'] = "page=" . $page . "&sch_val=" . $sch_val;
        if (empty(trim($page))) $page = 1;

        $data['list'] = $this->Board_m->get_list('gms2010..tb_postboard', '', $page, $config['per_page'], $sch_val);
        //목록 호출
        //echo $config['total_rows'].' '.$page;
        $this->load->view('board/list', $data);
    }

    public function view()
    {
        $page = $this->input->get('page', true);
        $sch_val = urldecode($this->input->get('sch_val', true));
        $data['page'] = $page;
        $data['sch_val'] = $sch_val;
        $data['lnkParam'] = "page=" . $page . "&sch_val=" . $sch_val;
        $data['view'] = $this->Board_m->get_view($this->uri->segment(3));
        $this->load->view('board/board_v', $data);
    }

    public function write()
    {
        $page = $this->input->get('page', true);
        $sch_val = urldecode($this->input->get('sch_val', true));
        $data['page'] = $page;
        $data['sch_val'] = $sch_val;
        $data['lnkParam'] = "page=" . $page . "&sch_val=" . $sch_val;
        echo '<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />';
        if ($_POST) {
            if (!$this->input->post("boa_title", true) AND !$this->input->post('boa_content', true)) {
                alert("올바른 접근이 아닙니다.", "/board/lists?" . $data['lnkParam']);
                exit;
            }
            else
            {
                $write_data = array(
                    'boa_title' => $this->input->post("boa_title",true),
                    'boa_content' => $this->input->post("boa_content",true)
                );
                $result = $this->Board_m->insert_board($write_data);
                if ($result)
                {
                    alert("입력성공","/board/lists?".$data["lnkParam"]);
                }
                else
                {
                    alert("입력실패","/board/lists?".$data["lnkParam"]);
                }
                exit;
            }
        } else {
            $this->load->view('board/board_w', $data);
        }
    }
    function modify()
    {
        $page = $this->input->get('page', true);
        $sch_val = urldecode($this->input->get('sch_val', true));
        $data['page'] = $page;
        $data['sch_val'] = $sch_val;
        $data['lnkParam'] = "page=" . $page . "&sch_val=" . $sch_val;
        echo '<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />';
        if ($_POST)
        {
            if (!$this->input->post("boa_title", true) AND !$this->input->post('boa_content', true)) {
                alert("올바른 접근이 아닙니다.", "/board/lists?" . $data['lnkParam']);
                exit;
            }
            else
            {
                $modify_data = array(
                    'boa_idx' => $this->uri->segment(3),
                    'boa_title' => $this->input->post("boa_title",true),
                    'boa_content' => $this->input->post("boa_content",true)
                );
                $result = $this->Board_m->modify_board($modify_data);
                if ($result)
                {
                    alert("수정성공","/board/view/".$this->uri->segment(3)."?".$data['lnkParam']);
                }
                else
                {
                    alert("수정실패","/board/view/".$this->uri->segment(3)."?".$data["lnkParam"]);
                }
                exit;
            }
        }else{
            $data['view'] = $this->Board_m->get_view($this->uri->segment(3));
            $this->load->view("board/board_m", $data);
        }
    }

}

/* End of file main.php */
/* Location: ./application/controllers/main.php */
?>

모델입니다.

<?php if (!defined("BASEPATH")) exit('정상적인 접근이 아닙니다.');

/**
 * Created by PhpStorm.
 * User: DevJS
 * Date: 2017-04-17
 * Time: 오후 2:21
 */
Class Board_m extends CI_Model
{
    function __construct()
    {
        parent::__construct();
    }

    function get_list($table = 'gms2010..tb_postboard', $type = '', $page = 1, $numOfList = '', $sch_val = '')
    {
        $sql = ";WITH CTE_LIST AS ( SELECT BOA_IDX,CAM_IDX,BOA_TITLE,BOA_READCOUNT,REGDATE,STF_IDX";
        $sql = $sql . ",ROW_NUMBER() OVER (ORDER BY BOA_MAINYN DESC, BOA_IDX DESC, CAM_IDX ASC) AS ROWNUM FROM " . $table;
        $sql = $sql . " WHERE 1 = 1";
        if (isset($sch_val)) $sql = $sql . " AND BOA_TITLE LIKE '%" . iconv("utf-8", "euc-kr", $sch_val) . "%'";
        $sql = $sql . " ) SELECT * FROM CTE_LIST";
        $sql = $sql . " WHERE ROWNUM BETWEEN ((" . $page . " - 1) * " . $numOfList . ") + 1 AND " . $page . " * " . $numOfList;
        $sql = $sql . " ORDER BY ROWNUM ASC";
        //echo $sql."<BR/>";
        $QUERY = $this->db->query($sql);
        if ($type == 'count') {
            $result = $QUERY->num_rows();
        } else {
            $result = $QUERY->result();
        }

        return $result;
    }

    function total_rows($table = 'gms2010..tb_postboard', $where = '')
    {
        $sql = "SELECT COUNT(BOA_IDX) AS CNT FROM " . $table . " where 1 = 1" . $where;
        //echo $sql;
        $QUERY = $this->db->query($sql);
        $result = $QUERY->row();
        return $result->CNT;
    }

    function get_view($boa_id = '')
    {
        $sql = "UPDATE GMS2010..TB_POSTBOARD SET BOA_READCOUNT = BOA_READCOUNT + 1 WHERE BOA_IDX = '" . $boa_id . "'";
        $this->db->query($sql);
        $sql = "SELECT * FROM GMS2010..TB_POSTBOARD WHERE BOA_IDX = '" . $boa_id . "'";
        $query = $this->db->query($sql);
        $result = $query->row();
        return $result;
    }

    function insert_board($array_data)
    {
        $date = gmdate('Y-m-d h:m:s', time());
        $insert_array = array(
            'STF_IDX' => 0,
            'CAM_IDX' => 0,
            'STF_SUBJECT' => 1,
            'BOA_TITLE' => iconv("utf-8","euc-kr",$array_data['boa_title']),
            'BOA_CONTENT' => iconv("utf-8","euc-kr",$array_data['boa_content']),
            'BOA_READCOUNT' => 0,
            'BOA_MAINYN' => 0,
            'REGDATE' => $date
        );
        $result = $this->db->insert("GMS2010..TB_POSTBOARD",$insert_array);
        return $result;
    }

    function modify_board($array_data)
    {
        $update_array = array(
            'BOA_TITLE' => iconv("utf-8","euc-kr",$array_data['boa_title']),
            'BOA_CONTENT' => iconv("utf-8","euc-kr",$array_data['boa_content'])
        );
        $where = array(
            'BOA_IDX' => $array_data['boa_idx']
        );
        $result = $this->db->update('GMS2010..TB_POSTBOARD',$update_array,$where);
        return $result;

    }
}

리스트입니다.

<?php
/**
 * Created by PhpStorm.
 * User: DevJS
 * Date: 2017-04-17
 * Time: 오후 2:21
 */
?>
<form action="/board/lists" name="sch_frm" id="sch_frm" method="get">
<table>
    <tr>
        <th>검색</th>
        <td><input type="text" name="sch_val" id="sch_val" value="<?php echo $sch_val;?>"><input type="submit" value="검색"/> </td>
    </tr>
</table>
</form>
<table>
    <tr>
        <th>캠퍼스</th>
        <th>작성자</th>
        <th>제목</th>
        <th>조회수</th>
        <th>등록일</th>
    </tr>
    <?php
foreach ($list as $lt)
{
    ?>
    <tr>
        <td><?php echo get_campus($lt->CAM_IDX);?></td>
        <td><?php echo $lt->STF_IDX;?></td>
        <td><a href="/board/view/<?php echo $lt->BOA_IDX?>?<?php echo $lnkParam;?>"><?php echo iconv('euc-kr','utf-8',$lt->BOA_TITLE);?></a></td>
        <td><?php echo $lt->BOA_READCOUNT;?></td>
        <td><?php echo $lt->REGDATE;?></td>
    </tr>
    <?php
}
?>
</table>
<table>
    <tr>
        <th><?php echo $pagination;?></th>
    </tr>
</table>
<div><a href="/board/write?<?php echo $lnkParam;?>">쓰기</a></div>

수정입니다.

<?php
/**
 * Created by PhpStorm.
 * User: DevJS
 * Date: 2017-04-18
 * Time: 오후 12:01
 */
?>
<form name="frm" id="frm" method="post" action="" action="">
    <table>
        <tr>
            <th>제목</th>
            <td><input type="text" value="<?php echo iconv("euc-kr","utf-8",$view->BOA_TITLE);?>" name="boa_title" id="boa_title"/> </td>
        </tr>
        <tr>
            <th>내용</th>
            <td>
                <textarea name="boa_content" id="boa_content"><?php echo iconv("euc-kr","utf-8",$view->BOA_CONTENT);?></textarea>
            </td>
        </tr>
    </table>
    <div><input type="submit" value="등록"/><a href="/board/lists?<?php echo $lnkParam;?>">목록</a> </div>
</form>

asp만 주구장창 하다가 리눅스 서버 세팅하고 이제서야 게시판 하나 만들어봤습니다.

만들면서배우는~~ 책을 보면서 작업한 부분들입니다.

다른부분보다 세그먼트로 URL 처리하는 부분이 생소해서 쿼리스트링 방식으로 변경하였고(검색 값이 많은 페이지들이라..) 페이징부분은 자료가 많은데

그냥 페이지네이션 라이브러리 사용했습니다.

로그인체크 부분은 함수로 만들어서 _remap에서 호출하는걸로 했는데 리스트와 뷰를 권한을 안줘야하는 경우는 각 함수별로 따로 호출하면 될꺼같습니다.

이어 질문도 있습니다..^^;

일반적으로 게시판작업하시면 메뉴부분을 그룹별로 권한을 달리해서 다른 메뉴가 나오게 처리를 해야하는 경우에 header_v부분에 db값을 뽑아야하면 어떻게 처리를 해야하는건지요..?;;

어쩔수 없이 mssql에 연결하다보니 케릭터셋 문제로 매번 변경을 해줘야하는데 이부분 혹시 ci상에 만들어져있는건 없나요?

마지막으로 로그인체크나 기타 필요한 함수들은 헬퍼로 따로 만들어서 호출을 하는데 헬퍼와 라이브러리의 차이점을 잘 모르겠습니다..^^;

 

 다음글 kt ucloud biz 교육왔는데,,,, (6)
 이전글 네이버 클라우드 서버 출시! (5)

댓글

kaido / 2017/04/18 17:39:12 / 추천 0

딱히 큰건 아니지만... 깨알팁 하나!

get_login(@$this->session->userdata['logged_in']);

이거 보다는

get_login($this->session->userdata('logged_in'));

이게 조금 더 깔끔 하게 작동 합니다.

 

사실은 remap 에서도 db가 불어와 집니다.

db 데이터 값을 받아와야 한다면 remap 에서 불러다가 header 에다 넘겨줄수도 있습니다.

넘겨주는 방식은 일방적인 view 에다 데이터 넘겨주는것과 동일 하구요.

 

gnb 작업이라면 remap 아니라도 helper 에서 db 불러다 체크해서 작업 가능 합니다.

 

헬퍼와 라이브러리의 차이는  function 와 class의 차이입니다.

가볍게 단일 리턴 이면 헬퍼가 가볍고, 조금더 체계적으로 객체를 짜실거면 라이브러리로 만드시면 됩니다.

변종원(웅파) / 2017/04/18 17:44:44 / 추천 0

권한에 따른 메뉴부분은 라이브러리나 모델로 만들어서 처리하시면 됩니다.

_remap() 내에서 권한에 따른 메뉴를 리턴하는 라이브러리나 모델을 호출하여 리턴한 데이터를 header_v에 전달하여 처리.

캐릭터셋 부분은 set names utf8 로 검색해보세요.

 

헬퍼는 함수모음, 라이브러리는 클래스입니다.

 

개락 / 2017/04/18 18:23:22 / 추천 0

@을 빼고 하니 로그아웃해서 세션을 distroy시켜버리면 에러가 나더라구요. 그래서 넣은건데 다시 체크 해볼께요. 

헬퍼와 라이브러리의 차이가 그런거군요..

틀에 잡혀있는게 아니고 개발을 어떻게 하느냐에 따라 많이 달라지는거같네요..

좋은 정보 감사합니다..^^

 

kaido / 2017/04/19 09:27:46 / 추천 0

자세히 보세요.

@ 만 뺀게 아닙니다 ㅎㅎ

개락 / 2017/04/19 10:01:57 / 추천 0
ㅎㅎ 대괄호가 소괄호로 바꼈군요 감사합니다..!! 어쩐지..ㅠㅠ