임의로 입력한 검색 조건 무력화 시키기 > 그누4 질문답변

그누4 질문답변

그누보드4 관련 질문은 QA 로 이전됩니다. QA 그누보드4 바로가기
기존 게시물은 열람만 가능합니다.

임의로 입력한 검색 조건 무력화 시키기 정보

임의로 입력한 검색 조건 무력화 시키기

본문

정상적으로 검색폼에 값을 입력 할 경우
주소창에 보여지는 검색 식 있잖아요.
뭐 이런식으로
 
board.php?bo_table=g4_qa&sca=&sfl=wr_subject&stx=aaaa&sop=and&x=30&y=9
 
근데 여기서 sfl 값에 엉뚱한 값을 집어 넣으면
 
예를 들어
board.php?bo_table=g4_qa&sfl=abcd&stx=abcd
 
외와 같이 존재 하지 않는 sfl 값을 유저가 주소창에 입력하면
 
select distinct wr_parent from g4_write_g4_qa where ((INSTR(LOWER(abcd), LOWER('abcd'))) ) and (wr_num between '-9815' and '-4815')
1054 : Unknown column 'abcd' in 'where clause'
error file : /bbs/board.php
 
sql 에러가 떠버리고 이후 사이트 하단은 화면에 표시 되지 않습니다.
 
보통은 이런경우 그냥 sfl 무시하고 키워드 검색인가로 넘겨줘야 하지 않나요?
최소한 검색 결과 없음 또는 올바른 접근이 아닙니다 라는 메시지라도 보여주고
폼은 깨져서는 안된다고 생각하는데요.
 
lib/common.lib.php 에서 sfl 값에 따라 스위치로 분류하고 마지막에 default에서 처리하는거 같은데
이부분 어떤 식으로 수정해야 하는지 도와 주십시오.
 
  • 복사

댓글 전체

현재 sfl 값을 임의로 넘길경우 default가 받아서 처리하도록 되어있는데..
default 값은 그냥 넘기도록 처리하면 될것 같습니다.


수정전 :
                // LIKE 보다 INSTR 속도가 빠름
                default :
                    if (preg_match("/[a-zA-Z]/", $search_str))
                        $str .= "INSTR(LOWER($field[$k]), LOWER('$search_str'))";
                    else
                        $str .= "INSTR($field[$k], '$search_str')";
                    break;
            }

수정후 :
                // LIKE 보다 INSTR 속도가 빠름
                case "wr_subject" :
                case "wr_content" :
                    if (preg_match("/[a-zA-Z]/", $search_str))
                        $str .= "INSTR(LOWER($field[$k]), LOWER('$search_str'))";
                    else
                        $str .= "INSTR($field[$k], '$search_str')";
                    break;
                default :
                    break;
            }
빠른 답변 감사합니다.

디폴트가 'wr_subject'와 'wr_content'에 사용되는 거였군요.
디폴트 지우면 뭐가 영향 받나 생각했었는데...

그런데 디폴트 항에 내용을 없애도 여전히 임의 입력에 대해서는 sql 에러가 뜨네요.
$str 값이 비어서 쿼리 오류가 납니다.

이 경우 존재하지 않는 필드에서 검색을 시도하는 경우니까
필드명을 사용자에게 입력받은 $field[$k]가 아닌 강제로 wr_content를 넣어줬습니다.

default :
    $str .= "INSTR(wr_content, '$search_str')";
    break;

이제 필드명을 아무렇게나 입력할 경우 '내용'에서 검색해라 정도 되겠네요.

어쨌든 해결되서 기분 좋네요. 감사합니다.
© SIRSOFT
현재 페이지 제일 처음으로