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

상품검색 범위 질문드립니다. 채택완료

셀리나 9년 전 조회 3,983

예를들어 '반바지'라는 상품을 검색해서 찾고자 하면

상품명으로 검색이 되어야하는데 본문까지 같이 되어서 본문에 반바지라고 쓰여있는 상품이 있다면 다 노출이 되어버립니다. 이런 경우 상품만 검색하고 싶은데 search.php에서 어디를 수정해야할까요.

 

내용은 좀 다르지만 검색관련 질문들은 찾아보았을때 sql 구문에서 수정해야한다고 하는 답들이 많았는데,

이 경우는 어떻게해야하는지 잘 모르겠습니다 ㅜㅜ

 

+ 겉보기엔 수정하고자하는건 뭔가 간단한 것 같은데 막상 열어보면 복잡하고,  잘 몰라서 막히는 경우가 많더군요...

영카트5 수정작업에 적합한 공부를 할 수 있는 도서가 있다면 추천 좀 해주세요...

 

 

--- 전문 ----

 

if (G5_IS_MOBILE) {     include_once(G5_MSHOP_PATH.'/search.php');     return; }

$g5['title'] = "상품 검색 결과"; include_once('./_head.php');

// QUERY 문에 공통적으로 들어가는 내용 // 상품명에 검색어가 포한된것과 상품판매가능인것만 $sql_common = " from {$g5['g5_shop_item_table']} a, {$g5['g5_shop_category_table']} b ";

$where = array(); $where[] = " (a.ca_id = b.ca_id and a.it_use = 1 and b.ca_use = 1) ";

$search_all = true; // 상세검색 이라면 if (isset($_GET['qname']) || isset($_GET['qexplan']) || isset($_GET['qid']))     $search_all = false;

$q       = utf8_strcut(get_search_string(trim($_GET['q'])), 30, ""); $qname   = isset($_GET['qname']) ? trim($_GET['qname']) : ''; $qexplan = isset($_GET['qexplan']) ? trim($_GET['qexplan']) : ''; $qid     = isset($_GET['qid']) ? trim($_GET['qid']) : ''; $qcaid   = isset($_GET['qcaid']) ? trim($_GET['qcaid']) : ''; $qfrom   = isset($_GET['qfrom']) ? preg_replace('/[^0-9]/', '', trim($_GET['qfrom'])) : ''; $qto     = isset($_GET['qto']) ? preg_replace('/[^0-9]/', '', trim($_GET['qto'])) : ''; if (isset($_GET['qsort']))  {     $qsort = trim($_GET['qsort']);     $qsort = preg_replace("/[\<\>\'\"\\\'\\\"\%\=\(\)\s]/", "", $qsort); } else {     $qsort = ''; } if (isset($_GET['qorder']))  {     $qorder = preg_match("/^(asc|desc)$/i", $qorder) ? $qorder : ''; } else {     $qorder = ''; } if(!($qname || $qexplan || $qid))     $search_all = true;   // 검색범위 checkbox 처리 $qname_check = false; $qexplan_check = false; $qid_check = false;

if($search_all) {     $qname_check = false;     $qexplan_check = false;     $qid_check = false; } else {     if($qname)         $qname_check = false;     if($qexplan)         $qexplan_check = false;     if($qid)         $qid_check = false; }

if ($q) {     $arr = explode(" ", $q);     $detail_where = array();     for ($i=0; $i

        $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 필드만 정렬이 가능하게 하여 다른 필드로 하여금 유추해 볼수 없게함 if (($qsort == "it_sum_qty" || $qsort == "it_price" || $qsort == "it_use_avg" || $qsort == "it_use_cnt" || $qsort == "it_update_time") &&     ($qorder == "asc" || $qorder == "desc")) {     $order_by = ' order by ' . $qsort . ' ' . $qorder . ' , it_order, it_id desc'; }

// 총몇개 = 한줄에 몇개 * 몇줄 $items = $default['de_search_list_mod'] * $default['de_search_list_row']; // 페이지가 없으면 첫 페이지 (1 페이지) if ($page < 1) $page = 1; // 시작 레코드 구함 $from_record = ($page - 1) * $items;

// 검색된 내용이 몇행인지를 얻는다 $sql = " select COUNT(*) as cnt $sql_common $sql_where "; $row = sql_fetch($sql); $total_count = $row['cnt']; $total_page  = ceil($total_count / $items); // 전체 페이지 계산

if ($is_admin) {     echo '

'; } ?>

       

       
                               
            검색범위             >             >             >        
       
            상품가격 (원)                         ~                         까지        
       
                                           
       

            상세검색을 선택하지 않거나, 상품가격을 입력하지 않으면 전체에서 검색합니다.             검색어는 최대 30글자까지, 여러개의 검색어를 공백으로 구분하여 입력 할수 있습니다.        

       

       

       

            검색 결과 건        
   
   

       

           
   

       

        set_query(" select * $sql_common $sql_where {$order_by} limit $from_record, $items ");             $list->set_is_page(true);             $list->set_view('it_img', true);             //$list->set_view('it_id', true);             $list->set_view('it_name', true);             $list->set_view('it_basic', true);             $list->set_view('it_cust_price', false);             $list->set_view('it_price', true);             $list->set_view('it_icon', true);             //$list->set_view('sns', true);             echo $list->run();         }         else         {             $i = 0;             $error = '

'.$list_file.' 파일을 찾을 수 없습니다. 관리자에게 알려주시면 감사하겠습니다.

';         }

        if ($i==0)         {             echo '

'.$error.'
';         }

        $query_string = 'qname='.$qname.'&qexplan='.$qexplan.'&qid='.$qid;         if($qfrom && $qto) $query_string .= '&qfrom='.$qfrom.'&qto='.$qto;         $query_string .= '&qcaid='.$qcaid.'&q='.urlencode($q);         $query_string .='&qsort='.$qsort.'&qorder='.$qorder;         echo get_paging($config['cf_write_pages'], $page, $total_page, $_SERVER['SCRIPT_NAME'].'?'.$query_string.'&page=');         ?>    

   

 

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

답변 1개

채택된 답변
+20 포인트
SLOOP
9년 전

검색하는 search form 안에 

 

이 값을 넣어주시면 상품명만 검색합니다.

 

 

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

답변에 대한 댓글 1개

셀리나
9년 전
이것만으로 직접 적용되지는 않았으나 알려주신 것 때문에 묘안을 찾아서 해결하였습니다. 감사합니다.

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

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

로그인