select 검색

매출이 오르면 내리는 수수료! 지금 수수료센터에서 전자결제(PG)수수료 비교견적 신청해 보세요!
select 검색

QA

select 검색

본문

안녕하세요?

select문이 2개가 있구요 조건은 and인데요

초보라 헤매다가 글 올립니다

아시는분 조언 부탁드립니다

 

<div class="search-box">
 <form class="form" role="form" name="fsearch" onsubmit="return fsearch_submit(this);" method="get">
 <input type="hidden" name="srows" value="<?php echo $srows ?>">
  <div class="row">
   <div class="col-sm-3 col-xs-6" style="width:145px">
    <div class="form-group" style="width:110px;float:left">
     <label for="sfl" class="sound_only">지역</label>
     <select name="sfl" id="sfl" class="form-control input-sm">
      <option value="">지역</option>
      <option value="wr_op_1"<?php echo get_selected($_GET['sfl'], "wr_op_1") ?>>경기도</option>
      <option value="wr_op_1"<?php echo get_selected($_GET['sfl'], "wr_op_1") ?>>충청도</option>
      <option value="wr_op_1"<?php echo get_selected($_GET['sfl'], "wr_op_1") ?>>경상도</option>
     </select>
    </div>
   </div>
   <div class="col-sm-2 col-xs-6" style="padding:0px;width:120px">
    <div class="form-group" style="width:110px;float:left">
     <label for="sfl" class="sound_only">구분</label>
     <select name="sfl" id="sfl" class="form-control input-sm"">
                  <option value="">구분</option>
      <option value="wr_op_2"<?php echo get_selected($_GET['sfl'], "wr_op_2") ?>>사과</option>
      <option value="wr_op_2"<?php echo get_selected($_GET['sfl'], "wr_op_2") ?>>배</option>
      <option value="wr_op_2"<?php echo get_selected($_GET['sfl'], "wr_op_2") ?>>딸기</option>
     </select>
    </div>
                         </div>
                 </div>
             <div class="col-sm-2 col-xs-12" style="width:100%">
  <div class="form-group">
      <button type="submit" class="btn btn-black btn-sm btn-block"><i class="fa fa-search"></i> 검색</button>
  </div>
      </div>
        </form>
</div>

 


------------------------------------------------------------------------------------


serach.php

        // 필드의 수만큼 다중 필드 검색 가능 (필드1+필드2...)
        for ($k=0; $k<count($field); $k++) {
            $str .= $op2;
            switch ($field[$k]) {
                case 'mb_id' :
                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"; // 항상 거짓
                    break;
            }

 

-------------------------------------------------------------------------------------

 

common.lib.php


// 검색 구문을 얻는다.
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<count($s); $i++) {
        // 검색어
        $search_str = trim($s[$i]);
        if ($search_str == "") continue;

        // 인기검색어
        insert_popular($field, $search_str);

        $str .= $op1;
        $str .= "(";

        $op2 = "";
        for ($k=0; $k<count($field); $k++) { // 필드의 수만큼 다중 필드 검색 가능 (필드1+필드2...)

            // 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;

이 질문에 댓글 쓰기 :

답변 1

그냥 이렇게 올리시면 답변을 드리기가 애매합니다.

 

지금 폼네임값이 select 네임값이 sfl이 두개 인데요 폼네임은 한개당 하나의 값으로 쓰셔야 합니다.

 

그래서 그 네임값을 넘겨서 검색 구문 처리해 주시면 되실듯 합니다.

sfl1  sfl2.....이런식으로 쓰면 될까요?
그리고 그 네임값을 넘긴다고 말씀하셨는데요

<input type="hidden" name="sfl1" value="<?php echo $sfl1 ?>">
<input type="hidden" name="sfl2" value="<?php echo $sfl2 ?>">

이렇게 넘기면 될까요?

조언 너무나 감사합니다

serach.php

        // 필드의 수만큼 다중 필드 검색 가능 (필드1+필드2...)
        for ($k=0; $k<count($field); $k++) {
            $str .= $op2;
            switch ($field[$k]) {
                case 'mb_id' :
                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"; // 항상 거짓
                    break;
            }

이 부분을 아래와 같이 처리하면 될까요?

            switch ($field[$k]) {
                case 'mb_id' :
                case 'wr_name' :
                case 'wr_op_1' :
                case 'wr_op_2' :

답변을 작성하시기 전에 로그인 해주세요.
전체 124,145 | RSS
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT