전체검색, 게시판내의 검색에서 아이디 검색 제외하기 채택완료
전체검색, 게시판내의 검색에서 아이디(mb_id) 검색 제외하려고 아래 2가지를 했습니다.
1) lib/get_data.lib.php 에서 function get_board_sfl_select_options($sfl), function get_qa_sfl_select_options($sfl) 함수에서 mb_id 관련된 부분 삭제
2) skin/search 에서도 mb_id관련 부분 삭제
를 했습니다. 그런데 주소창에서 &sfl=wr_subject 대신에 &sfl=mb_id 로 바꾸고 &stx= 에 아이디를 넣으면 검색이 되더라구요.
검색창에 &sfl= 에 아이디를 넣어도 검색이 되지 않게 하려면 어떻게 해야할까요?
답변 2개
lib/common.php의 get_sql_search 함수에서
case "mb_id" :
case "wr_name" :
$str .= " $field[$k] = '$s[$i]' ";
break;
부분이 있을텐데
mb_id 부분이랑 wr_name을 같이 하지 말고 그냥 따로해서
$str .= " 1 = 0 " 으로해서 검색을 못하게 하면 되실거 같습니다. 메뉴에서 빼셨다니 직접 검색을 막는거면 해당 정도만 해도 되지 않을까 싶네요
답변에 대한 댓글 2개
그누보드 데모 또는 최신 그누보드에서도 주소창에서 변경을 하면 검색이 됩니다.
아래처럼 sfl 에 wr_email을 입력을 해도 검색이 됩니다.
https://demo.sir.kr/gnuboard5/bbs/search.php?sfl=wr_email%7C%7Cwr_content&sop=and&stx=test
댓글을 작성하려면 로그인이 필요합니다.
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인
// 필드의 수만큼 다중 필드 검색 가능 (필드1+필드2...)
for ($k=0; $k<count($field); $k++) {
$str .= $op2;
switch ($field[$k]) {
case 'wr_name' :
$str .= "$field[$k] = '$s[$i]'";
break;
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 :
//$str .= "1=0"; // 항상 거짓
if (preg_match("/[a-zA-Z]/", $search_str)) $str .= "INSTR(LOWER($field[$k]), LOWER('$search_str'))";
else $str .= "INSTR($field[$k], '$search_str')";
break;
}
$op2 = " or ";
}