만들면서 배우는 CodeIgniter Q&A

제목 게시판 데이터 출력이 이상해서 질문드립니다.
글쓴이 다스부 작성시각 2013/07/25 18:11:06
댓글 : 4 추천 : 0 스크랩 : 0 조회수 : 10632   RSS
하루 종일 고민하다가 질문 드립니다.

교재 p77~p91 까지의 내용중 질문 입니다.

<?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')
 {
  $sql = "SELECT * FROM ".$table." ORDER BY board_id DESC";
  $query = $this->db->query($sql);
  $result = $query->result_array();

  return $result;
 }


}
위 코드는 모델 코드 입니다.

1. 첫번째 질문 입니다.

$sql에 table 변수를 읽지 못해 데이터 베이스 오류가 납니다. 

에러 내역은 다음과 같습니다.

Error Number: 1064
SELECT * FROM ORDER BY board_id DESC

처럼 테이블 명을 제대로 가져오지 못합니다.

2. 두번째 질문 입니다.


<article id="board_area">
 <header>
  <h1></h1>
 </header>
 <table cellspaCodeIgniterng="0" cellpadding="0">

  <thead>
   <tr>
    <th scope="col">번호</th>
    <th scope="col">제목</th>
    <th scope="col">작성자</th>
    <th scope="col">조회수</th>
    <th scope="col">작성일</th>
   </tr>
  </thead>
 <tbody>
 <?php print_r($list)?>
<?php
 foreach($list as $lt)
 {
?>
   

   <tr>
     <th scope="row">
      <?php echo $lt->board_id;?>
     </th>
     <td><a rel="external" href="/bbs/<?php echo $this->uri->segment(1);?>/view/<?php echo $this->uri->segment(3);?>/board_id/<?php echo $lt->board_id;?>/page/<?php echo $page;?>"><?php echo $lt->subject;?></a></td>
     <td><?php echo $lt->user_name;?></td>
     <td><?php echo $lt->hits;?></td>
     <td><time datetime="<?php echo mdate("%Y-%M-%j", human_to_unix($lt->reg_date));?>"><?php echo mdate("%M. %j, %Y", human_to_unix($lt->reg_date));?></time></td>
   </tr>
<?php
}
?>
 </tbody>
 </table>
 </article>

위 코드는 제 뷰 코드 입니다. 
웅파님께서 예제코드로 배포하신것중 4.1 부분에 해당 부분만 편집하여 붙여 넣은 뷰 입니다.

모델의 $sql 에 $table 변수를 ci_board 라고 명시 하고 테스트해 보았습니다.

print_r($list) 를 하여 데이터를 확인해 보니 데이터는 전부 가져 오는것을 확인했습니다.

하지만 테이블에 뿌려지는 값은 board_id 가 제일 높은 값 한개만 표시가 되더군요.

왜 한개만 표시가 되는지 이해가 안가서 질문 드립니다.

세번째, 질문입니다..
bootstrap 적용이 안되서 한글이 깨지던데, _remap 함수를 정의 했음에도 왜그런것 인지 궁금합니다.


제 컨트롤러 소스도 혹시 몰라 첨부 합니다.

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Board extends CI_Controller {
 function __construct()
 {
  parent::__construct();
  $this->load->database();
  $this->load->model('board_m');
 }

 public function index()
 {
  $this->lists();
 }

 public function _remap($method)
 {
  $this->load->view('header_v');

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

  $this->load->view('footer_v');
 }

 public function lists()
 {
  $data['list'] = $this->board_m->get_list($this->uri->segment(3));
  $this->load->view('board/list_v',$data);
 }
}

나름대로 여기저기 다 찾아보아도 답이 안나와 질문 드립니다.

감사합니다.


 다음글 책 56Page mdate 문제.. (8)
 이전글 섹션별로 코드가 나눠져 있었으면 좋겠어요. (1)

댓글

변종원(웅파) / 2013/07/25 18:40:34 / 추천 0
1. 테이블명은 주소를 잘못 사용해서 그렇습니다.

http://localhost/bbs/board/lists/ci_board/page/1

4번째 세그먼트가 테이블명입니다.


2. 2번 질문도 아마 테이블명과 연관이 있는 것 같습니다. 주소를 제대로 해서 테스트해보세요.


3. 부트스트랩과 한글은 상관이 없습니다. 브라우저의 캐릭터셋을 확인하세요.
ci는 utf-8 입니다.
변종원(웅파) / 2013/07/25 21:39:49 / 추천 0
2번 추가 답변입니다.

모델에서는 일반배열(result_array())로 가져오고 뷰에서는 객체배열($lt->board_id)형태를 사용하고 있습니다.

책 내용을 다시 보시면 일반배열은 주석처리 되어 있고 객체배열(result())로 되어 있습니다. 87페이지 5번

print_r($list) 로 정상적으로 몇개의 데이터가 나왔다면 그 밑의 foreach()문에서도 똑같은 수의 리스트가 나오는 것이 정상입니다. 모델을 result_array()에서 result()로 바꿔보세요.
다스부 / 2013/07/26 10:02:17 / 추천 0
 빠른 답변 감사합니다!!

잘 지도해주신 덕분에 제대로 출력이 되는군요! 


하나 더 여쭤봐도 될까요? 

여전히 모델에서 sql 을 $sql = "SELECT * FROM ".$table." ORDER BY board_id DESC"; 로 하면 안되더군요..

ci_board라고 하드 코딩하면 되긴 하던데..

세그먼트 숫자 말씀하신거 처럼 4로 바꿔도 안되더라구요..




변종원(웅파) / 2013/08/01 23:18:46 / 추천 0
주소에서 네번째 세그먼트가 게시판명입니다. 그게 제대로 안되어 있으면 모델에서
테이블명을 가져오지 못합니다.
책 보시고 주소를 제대로 입력해보세요. (첫번째 답변에도 있습니다)