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

검색 질문입니다.

까롱이 9년 전 조회 2,256

게시판에서 제가  그누보드 라는 제목으로 글을 올렸습니다.

그런데 게시판이나 전체검색에서 그누보드라고 검색하면 검색이 되는데 그누 보드 또는 그 누보드 이렇게 띄어쓰기하면 게시물이 없다고 나옵니다

띄어쓰기와 상관없이 게시물이 검색되게 할 수 없나요

어느 폴더의 어떤 파일을 수정해야하나요?

초보라서 봐도 모르겠고 여기에 아무리 검색해서 찾아봐도 여기에 맞는 답변이 없어서 질문 드립니다.

즐거운 하루되세요.

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

답변 2개

9년 전

어딘지 자세하게 몰라 붉은색으로 표시한 부분을 str_replace 넣었더니 똑같더라고요

저기가 아닌가요?

include_once("./_common.php");

 

//if (!$stx) alert("검색어가 없습니다."); 

 

$g4[title] = "검색 : " . $stx;

include_once("./_head.php");

 

if ($stx)

{

    //$stx = trim($stx);

 

$stx = preg_replace("/\//", "\/", trim($stx));

    $sop = strtolower($sop);

    if (!$sop || !($sop == "and" || $sop == "or")) $sop = "and"; // 연산자 and , or

    if (!$srows) $srows = 10; // 한페이지에 출력하는 검색 행수

 

    unset($g4_search[tables]);

    unset($g4_search[read_level]);

    $sql = " select gr_id, bo_table, bo_read_level from $g4[board_table] where bo_use_search = '1' and bo_list_level <= '$member[mb_level]' ";

    //            and bo_read_level <= '$member[mb_level]' ";

    if ($gr_id)

        $sql .= " and gr_id = '$gr_id' ";

    if ($onetable) // 하나의 게시판만 검색한다면

        $sql .= " and bo_table = '$onetable' ";

    $sql .= " order by bo_order_search, gr_id, bo_table ";

    $result = sql_query($sql);

    for ($i=0; $row=sql_fetch_array($result); $i++) 

    {

        if ($is_admin != "super") 

        {

            // 그룹접근 사용에 대한 검색 차단

            $sql2 = " select gr_use_access, gr_admin from $g4[group_table] where gr_id = '$row[gr_id]' ";

            $row2 = sql_fetch($sql2);

            // 그룹접근을 사용한다면

            if ($row2[gr_use_access])

            {

                // 그룹관리자가 있으며 현재 회원이 그룹관리자라면 통과

                if ($row2[gr_admin] && $row2[gr_admin] == $member[mb_id])

                    ;

                else 

                {

                    $sql3 = " select count(*) as cnt from $g4[group_member_table] where gr_id = '$row[gr_id]' and mb_id = '$member[mb_id]' and mb_id <> '' ";

                    $row3 = sql_fetch($sql3);

                    if (!$row3[cnt])

                        continue;

                }

            }

        }

        $g4_search[tables][] = $row[bo_table];

        $g4_search[read_level][] = $row[bo_read_level];

    }

 

    $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

    {

        if (trim($s[$i]) == "") continue;

        //$search_str = strtolower($s[$i]);

        $search_str = $s[$i];

        $str .= $op1;

        $str .= "(";

        

        $op2 = "";

        for ($k=0; $k

        {

            $str .= $op2;

            switch ($field[$k]) 

            {

                case "mb_id" :

                case "mb_name" :

                    $str .= "$field[$k] = '$s[$i]'";

                    break;

                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 = " $sop ";

 

$search_str = str_replace("", "", $search_str);

//-- 금지 단어가 포함 되어 있나?

if(strpos("-".$config[cf_filter], $search_str)) alert("금지어가 포함 되어 있습니다.");

    }

    $str .= ")";

 

    //$sql_search = $str . " and wr_option not like '%secret%' "; // 비밀글은 제외

    $sql_search = $str;

 

    $str_board_list = "";

    $board_count = 0;

 

    $time1 = get_microtime();

 

    $total_count = 0;

    for ($i=0; $i

    {

        $tmp_write_table   = $g4[write_prefix] . $g4_search[tables][$i];

        

        $sql = " select wr_id from $tmp_write_table where $sql_search ";

        $result = sql_query($sql, false);

        $row[cnt] = @mysql_num_rows($result);

 

        //$sql = " select count(*) as cnt from $tmp_write_table where $sql_search ";

        //$row = sql_fetch($sql);

 

        $total_count += $row[cnt];

        if ($row[cnt]) 

        {

            $board_count++;

            $search_table[] = $g4_search[tables][$i];

            $read_level[]   = $g4_search[read_level][$i];

            $search_table_count[] = $total_count;

 

            $sql2 = " select bo_subject from $g4[board_table] where bo_table = '{$g4_search[tables][$i]}' ";

            $row2 = sql_fetch($sql2);

            $str_board_list .= "

  • $row2[bo_subject] ($row[cnt])";

            }

        }

     

        $rows = $srows;

        $total_page  = ceil($total_count / $rows);  // 전체 페이지 계산

        if ($page == "") { $page = 1; } // 페이지가 없으면 첫 페이지 (1 페이지)

        $from_record = ($page - 1) * $rows; // 시작 열을 구함

     

        for ($i=0; $i

        {

            if ($from_record < $search_table_count[$i]) 

            {

                $table_index = $i;

                $from_record = $from_record - $search_table_count[$i-1];

                break;

            }

        }

     

        $bo_subject = array();

        $list = array();

     

        $k=0;

        for ($idx=$table_index; $idx

        {

            $sql = " select bo_subject from $g4[board_table] where bo_table = '$search_table[$idx]' ";

            $row = sql_fetch($sql);

            $bo_subject[$idx] = $row[bo_subject];

     

            $tmp_write_table = $g4[write_prefix] . $search_table[$idx];

     

            $sql = " select * from $tmp_write_table where $sql_search order by wr_id desc limit $from_record, $rows ";

            $result = sql_query($sql);

            for ($i=0; $row=sql_fetch_array($result); $i++) 

            {

                // 검색어까지 링크되면 게시판 부하가 일어남

                $list[$idx][$i] = $row;

                $list[$idx][$i][href] = "./board.php?bo_table=$search_table[$idx]&wr_id=$row[wr_parent]";

     

                if ($row[wr_is_comment]) 

                { 

                    $link .= "#c{$row[wr_id]}";

                    $sql2 = " select wr_subject, wr_option from $tmp_write_table where wr_id = '$row[wr_parent]' ";

                    $row2 = sql_fetch($sql2);

                    //$row[wr_subject] = $row2[wr_subject];

                    $row[wr_subject] = get_text($row2[wr_subject]);

                }

     

                // 비밀글은 검색 불가

                if (strstr($row[wr_option].$row2[wr_option], "secret")) 

                    $row[wr_content] = "[비밀글 입니다.]";

     

                $subject = get_text($row[wr_subject]);

                if (strstr($sfl, "wr_subject")) 

                    $subject = search_font($stx, $subject);

     

                if ($read_level[$idx] <= $member[mb_level])

                {

                    $content = cut_str(get_text(strip_tags($row[wr_content])),300,"…");

                    if (strstr($sfl, "wr_content")) 

                        $content = search_font($stx, $content);

                }

                else

                    $content = '';

     

                $list[$idx][$i][subject] = $subject;

                $list[$idx][$i][content] = $content;

                $list[$idx][$i][name] = get_sideview($row[mb_id], cut_str($row[wr_name], $config[cf_cut_name]), $row[wr_email], $row[wr_homepage]);

                

                $k++;

                if ($k >= $rows) 

                    break; 

            }

            sql_free_result($result);

            

            if ($k >= $rows) 

                break; 

     

            $from_record = 0;

        }

     

        $write_pages = get_paging($config[cf_write_pages], $page, $total_page, "$_SERVER[PHP_SELF]?$search_query&gr_id=$gr_id&srows=$srows&onetable=$onetable&page=");

     

        echo "";

    }

     

    //-- 검색 결과가 있을 때만 검색어 기록. 검색 결과가 없다는 건 자연어가 아닐 수 있을 가능성이 있음.

    if($board_count) {

    // 인기검색어

    //-- 단어 별로 저장 할 때

    /*

    for($i = 0; $i < count($s); $i++) {

       $sql = " insert into $g4[popular_table] set pp_word = '$s[$i]', pp_date = '$g4[time_ymd]', pp_ip = '$_SERVER[REMOTE_ADDR]' ";

    sql_query($sql, FALSE);

    }

    */

     

    //-- 단어 두 개까지만 저장

    $s_word = "";

    if(count($s) >= 2) {

    $s_word = $s[0] . " " . $s[1];

    }else{

    $s_word = $s[0];

    }

        $sql = " insert into $g4[popular_table] set pp_word = '$s_word', pp_date = '$g4[time_ymd]', pp_ip = '$_SERVER[REMOTE_ADDR]' ";

    sql_query($sql, FALSE);

    }

     

    $group_select = "";

     

    if (!$sfl) $sfl = "wr_subject";

    if (!$sop) $sop = "or";

     

    include_once("$search_skin_path/search.skin.php");

     

    include_once("./_tail.php");

    ?>

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

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

    I
    9년 전

    /bbs/search.php 

    /skin/search/basic/search.skin.php

     

    수정은 위 파일에서 하시면 되구요 

     

    띄어쓰기 부분은 검색 쿼리 들어갈때 ( 검색 단어 or 공백 없는 검색단어[str_replace] ) 형태로 넣으시면  두가지 버전으로 검색이 되면 될거같습니다.

     

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

    답변에 대한 댓글 1개

    까롱이
    9년 전
    감사합니다

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

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

    로그인