CI 묻고 답하기

제목 다중 검색 필드를 POST로 받아 온 경우 페이지 이동시 POST값을 유지시키는 방법은 어떤게 있을까요?
카테고리 CI 2, 3
글쓴이 규리규얼 작성시각 2018/03/16 12:12:43
댓글 : 9 추천 : 0 스크랩 : 0 조회수 : 16093   RSS
<form method="post" id="search_area">
                         <th></th>
                         <th><input class="form-control input-sm" type="text" id="subject" name="subject" placeholder="제목 검색"/></th>
                         <th style="width:10%;"><input class="form-control input-sm" id="author" name="author" value="" placeholder="작성자 검색"></th>
                         <th>
                             <div class="form-inline"> <!-- Date input -->
                                 <input class="form-control input-sm" id="fromdate" name="fromdate" placeholder="from" value="" type="text"/>
                                 <input class="form-control input-sm" id="todate" name="todate" placeholder="to" value="" type="text"/>
                                 <input type="button" class="btn btn-primary" id="part_search" value="검색"/>
                             </div>
                        </th>
                        <th></th>
                     </form>

 

view에 폼 부분입니다.

 

$("#part_search").click(function() {
        //각 변수 대입
        var subject = $("#subject").val();
        var author = $("#author").val();
        var fromDate = $("#fromdate").val();
        var toDate = $("#todate").val();

        //날짜 비교를 위해 Date객체로 formatting
        var vsfromDate = new Date(fromDate);
        var vstoDate = new Date(toDate);

        if (vsfromDate > vstoDate) {
            alert("검색 범위가 잘못되었습니다.");
            $("#fromdate").val("");
            $("#todate").val("");
        } else {
            var act = "/bbs/lists/latest/";
            $("#search_area").attr('action', act).submit();
            //location.href = "/bbs/topsearch" + subject + author + fromDate + toDate;
        }
    });

뷰에 스크립트 부분입니다.

 

// 상단 검색 요청시
        $searchArray = $this->searchMaker();
        if (isset($searchArray)) {
            $uriSegment = 5;
        }

list 함수에 부분입니다.

public function searchMaker()
    {
        $searchArray = array();

        $subject = $this->input->post('subject', TRUE);
        $author = $this->input->post('author', TRUE);
        $fromDate = $this->input->post('fromdate', TRUE);
        $toDate = $this->input->post('todate', TRUE);

        array_push($searchArray, $subject, $author, $fromDate, $toDate);

        return $searchArray;
    }

searchMaker는 이렇게 생겼습니다.

$data['list'] = $this->bbs_m->getSearchList($searchArray, $start, $limit);

최종적으로 이렇게 값을 받아옵니다.

이렇게 검색시 첫 페이지는 검색이 잘 되지만 2페이지로 이동하면 post가 새로 발생하는 것인지 배열의 값이 모두 사라집니다. (즉 디폴트 리스트 2페이지가 나옵니다)

이런 경우 어떻게 계속해서 값을 유지시켜줄수 있는지 궁금합니다. 어느정도 진행방법까지 간략히 알려주신다면 정말 감사하겠습니다.

읽어주셔서 감사합니다.

 다음글 안녕하세요 캐릭터셋 관련 질문드릴게요 (2)
 이전글 token 생성에 대한 의문 (5)

댓글

빛그림 / 2018/03/16 12:35:25 / 추천 0

목록이면 페이지네이션을 사용하실 텐데 POST로 받은걸 $config['base_url'] 뒤에 GET으로 각 페이지 마다 넘겨주시면 될듯요^^

 

규리규얼 / 2018/03/16 12:50:26 / 추천 0
빛그림 선배님 그게 무슨 말씀인지 예제를 들어서 설명해 주실수 있으신가요?? ㅠㅠ
kaido / 2018/03/16 13:01:10 / 추천 0

일단 get 방식으로 만들어 보신다음에, post로 바꾸어 보세요.

그럼 머릿속에서 정리가 되실것 입니다.

규리규얼 / 2018/03/16 13:03:14 / 추천 0
kaido선배님 input->get()으로 값을 얻어오라고 하시는 건가요? 이런경우도 진행해 보았지만 역시 페이지가 이동되면 값이 증발되었습니다.
빛그림 / 2018/03/16 13:03:21 / 추천 0

일단 대충 생각나는대로 코드를 쓰면 아래와 같이 하면 되죠. 저는 쿼리스트링 형태로 많이 쓰지만 url세그먼트 형태로 쓴다 해도 뭐 비슷하겠죠...

 

 

// 포스트로 처음 받는다면... 
if($this->input->post()) {
    $search_sel = $this->input->post('search_sel', TRUE);
    $search_word = $this->input->post('search_word', TRUE);
    $page = 1;    
} else {
    $search_sel = $this->input->get('search_sel', TRUE);
    $search_word = $this->input->get('search_word', TRUE);
    $page = $this->input->get('page', TRUE);
}


$this->load->library('pagination');
$config = array();
$config['base_url'] = '/classname/method/?page='.$page.'&search_sel='.$search_sel.'&search_word='.$search_word);
$config['query_string_segment'] = 'page';

kaido / 2018/03/16 13:07:33 / 추천 0

영상 주소입니다 ^^

참고 소스도 있습니다.

http://cikorea.net/bbs/view/lecture?idx=7097&page=3&view_category=&lists_style=

슬슬 강좌영상을 업그레이드 버젼을 찍어야 겠어요.

이 영상 참 많이 울궈먹네요 ㅋㅋ

규리규얼 / 2018/03/16 13:54:34 / 추천 0

빛그림 선배님 이런경우에 offset값은 어떻게 가져오나요? 원래는 uri에 세그먼트 에서 가져왔습니다.

kaido 선배님 감사합니다. 집에가서 제대로 다시 한번 보도록 하겠습니다.

빛그림 / 2018/03/16 14:03:21 / 추천 0

조건문을 사용해서 url의 GET로 받는 page 값이 1이거나 없는 경우 offset은 0이 되어야겠고, 

page이 1이상일 경우에는 page값이 offset 값이 되겠네요

이렇게 쓰시면 되겠군요.

$offset = ($this->input->get('page', TRUE) > 1) ? $this->input->get('page', TRUE) : 0;

 

변종원(웅파) / 2018/03/16 15:26:23 / 추천 0

세션 사용하는 방법도 있습니다.

회원가입이 여러 페이지로 되어 있는 경우 세션함수 http://www.ciboard.co.kr/user_guide/kr/libraries/sessions.html#flashdata 를 이용하여 데이터를 저장하고 다음 페이지에서 사용, 최종 페이지에서 db 입력하고 삭제할 수 있습니다.