여분필드 검색 질문입니다.

여분필드 검색 질문입니다.

QA

여분필드 검색 질문입니다.

본문

전체검색에서 여분필드 (wr_22)가 검색이 되게 할려고 질문, 답변 검색해서 수정해봤습니다.

 

bbs/search.php에서

--84줄 근처--

  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' :
               case 'wr_22' :

 

--205번줄 근처--

   $list[$idx][$i]['subject'] = $subject;
    $list[$idx][$i]['content'] = $content;
    $list[$idx][$i]['wr_22'] = $wr_22;

 

이렇게 했고요.

 

 

head.php에서

  <input type="hidden" name="sfl" value="wr_subject||wr_content||wr_22">

이렇게 했습니다.

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

 

문제는 이렇게 하고 전체 검색을 하면 wr_22가 있는 글은 검색이 되는데요. 기존 subject가 검색이 안됩니다.

그리고 search.skin.php에서 <?php echo $list[$idx][$i]['wr_22'] ?>이렇게 해도 wr_22 가 출력이 안됩니다.

 

며칠째 이 문제로 헤매고 있네요. 회원님들의 도움을 부탁드립니다.

꾸벅~ 

이 질문에 댓글 쓰기 :

답변 2

다른 곳은 문제 없어 보입니다

$list[$idx][$i]['wr_22'] = $wr_22; --> $list[$idx][$i]['wr_22'] = $row['wr_22']; 

균이님~ 감사합니다.
알려주신대로 하니까 여분필드 내용이 출력이 잘 됩니다.
그런데 제 질문처럼 여분필드 소스를 추가하면 왜 잘 나오던 다른 게시판의 제목이 검색이 안되는걸까요? 혹시 아시는 부분이 있으면 다시 도움 부탁드려봅니다.

혹시 게시판 관리자에서 전체 검색 허용 채크 하셔는 가 확인하세요  

 

그리고  제생각에는 아마도

 

122 번줄정도에 검색을 하느데

다른 게시판에도 22 즉 wr_22 필드가 있는가를 확인하세요
        $sql = " select wr_id from {$tmp_write_table} where {$sql_search} ";
echo $sql."<br>";

 

설명을 좀하자면

     case 'wr_22' :
                case 'wr_subject' :
                case 'wr_content' :

추가를 하면 아래처럼 되죠?

((INSTR(wr_subject, '44') or INSTR(wr_content, '44') or INSTR(wr_22, '44')))

 

그런데 이걸  검색 커리 문구로 사용하느데

    for ($i=0; $i<count($g5_search['tables']); $i++) {

여기서즉 모든 검색을 하용한 게시판의 정보를 가저와요

그런데

select wr_id from g510_write_bible2 where ((INSTR(wr_subject, '44') or INSTR(wr_content, '44') or INSTR(wr_22, '44')))

이런식이 되게지요

문제는 검색 허용한 게시판이 4개면 4개 다 검색되는 건데 각각 게시판에 필드에 wr_22 이 있어야

오류가안나는거죠

 

--205번줄 근처--

   $list[$idx][$i]['subject'] = $subject;
    $list[$idx][$i]['content'] = $content;
    $list[$idx][$i]['wr_22'] = $wr_22;

이러게하셔다구하느데요

$wr_22; 이걸 정의해주는 곳이 없자나요 예를 들면

          if ($read_level[$idx] <= $member['mb_level'])
            {
                //$content = cut_str(get_text(strip_tags($row['wr_content'])), 300, "…");
                $content = strip_tags($row['wr_content']);
                $content = get_text($content, 1);
                $content = strip_tags($content);
                $content = str_replace(' ', '', $content);
                $content = cut_str($content, 300, "…");

                if (strstr($sfl, 'wr_content'))
                    $content = search_font($stx, $content);
            }
            else
                $content = '';

 

 


            $subject = get_text($row['wr_subject']);
            if (strstr($sfl, 'wr_subject'))
                $subject = search_font($stx, $subject);

이런식으로 정의를 해줘야 되는거죠

열린이글님 꼼꼼한 답변 깊이 감사드립니다.
현재 두 분이 알려주신 덕분에 여분필드 내용 출력은 되는데요. 잘 되던 다른 게시판의 subject가 검색이 안됩니다. search.php를 원래대로 돌리면 wr_22가 검색이 안되고 제목은 검색이 되고, 질문처럼 wr_22 소스를 추가하면 wr_22는 검색이 되고 subject는 검색이 안됩니다.
이 부분 아시는 내용이 있으시면 도움 부탁드립니다.
답변 감사드리고요.^^

열린이 님의 명확한 답변대로 wr_22 가 없는 게시판에서는 쿼리 에러가 발생하여 쿼리를 할 수 없기 때문입니다

1. 해법1은 아래처럼 만들고 쿼리문에 wr_22 필드가 있는 게시판과 없는 게시판을 다르게 쿼리하도록
만들면 되겠습니다

case 에서 wr_22 부분 빼버리고
for 문 끝난 후 다음 코드 넣고 

      if (preg_match("/[a-zA-Z]/", $stx))
        $str2=$str. " $sop INSTR(LOWER(wr_22), LOWER('$stx'))";
      else $str2 =$str. " $sop INSTR(wr_22, '$stx')";

쿼리부분에 $sql_search가 사용된 곳 찾아서 아래와 같은 방법으로....
if($g5_search['tables'][$i]== 'wr_22있는 게시판') $sql=~~ where $str2
else $sql = 원본


2. 해법2는 모든 게시판에 wr_22필드를 추가하는 것입니다

균이님, 열린이 님 두 분 모두께 깊은 감사드립니다.
귀한 시간내주시기 어려우셨을텐데 꼼꼼히 답변 주셔서 잘 해결되었습니다.
아직 공부가 부족해서 전체 게시판에 wr_22를 추가하는 방법으로 해결되었습니다.^^
다시 한번 감사드립니다.
무더위에 건강관리 잘하시고요.

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

회원로그인

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