Beispiel #1
0
            continue;
        }
        $concat = array();
        if ($search_all || $qname) {
            $concat[] = "a.it_name";
        }
        if ($search_all || $qexplan) {
            $concat[] = "a.it_explan2";
        }
        if ($search_all || $qid) {
            $concat[] = "a.it_id";
        }
        $concat_fields = "concat(" . implode(",' ',", $concat) . ")";
        $detail_where[] = $concat_fields . " like '%{$word}%' ";
        // 인기검색어
        insert_popular($concat, $word);
    }
    $where[] = "(" . implode(" and ", $detail_where) . ")";
}
if ($qcaid) {
    $where[] = " a.ca_id like '{$qcaid}%' ";
}
if ($qfrom && $qto) {
    $where[] = " a.it_price between '{$qfrom}' and '{$qto}' ";
}
$sql_where = " where " . implode(" and ", $where);
// 상품 출력순서가 있다면
$qsort = strtolower($qsort);
$qorder = strtolower($qorder);
$order_by = "";
// 아래의 $qsort 필드만 정렬이 가능하게 하여 다른 필드로 하여금 유추해 볼수 없게함
Beispiel #2
0
 }
 $search_query = 'sfl=' . urlencode($sfl) . '&stx=' . urlencode($stx) . '&sop=' . $sop;
 $text_stx = get_text(stripslashes($stx));
 $op1 = '';
 // 검색어를 구분자로 나눈다. 여기서는 공백
 $s = explode(' ', strip_tags($stx));
 // 검색필드를 구분자로 나눈다. 여기서는 +
 $field = explode('||', trim($sfl));
 $str = '(';
 for ($i = 0; $i < count($s); $i++) {
     if (trim($s[$i]) == '') {
         continue;
     }
     $search_str = $s[$i];
     // 인기검색어
     insert_popular($field, $search_str);
     $str .= $op1;
     $str .= "(";
     $op2 = '';
     // 필드의 수만큼 다중 필드 검색 가능 (필드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}'))";
Beispiel #3
0
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 을 곱함
                // 번호는 해당 검색어에 -1 을 곱함
                case "wr_num":
                    $str .= "{$field[$k]} = " . -1 * $s[$i];
                    break;
                case "wr_ip":
                case "wr_password":
                    $str .= "1=0";
                    // 항상 거짓
                    break;
                    // LIKE 보다 INSTR 속도가 빠름
                // 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;
}