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이 두개 인데요 폼네임은 한개당 하나의 값으로 쓰셔야 합니다.
그래서 그 네임값을 넘겨서 검색 구문 처리해 주시면 되실듯 합니다.