제목 | $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개입니다.
수정을 덜 하셨네요. ^^