| 제목 | $search_word가 넘어오질 않습니다. | ||
|---|---|---|---|
| 글쓴이 | PCB | 작성시각 | 2017/11/02 12:08:32 | 
| 
                         | 
                |||
| 
                         게시판에 검색어를 입력하고 검색을 실행하면 검색어가 있는데 쿼리에 적용이 안됩니다. DB에서 검색어 쿼리를 실행하면 정상적으로 실행되어 리스트는 나옵니다. 
 콘트롤에서 $data['list'] = $this->board_m->get_list($this->uri->segment(3), '', $start, $limit, $search_word='8'); 임의로 검색어를 '8'로 적용하면 해당하는 검색어 리스트가 출력됩니다. 
 증상) 콘트롤러에서 $data['list'] = $this->board_m->get_list($this->uri->segment(3), '', $start, $limit, $search_word); 
 모델에서 function get_list($table='ci_board', $type='', $offset='', $limit='', $search_word='') $search_word로 콘트롤러에서 넘어오질 않는것으로 판단됩니다. 
 질문 1. 2번전과 3번전에 차이가 있는건지요? (현재 3버전에서 테스트 중입니다.) 질문2. 프로파일러에서 $_POST['search_word'] / URI STRING 다 넘어오는것을 확인 됩니다. 
 근데 왜 안되는지 모르겠습니다.  | 
                |||
| 다음글 | No such file or directory [ 경고... (5) | ||
| 이전글 | bbs 글 쓰기시 익스플로러에서 이중등록되는 문제 (1) | ||
| 
                             
                                변종원(웅파)
                                /
                                2017/11/02 14:23:41 /
                                추천
                                0
                             
                             | 
                    
| 
                             
                                PCB
                                /
                                2017/11/02 21:24:19 /
                                추천
                                0
                             
                            // 컨트롤러에서는 파라미터가 4개, 모델에선 파라미터가 5개입니다. $config['total_rows'] = $this->board_m->get_list($this->uri->segment(3), 'count', '', '', $search_word); $data['list'] = $this->board_m->get_list($this->uri->segment(3), '', $start, $limit, $search_word); 원본 소스에도 컨트롤러에 파라미터 5개, 모델에서도 5개로 나오는데 콘트롤러에서 4개라는 건 어떤걸 말씀하시는건지요?  | 
                    
| 
                             
                                변종원(웅파)
                                /
                                2017/11/03 10:06:30 /
                                추천
                                0
                             
                            본문 수정하신 것 같네요. 컨트롤러에서 넘어온 $seach_word와 모델에서 받은 $seach_word 출력해보세요. 값 출력해보는 것은 아주 원초적이지만 제일 강력하고 쉬운 디버깅 방법입니다. 8이라는 값을 명시했을 때 검색된다는 것과 $_POST 변수에서는 있다는 것으로 미뤄봐서 컨트롤러에서 $seach_word 라는 값을 할당하지 않은 것 같네요. 컨트롤러 해당 소스를 올려보세요.  | 
                    
| 
                             
                                PCB
                                /
                                2017/11/03 10:36:34 /
                                추천
                                0
                             
                            답변 주셔서 감사하고 다시한번 확인 부탁드립니다. ^^ 
그동안 답변을 주신 내용을 정리하면 
컨트롤러에 파라미터4개 -> 페이지네이션 적용시 말씀인것으로 예상 
컨트롤러에 파라미터 개수와 순서가 잘 못 됐다 -> 요 부분은 원본 소스와 똑같이 적용했는데 안됩니다. ㅠㅠ 
컨트롤러 소스 
public function lists() 
{ 
$this->output->enable_profiler('TURE'); 
// 검색어 초기화 
$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/personal/lists/learn'.$page_url.'/page/'; //페이지 주소 
$config['total_rows'] = $this->personal_m->get_list($this->uri->segment(3), 'count', '', '', $search_word); // 게시물 전체 개수 
// 게시물 전체 갯수 
$config['per_page'] = 12; // 한 페이지에 표시할 게시물 수 
$config['uri_segment'] = $uri_segment; // 페이지 번호가 위치한 세그먼트 
// 페이지네이션 초기화 
$this->pagination->initialize($config); 
// 페이징 링크를 생성하여 view에서 사용할 변수에 할당 
$data['pagination'] = $this->pagination->create_links(); 
// 게시물 목록을 불러오기 위한 offset, limit 값 가져오기  
$data['page'] = $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->personal_m->get_list($this->uri->segment(3), '', $start, $limit, $search_word); 
$this->load->view('learn/personal_list', $data); 
} 
모델 소스 
function get_list($table='learn', $type='', $offset='', $limit='', $search_word='') 
    { 
      echo $search_word; 
      $sword = ' WHERE learn_type = 1'; 
      if ( $search_word != '' )  
      { 
        // 검색어가 있을 경우의 처리 
        $sword = ' WHERE title LIKE "%'.$search_word.'%" OR item LIKE "%'.$search_word.'%" AND learn_type = 1'; 
      } 
        $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(); 
          // $this->db->count_all($table); 
        } 
        else  
        { 
          // 게시물 리스트 반화 
          $result = $query->result(); 
        }    
        return $result; 
    } 
 | 
                    
| 
                             
                                변종원(웅파)
                                /
                                2017/11/03 13:55:55 /
                                추천
                                0
                             
                            컨트롤러에서 아래 부분이 주소에서 검색어를 가져오는 부분입니다. 주소에 q 라는 부분이 없으면 $search_word를 찾아오지 못합니다. 주소를 확인해보세요. 
 // 주소에 검색어가 있을 경우의 처리, 즉 검색 시 
$search_word = urldecode($this->url_explode($uri_array, 'q')); 
                             | 
                    
| 
                             
                                PCB
                                /
                                2017/11/03 14:25:30 /
                                추천
                                0
                             
                            답변을 계속 주시는데 틀린점을 찾지 못해서 계속 헤메고 있습니다. ㅠㅠ 
 $search_word = urldecode($this->url_explode($uri_array, 'q')); 말씀하신 부분은 소스에 적용되어 있고, 검색어 입력 후 URL("personal/lists/learn/q/8/page/1", 프로파일에서도 정상적으로 검색어 보여집니다. ) 주소에도 표시는 됩니다. 위의 코드는 $page_url로 받아서 url에 표시되는걸로 알고 있습니다. 
 프로그램언어라는게 참 어렵습니다!!! ㅜㅠ  | 
                    
| 
                             
                                변종원(웅파)
                                /
                                2017/11/03 14:47:28 /
                                추천
                                0
                             
                            
                                컨트롤러에서 출력을 해보세요. 
                             
                         | 
                    
컨트롤러에서는 파라미터가 4개, 모델에선 파라미터가 5개입니다.
수정을 덜 하셨네요. ^^