CI 묻고 답하기

제목 게시판 예제 연습중 A PHP Error was encountered에러가뜹니다..
카테고리 CI 2, 3
글쓴이 요다다잉 작성시각 2021/02/17 15:45:18
댓글 : 7 추천 : 0 스크랩 : 0 조회수 : 21338   RSS

<?php

if (!defined('BASEPATH'))

    exit('No direct script access allowed');

/**

 *  게시판 메인 컨트롤러

 */

 

class Board extends CI_Controller {

    /**

     * 게시물 쓰기

     */

    function write() {

        echo '<meta http-equiv="content-type" content="text/html; charset=utf-8" />';

 

        if ($_POST) {

            // 글쓰기 POST 전송 시

 

            $this -> load -> helper('alert');

 

            // 주소 중에서 page 세그먼트가 있는지 검사하기 위해 주소를 배열로 반환

            $uri_array = $this -> segment_explode($this -> uri -> uri_string());

 

            if (in_array('page', $uri_array)) {

                $pages = urldecode($this -> url_explode($uri_array, 'page'));

            } else {

                $pages = 1;

            }

 

            if (!$this -> input -> post('subject', TRUE) AND !$this -> input -> post('contents', TRUE)) {

                // 글 내용이 없을 경우, 프로그램 단에서 한 번 더 체크

                alert('비정상적인 접근입니다.', '/bbs/board/lists/' . $this -> uri -> segment(3) . '/page/' . $pages);

                exit ;

            }

 

            // var_dump($_POST);

            $write_data = array(

                'subject' => $this -> input -> post('subject', TRUE), 

                'contents' => $this -> input -> post('contents', TRUE), 

                'table' => $this -> uri -> segment(3)

            );

 

            $result = $this -> board_m -> insert_board($write_data);

            

            if ($result) {

                alert("입력되었습니다.",'/bbs/board/lists/'.$this->uri->segment(3).'/page/'.$pages);

                exit;

            } else {

                alert("다시 입력해주세요.",'/bbs/board/lists/'.$this->uri->segment(3).'/page/'.$pages);

                exit;

            }

        } else {

            // 쓰기 폼 view 호출

            $this->load->view('/write_v');

        }

    }

 

     /**

     * 게시물 보기

     */

    function view() {

        // 게시판 이름과 게시물 번호에 해당하는 게시물 가져오기

        $data['views'] = $this -> board_m -> get_view($this -> uri -> segment(3), $this -> uri -> segment(4));

 

        // view 호출

        $this -> load -> view('/view_v', $data);

       

    }

 

    function __construct() {

        parent::__construct();

        $this -> load -> database();

        $this -> load -> model('board_m');

        $this -> load -> helper(array('url', 'date'));

    }

 

    /**

     * 주소에서 메서드가 생략되었을 때 실행되는 기본 메서드

     */

    public function index() {

        $this -> lists();

    }

 

    /**

     * 목록 불러오기

     */

    public function lists() {

 

        $this -> output -> enable_profiler(TRUE);

        // 검색어 초기화

        $search_word = $page_url = '';

        $uri_segment = 5;

 

        // 주소 중에서 q(검색어) 세그먼트가 있는 지 검사하기 위해 주소를 배열로 반환

        $uri_array = $this -> segment_explode($this -> uri -> uri_string());

 

        if (in_array('q', $uri_array)) {

            // 주소에 검색어가 있을 경우 처리

            $search_word = urldecode($this -> url_explode($uri_array, 'q'));

 

            // 페이지네이션 용 주소

            $page_url = '/q/' . $search_word;

 

            $uri_segment = 7;

        }

 

        // 페이지네이션 라이브러리 로딩

        $this -> load -> library('pagination');

 

        // 페이지 네이션 설정

        $config['base_url'] = '/bbs/board/lists/ci_board' . $page_url . '/page/';

        // 페이징 주소

        $config['total_rows'] = $this -> board_m -> get_list($this -> uri -> segment(3), 'count', '', '', $search_word);

        // 게시물 전체 개수

        $config['per_page'] = 5;

        // 한 페이지에 표시할 게시물 수

        $config['uri_segment'] = $uri_segment;

        // 페이지 번호가 위치한 세그먼트

 

        // 페이지네이션 초기화

        $this -> pagination -> initialize($config);

        // 페이지 링크를 생성하여 view에서 사용하 변수에 할당

        $data['pagination'] = $this -> pagination -> create_links();

 

        // 게시물 목록을 불러오기 위한 offset, limit 값 가져오기

        $page = $this -> uri -> segment($uri_segment, 1);

 

        if ($page > 1) {

            $start = (($page / $config['per_page'])) * $config['per_page'];

        } else {

            $start = ($page - 1) * $config['per_page'];

        }

 

        $limit = $config['per_page'];

 

        $data['list'] = $this -> board_m -> get_list($this -> uri -> segment(3), '', $start, $limit, $search_word);

        $this -> load -> view('/list_v', $data);

    }

 

    /**

     * url 중 키 값을 구분하여 값을 가져오도록

     *

     * @param Array $url : segment_explode 한 url 값

     * @param String $key :  가져오려는 값의 key

     * @return String $url[$k] : 리턴 값

     */

 

    function url_explode($url, $key) {

        $cnt = count($url);

 

        for ($i = 0; $cnt > $i; $i++) {

            if ($url[$i] == $key) {

                $k = $i + 1;

                return $url[$k];

            }

        }

    }

 

    /**

     * HTTP의 URL을 "/"를 Delimiter로 사용하여 배열로 바꿔 리턴한다.

     *

     * @param String 대상이 되는 문자열

     * @return string[]

     */

    function segment_explode($seg) {

        // 세그먼트 앞 뒤 "/" 제거 후 uri를 배열로 반환

 

        $len = strlen($seg);

 

        if (substr($seg, 0, 1) == '/') {

            $seg = substr($seg, 1, $len);

        }

 

        $len = strlen($seg);

 

        if (substr($seg, -1) == '/') {

            $seg = substr($seg, 0, $len - 1);

        }

 

        $seg_exp = explode("/", $seg);

        return $seg_exp;

    }

 

}

<?php

if (!defined('BASEPATH'))

    exit('No direct script access allowed');

 

/**

 * 공통 게시판 모델

 */

 

class Board_m extends CI_Model {

    function __construct() {

        parent::__construct();

    }

 

    function get_list($table = 'ci_board', $type = '', $offset = '', $limit = '', $search_word = '') {

 

        $sword = '';

 

        if ($search_word != '') {

            // 검색어 있을 경우

            $sword = ' WHERE subject like "%' . $search_word . '%" or contents like "%' . $search_word . '%" ';

        }

 

        $limit_query = '';

 

        if ($limit != '' OR $offset != '') {

            // 페이징이 있을 경우 처리

            $limit_query = ' LIMIT ' . $offset . ', ' . $limit;

        }

 

        $sql = "SELECT * FROM " . $table . $sword . " ORDER BY board_id DESC " . $limit_query;

        $query = $this -> db -> query($sql);

 

        if ($type == 'count') {

            $result = $query -> num_rows();

        } else {

            $result = $query -> result();

        }

 

        return $result;

    }

 

    /**

     * 게시물 상세보기 가져오기

     *

     * @param string $table 게시판 테이블

     * @param string $id 게시물 번호

     * @return array

     */

    function get_view($table, $id) {

        // 조횟수 증가

        $sql0 = "UPDATE " . $table . " SET hits = hits + 1 WHERE board_id='" . $id . "'";

        $this -> db -> query($sql0);

 

        $sql = "SELECT * FROM " . $table . " WHERE board_id = '" . $id . "'";

        $query = $this -> db -> query($sql);

 

        // 게시물 내용 반환

        $result = $query -> row();

 

        return $result;

 

    }

    

    /**

     * 게시물 입력

     * 

     * @param array $arrays 테이블 명, 게시물 제목, 게시물 내용 1차 배열

     * @return boolean 입력 성공여부

     */

    function insert_board($arrays) {

        $insert_array = array(

            'board_pid' => 0,

            'user_id' => 'advisor',

            'user_name' => 'palpit',

            'subject' => $arrays['subject'],

            'contents' => $arrays['contents'],

            'reg_date' => date("Y-m-d H:i:s")

        );

        

        $result = $this->db->insert($arrays['table'], $insert_array);

        

        return $result;

    }

 

}

 

 

첨부파일 이미지 6.png (203.2 KB)
이미지 2.png (225.3 KB)
이미지 4.png (215.6 KB)
 다음글 로그인 없이 다른 페이지로 가야하는데 반드시 로그인이 ... (1)
 이전글 redirect 시 주소창에 index.php 뜨는것 ... (2)

댓글

변종원(웅파) / 2021/02/17 15:51:09 / 추천 1

이미지가 작아서 소스 내용이 안보이네요

warning 메세지로는 해당 내용들이 없습니다. 컨트롤러에서 뷰로 데이터를 어떻게 넘겼는지 해당부분 소스 올려주세요

PureAni / 2021/02/17 15:58:26 / 추천 1
php8 버전인듯한데, $views 에 $views->subject; 라던가 값이 재대로 들어가 있는지 확인해보셔야 할듯하네요.
변종원(웅파) / 2021/02/17 15:59:34 / 추천 1

확대해보니 책 소스네요. 모델에서 넘어온 내용을 출력해보세요. var_dump($data['views']);

그리고 모델에서 오브젝트 배열로 데이터를 가져왔는지도 확인하시구요

요다다잉 / 2021/02/17 16:10:26 / 추천 0
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8"/>
        <meta name="apple-mobile-web-app-capable" content="yes" />
        <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />
        <title>CodeIgniter</title>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
        <link type="text/css" rel="stylesheet" href="/bbs/css/bootstrap.min.css" />
        <script>
            $(document).ready(function() {
                $("#search_btn").click(function() {
                    if ($("#q").val() == '') {
                        alert("검색어를 입력하세요!");
                        return false;
                    } else {
                        var act = "/bbs/board/lists/ci_board/q/" + $("#q").val() + "/page/1";
                        $("#bd_search").attr('action'act).submit();
                    }
                });
            });
 
            function board_search_enter(form) {
                var keycode = window.event.keyCode;
                if (keycode == 13)
                    $("#search_btn").click();
            }
       </script>
    </head>
    <body>
        <div id="main">
            <header id="header" data-role="header" data-position="fixed">
                <blockquote>
                    <p>
                        만들면서 배우는 CodeIgniter
                    </p>
                    <small>실행 예제</small>
                </blockquote>
            </header>
            <nav id="gnb">
                <ul>
                    <li>
                        <a rel="external" href="/bbs/<?php echo $this -> uri -> segment(1); ?>/lists/<?php echo $this -> uri -> segment(3); ?>"> 
                            게시판 프로젝트 </a>
                    </li>
                </ul>
            </nav>
            <article id="board_area">
                <header>
                    <h1></h1>
                </header>
                <table cellspacing="0" cellpadding="0" class="table table-striped">
                    <thead>
                        <tr>
                            <th scope="col">글제목:<?php echo $views -> subject;?></th>
                            <th scope="col">이름: <?php echo $views -> user_name;?></th>
                            <th scope="col">조회수: <?php echo $views -> hits;?></th>
                            <th scope="col">등록일: <?php echo $views -> reg_date;?></th>
                           <? var_dump($data['views']);?>
                        </tr>
                    </thead>
                    <tbody>
                        <tr>
                            <th colspan="4">
                                글내용<?php echo $views -> contents;?>
                            </th>
                        </tr>
                    </tbody>
                    <tfoot>
                        <tr>
                            <th colspan="4">
                                <a href="/bbs/board/lists/<?php echo $this -> uri -> segment(3); ?>/
                                    page/<?php echo $this -> uri -> segment(7); ?>" class="btn btn-primary">목록 </a>
                                <a href="/bbs/board/modify/<?php echo $this -> uri -> segment(3); ?>/board_id/
                                    <?php echo $this -> uri -> segment(4); ?>/page/<?php echo $this -> uri -> segment(7); ?>"
                                    class="btn btn-warning"> 수정 </a>
                                <a href="/bbs/board/delete/<?php echo $this -> uri -> segment(3); ?>/board_id/
                                    <?php echo $this -> uri -> segment(5); ?>/page/<?php echo $this -> uri -> segment(7); ?>"
                                    class="btn btn-danger"> 삭제 </a>
                                <a href="/bbs/index.php/board/write/ci_board/<?php echo $this -> uri -> segment(3); ?>/page/<?php echo $this -> uri -> segment(7); ?>"
                                    class="btn btn-success">쓰기</a>                    
                            </th>
                        </tr>
                    </tfoot>
                </table>
            </article>
            <footer id="footer">
                <dl>
                    <dt>
                        <a class="azubu" href="http://www.cikorea.net/" target="blank"> CodeIgniter 한국 사용자포럼 </a>
                    </dt>
                    <dd>
                        Copyright by <em class="black">Palpit</em>.
                    </dd>
                </dl>
            </footer>
        </div>
    </body>
</html>


 
요다다잉 / 2021/02/17 16:10:46 / 추천 0
부탁드립니다 ㅠㅠ
요다다잉 / 2021/02/17 17:11:42 / 추천 0
 var_dump($data['views']); 하니깐 똑같은 에러가뜹니다 ㅠㅠ..
ledco / 2021/02/17 18:14:12 / 추천 0

    function view() {

        // 게시판 이름과 게시물 번호에 해당하는 게시물 가져오기

        $data['views'] = $this -> board_m -> get_view($this -> uri -> segment(3), $this -> uri -> segment(4));

        var_dump($data['views']); # 여기서 한번 찍어보죠

        // view 호출

        $this -> load -> view('/view_v', $data);

       

    }