개발 Q&A

제목 GET 파라메터(검색단) 처리 관련 질문입니다.
글쓴이 꽈찌쭈 작성시각 2016/05/18 16:47:36
댓글 : 8 추천 : 0 스크랩 : 0 조회수 : 11712   RSS

안녕하세요

한창 CI를 공부중에 있는데요

 

게시판 리스트, 쓰기, 수정, 삭제 등 처리는 다 했는데

검색쪽에 문제가 있어 질문을 드립니다.

 

기존 PHP코드에서는

/board/board_list.php?shows=Y 이런식으로 검색하게 되있습니다.

관련 소스는 밑에 있구요

<?
// 게시판 호출 쿼리
// 공개여부 'Y', 'N' : shows

$shows = $_GET['shows'];

$selected['shows'][$shows] = "selected";
?>

<select>
    <option value="" selected="selected">전체</option>
    <option value="Y" <?=$selected['shows]['Y']?>>노출</option>
    <option value="N" <?=$selected['shows]['N']?>>미노출</option>
</select>

이런식으로 처리하였을때 검색어 파라메터가 없어도 잘 처리가 되는데

 

CI에서 구현을 하려고 하니 컨트롤러에서 GET값을 받아 검색 처리한뒤

$data['selected']['shows'][$shows] = "selected"; 이런식으로 보내주었습니다.

값이 있을 경우에는 정상적으로 되었지만 값이 없거나 반대값이 들어간 부분은 오류가 났습니다.

위와 같은 문제의 해결방법이 있을까요?

 다음글 <?= ?>와 <?php =? 차이점 (2)
 이전글 php, ci 에서 파일업로드를 막을수있나요? (2)

댓글

kaido / 2016/05/18 17:09:09 / 추천 0

1. 일단 CI 문법이 아닙니다. [즉 CI하고 관련 없습니다]

2. PHP 네이티브 문법으로 사용하면 당연하게도 동일하게 작동 합니다. [CI라서 php 문법에서 문제가 생기는 것은 없습니다]

3. 해당 코드 처럼 키값이 '' 이 되면 어디든 오류가 나옵니다.

 

기존 네이티브 코드에는 해당 키값이 빠지는 부분을 체크해서 처리 하는 부분이 있을 것입니다. 

다시 확인해 보세요.

 

// 참고하신 코드에서도 에러가 안나올려면

if($shows) 
$shows = 'Y';
else
$shows = 'N';

이렇게 값이 추가 되어야 에러가 안 나오지 않을까요?

 

변종원(웅파) / 2016/05/18 17:18:08 / 추천 0
 
게시판 이동합니다.
꽈찌쭈 / 2016/05/18 17:28:11 / 추천 0

우선 답변 감사드립니다.

위에 올린 소스는 실제로 사용중인 소스이구요.

따로 값을 분기처리 하지 않아도 정상적으로 작동해서 CI에서도 비슷하게 적용을 해봤지만 안되서 질문을 올렸습니다.

정확한 답변을 위해 질문을 약간 수정하였습니다

kaido / 2016/05/18 17:44:11 / 추천 0

값이 없다는 것이 ?shows=Y <- 파라메터 값이 없다는 의미 인가요? ?shows= 이렇게?

 

ps. ci 문법으로는 $this->input->get('shows', true); 입니다. post 인경우에는  $this->input->post('shows' ,true);

꽈찌쭈 / 2016/05/18 18:11:45 / 추천 0

// kaido

네 값이 없을 경우에 board_list.php?shows= 또는 board_list.php 입니다.

CI에서 GET값은 $search_data = $this->input->get(NULL, TRUE); 이렇게 처리해주었습니다.

kaido / 2016/05/18 18:15:39 / 추천 0

일단 해당 로직 대로라면 제가 제시했듯이 shows 가 공란이 안되게 처리해 주어야합니다.

 

$selectd['...']['$shows']  당연하게도 공백이면 $selectd['...'][''] 이거와 같습니다. 즉 에러 나는게 정상입니다.

이건 CI가 아니라 php 기본적으로 나오는 에러입니다.

 

$this->input->get(NULL, TRUE);

null 이 자동으로 처리 되진 않습니다. 정확하게 받는 메소드 명 name을 넣어 주세요.

꽈찌쭈 / 2016/05/18 18:34:41 / 추천 0

// kaido

답변 감사합니다. 제시해주신 방법도 참고해보겠습니다.

$this->input->get(NULL, TRUE);은 메뉴얼을 보니 첫번째 파라미터를 NULL로 해주면

넘어오는 모든 GET값을 필터 적용이 된다고 나와있어서 입니다.

kaido / 2016/05/19 08:58:03 / 추천 0

@꽈찌쭈

메뉴얼 확인해보니 그렇네요. [언제 생겼담 ㄷㄷ

오히려 한수 배웠네요 ㅎㅎ