다중검색 질문입니다 !! ㅠㅠ 채택완료
다중검색질문입니다.
!! [ 게시판 리스트 중 제목부분과 필드 wr_26번을 함께 검색하려니 잘 되질 않습니다.]
한가지씩은 검색이 잘 되는데 두가지 AND 검색 시 잘 되질 않아 어느부분을 손대야 할지 난감합니다.
고수님들 한 수 지도 부탁드립니다.
</p><p><form name=fsearch method=get style="margin:0;" onsubmit="return fsearch_set(this);">
<input type="hidden" name="bo_table" value="<?=$bo_table?>">
<!-- <input type="hidden" name="sca" value="<?=$sca?>"> -->
<input type="hidden" name="sfl" value="<?=$sfl?>">
<input type="hidden" name="stx" value="<?=$stx?>">
<input type="hidden" name="sop" value="<?=$sop?>"></p><p> </p><p> </p><p> <table width=100%>
<tr>
<td></p><p> </p><p>--- 중간 생략 --</p><p> </p><p><select name="search_sel" id="search_sel">
<option value="wr_subject">제목에서 검색</option> <!-- 제목 -->
<option value="wr_content">내용내서 검색</option> <!-- 내용 -->
</select>
<input name="search_text" id="search_text" size="27" maxlength="18" value='<?=stripslashes($search_text)?>'></p><p> </p><p> </p><p><select name="wr_25" id="wr_25">
<option value="">등급선택</option>
<option value="급">급</option>
<option value="상">상</option>
<option value="중">중</option>
<option value="하">하</option>
</select></p><p> </p><p> <select name="nameno" id="nameno">
<option value="wr_26">이름으로 검색</option> <span style="color: rgb(255, 0, 0);"><== 이 부분을 <font color="#000000"><span style="color: rgb(255, 0, 0);">wr_subject 즉, '</span></font><span style="color: rgb(255, 0, 0);">이름으로 </span>검색' 놓고 <font color="#000000"><span style="color: rgb(255, 0, 0);">제목에서 검색</span></font> 부분과 함께 검색하면 AND검색이 안됩니다.ㅠㅠ</span>
<option value="wr_30">순번으로 검색</option>
</select></p><p> <input name="searchnameno" id="searchnameno" size="15" value='<?=stripslashes($searchnameno)?>'></p><p>
</td>
</tr>
</table>
</form></p><p>
--- 이하 생략 --</p><p>--- 아래는 스크립트 부분 ---</p><p>
<script language="JavaScript"></p><p> if('<?=$wr_6?>' != '') document.getElementById('wr_6').value = '<?=$wr_6?>';
if('<?=$search_sel?>' != '') document.getElementById('search_sel').value = '<?=$search_sel?>';
if('<?=$search_text?>' != '') document.getElementById('search_text').value = '<?=$search_text?>';
if('<?=$nameno?>' != '') document.getElementById('nameno').value = '<?=$nameno?>';
if('<?=$searchnameno?>' != '') document.getElementById('searchnameno').value = '<?=$searchnameno?>';</p><p>
function fsearch_set(f)
{
f.stx.value = "";
f.sfl.value = "";</p><p> if(document.getElementById('wr_6').value){
f.stx.value += document.getElementById('wr_6').value+" ";
if(f.sfl.value) f.sfl.value+= "||";
f.sfl.value += "wr_6";
}</p><p>
if(document.getElementById("search_text").value){
f.stx.value += document.getElementById('search_text').value;
if(f.sfl.value) f.sfl.value+= "||";
f.sfl.value += document.getElementById('search_sel').value;
}</p><p> if(document.getElementById("searchnameno").value){
f.stx.value += document.getElementById('searchnameno').value;
if(f.sfl.value) f.sfl.value+= "||";
f.sfl.value += document.getElementById('nameno').value;
}</p><p> f.sop.value = "and";
if(!f.stx.value){
alert("검색은 최소 1개이상의 검색옵션을 선택 하십시오.");
return false;</p><p> }
return true;
}</p><p> </script></p><p> </p><p>
지도편달 부탁드리겠습니다. (__
답변 3개
// 검색 구문을 얻는다. function get_sql_search($search_ca_name, $search_field, $search_text, $search_operator='and') { global $g5;
$str = ""; if ($search_ca_name) $str = " ca_name = '$search_ca_name' ";
$search_text = strip_tags(($search_text)); $search_text = trim(stripslashes($search_text));
if (!$search_text) { if ($search_ca_name) { return $str; } else { return '0'; } }
if ($str) $str .= " and ";
// 쿼리의 속도를 높이기 위하여 ( ) 는 최소화 한다. $op1 = "";
// 검색어를 구분자로 나눈다. 여기서는 공백 $s = array(); $s = explode(" ", $search_text);
// 검색필드를 구분자로 나눈다. 여기서는 + $tmp = array(); $tmp = explode(",", trim($search_field)); $field = explode("||", $tmp[0]); $not_comment = ""; if (!empty($tmp[1])) $not_comment = $tmp[1];
$str .= "(";
for ($i=0; $i // 인기검색어
$sql = " insert into {$g5['popular_table']} set pp_word = '$search_str', pp_date = '".G5_TIME_YMD."', pp_ip = '{$_SERVER['REMOTE_ADDR']}' ";
sql_query($sql, FALSE); $str .= $op1;
$str .= "("; $op2 = "";
for ($k=0; $k // SQL Injection 방지
// 필드값에 a-z A-Z 0-9 _ , | 이외의 값이 있다면 검색필드를 wr_subject 로 설정한다.
$field[$k] = preg_match("/^[\w\,\|]+$/", $field[$k]) ? $field[$k] : "wr_subject"; $str .= $op2;
switch ($field[$k]) {
case "mb_id" :
case "wr_name" :
$str .= " $field[$k] = '$s[$i]' ";
break;
case "wr_hit" :
case "wr_good" :
case "wr_nogood" :
$str .= " $field[$k] >= '$s[$i]' ";
break;
// 번호는 해당 검색어에 -1 을 곱함
case "wr_num" :
$str .= "$field[$k] = ".((-1)*$s[$i]);
break;
case "wr_ip" :
case "wr_password" :
$str .= "1=0"; // 항상 거짓
break;
// 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;
}
$op2 = " or ";
}
$str .= ")"; $op1 = " $search_operator ";
}
$str .= " ) ";
if ($not_comment)
$str .= " and wr_is_comment = '0' "; return $str;
} 현재 그누보드에서 사용하고있는 검색함수네요 제가볼땐 select명자체가 다른데 원본수정을하지않는한 불가하지않을까하네요??list.skin.php를 더럽게 코딩하지않는한요 실력이 딸려서 죄송합니다 조그마한 도움이되셨으길
댓글을 작성하려면 로그인이 필요합니다.
소중한 답변 감사드립니다. (__
이게 원본을 건드리지 않고 스킨속 list.skin.php 내에 삽입된거라서 이 곳에서 해결하고 싶은데 잘 되질 않네요.
지금 다른 방법을 찾고 있는데....
<=이 부분은 동작하고요
<=이 부분이 동작하질 않아요 ㅠㅠ
여기에서 해답을 찾으려고 하는 중입니다.
혹시 글 보시게 되면 힌트 알려주시면 감사하겠습니다. ㅠㅠ
소중한 글 봐주셔셔 감사합니다.
댓글을 작성하려면 로그인이 필요합니다.
검색을 같이하려면 bbs/list.php에가셔서
wr_26 name값을 받아서
if(wr_26!=""){$wr_26 = " 1=1 and wr_26 = '".$wr_26."'";}
이부분에
if ($sca || $stx) { $sql = " select distinct wr_parent from {$write_table} where {$sql_search} $wr_26 {$sql_order} limit {$from_record}, $page_rows "; }
이렇게한번해보시겠어요???
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인