테스트 사이트 - 개발 중인 베타 버전입니다

다중검색 질문입니다 !! ㅠㅠ 채택완료

타조 10년 전 조회 4,279

다중검색질문입니다.

 

!! [ 게시판 리스트 중 제목부분과 필드 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개

채택된 답변
+20 포인트
d
10년 전

// 검색 구문을 얻는다. 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를 더럽게 코딩하지않는한요 실력이 딸려서 죄송합니다 조그마한 도움이되셨으길

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

10년 전

소중한 답변 감사드립니다. (__

이게 원본을 건드리지 않고 스킨속 list.skin.php 내에 삽입된거라서 이 곳에서 해결하고 싶은데 잘 되질 않네요.

지금 다른 방법을 찾고 있는데....