개발 Q&A

제목 form input에서 백슬래쉬 받아오기
카테고리 PHP
글쓴이 뫄뫄잉뿌 작성시각 2017/01/16 13:41:37
댓글 : 10 추천 : 0 스크랩 : 0 조회수 : 10368   RSS

안녕하세요, 오랜만에 질문 올립니다.

view에서 form태그 내에 input에 \ 이 표시를 포함하여 디비에 검색을 보내는 작업을 하고 있습니다.

controller에서 get_post로 받아 다시 view로 보내서 view에서 표시될땐 \를 포함하여 표시되는데

 

print_r($this->db->_compile_select()); 를 통하여 sql문 확인해봤더니

\를 \\로 표시되서 중간에 \가 \\로 되버리니 검색이 안되는 것 같습니다.

$title = str_replace('\\[','\[',$title);      

$title = str_replace('\\]','\]',$title);

이렇게 억지로 해봤는데도 여전히 \\로 표시됩니다.

sql 날릴때 문제인거같은데..

액티브레코드로 날려서 그런거같기도 하고..

 

\까지 제대로 표시되기 위한 설정이 필요한가요?

 다음글 IE11, Edge 브라우저에서 파일명이 한글로 된 경... (7)
 이전글 기초서 추천부탁드려요 (1)

댓글

한대승(불의회상) / 2017/01/16 14:43:16 / 추천 0
stripslashes 라는 멋진 함수가....
뫄뫄잉뿌 / 2017/01/16 14:50:46 / 추천 0

\를 다 없애는게 아니라 살아있어야 합니다.

예를들어 검색어에 \f[\f 이렇게 되어있으면 이 문자가 그대로 sql like문에 들어가야되는데 찍어서 본 바로는

\\f[\\f 이렇게 되어있어서 검색창에서는 같은 문자이나 DB상에서 검색이 안되는 거죵..ㅠㅜ

한대승(불의회상) / 2017/01/16 14:59:09 / 추천 0
그럼 addslashes 라는 멋진 함수를.... ㅡㅡ;;;
뫄뫄잉뿌 / 2017/01/16 15:06:12 / 추천 0
addslashes를 쓰면 \\\\f[\\\\f 이 되서 더 늘어납니다..ㅜㅜ
한대승(불의회상) / 2017/01/16 15:07:07 / 추천 0
늘어나는게 정상 아닌가요?
뫄뫄잉뿌 / 2017/01/16 15:12:30 / 추천 0

제가하고 싶은 건 view단에 input에 \f[\f를 넣어 검색해서 리스트가 나오게 하는 것인데 

print_r($this->db->_compile_select()); 로 액티브쿼리를 찍어 보니 $this->db->like('CONTENT', $title); 이부분에

\f[\f가 아닌 \\f[\\f가 들어가 제대로 검색이 안된다는 겁니다. 따라서 \가 늘어나지 않도록 액티브쿼리를 날려야 할 것 같은데 방법이 없는 것인지 해서 여쭈었습니다.

한대승(불의회상) / 2017/01/16 15:16:54 / 추천 0

아래 처럼 수정해서 테스트 해보세요

$this->db->like('CONTENT', $title, '', false);

 

kaido / 2017/01/16 15:17:11 / 추천 0

액티브레코드라서 그렇습니다.

기본적으로 sql 인잭션 방지를 한번 걸어줍니다.

그중 하나가 바로 역슬러쉬 입니다.

 

가령 쿼리에 임의로 역슬러쉬를 넣고 호출 해서 , 검색 되면 안되는 자료를 포괄적으로 검색 시킨다면 

있는 자료 전부 다 보여준다는 의미입니다.

 

역슬래쉬가 꼭 필요한 사유는 모르겠지만, 가능 하면 넣지 않는 방향이나, input 에서 역슬러쉬를 받지 마시고, 조건에 따라서 쿼리분을 차등을 주시는 방법이 있습니다.

뫄뫄잉뿌 / 2017/01/16 15:25:39 / 추천 0

@한대승(불의회상)님  해보았으나 바뀌지 않습니다 ㅜㅜ 

@kaido 그럼 액티브쿼리가 아닌 $this->db->query로 변형시켜보아야 겠네욥.. 시도해보겠습니다. 감사합니다.

뫄뫄잉뿌 / 2017/01/17 12:53:22 / 추천 0

자답입니다. 

kaido님께서 말씀해주신 형태로 바꾸고 mysql 쿼리가 역시나 문제더라구요..

\는 addslashes 후에 like '%\\\[a_{2}\\\]%' ESCAPE '|' 로 날려 해결하였습니다.