전체 검색 탭 질문드립니당

전체 검색 탭 질문드립니당

QA

SIR 제작의뢰 - 견적무료/익명보정/호스팅, DB 이전/단기개발. 이젠 ' 의뢰인'이 원하는 '제작자'에게만 연락처를 알릴 수 있습니다.

전체 검색 탭 질문드립니당

본문

if ($row['cnt']) {
            if ($onetable) {
                $board_count = 1;
            } else {
                $board_count++;
            }
            $search_table[] = $g5_search['tables'][$i];
            $read_level[]   = $g5_search['read_level'][$i];
            $search_table_count[] = $total_count;
// 코드 추가
            if ($onetable) {
                $board_array = array($row['cnt'] => $g5_search['tables'][$i]);
                foreach($board_array as $key => $value){
//                    echo "key=".$key.",value=".$value;
//                    echo "<Br>";
                }
                if ($onetable == $value) {
                    $total_count = $key;
                }
            } else {
                $total_count += $row['cnt'];
            }
// 코드 추가 끝
//          $total_count += $row['cnt'];
            $sql2 = " select bo_subject, bo_mobile_subject from {$g5['board_table']} where bo_table = '{$g5_search['tables'][$i]}' ";
            $row2 = sql_fetch($sql2);
            $sch_class = "";
            $sch_all = "";
            if ($onetable == $g5_search['tables'][$i]) 
                $sch_class = "class=sch_on";
            else
                $sch_all = "class=sch_on";
        
            $str_board_list .= 
                '<li>
                    <a href="'.$_SERVER['SCRIPT_NAME'].'?'.$search_query.'&gr_id='.$gr_id.'&onetable='.$g5_search['tables'][$i].'" '.$sch_class.'>
                        <span class="sch_board">'.((G5_IS_MOBILE && $row2['bo_mobile_subject']) ? $row2['bo_mobile_subject'] : $row2['bo_subject']).'</span>
                        <span class="cnt_cmt">'.$row['cnt'].'</span>
                    </a>
                </li>';
            
        }

 

 

이렇게 코드를 추가해주면

전체 검색시 search.skin 의 $total_count 는 제대로 들어오는데요..

하단 검색 결과 리스트 출력이 안됩니다-_-;;

foreach 문을 주석처리하면

total_count 는 안들어오는데

하단 검색 결과 리스트는 출력이 됩니다 ㅠ

 

나름..$row['cnt']가 있는 것들만

배열로 만들어서 key, value에 담고 onetable 이랑 value 랑 같으면

key값을 가져오게 했는데..

어디가 잘못된걸까요?ㅜ

 

 

제가 구현하고자 하는건

https://sir.kr/qa/229741

위의 게시물 보시면 됩니다 ㅠ

 

 

 

혼자 해서 결과를 냈습니다.

맞는지는 모르겠으나 정상 작동은 합니다(?)

search.php

<?php
include_once('./_common.php');
$g5['title'] = '전체검색 결과';
include_once('./_head.php');
$search_table = Array();
$table_index = 0;
$write_pages = "";
$text_stx = "";
$srows = 0;
$stx = strip_tags($stx);
//$stx = preg_replace('/[[:punct:]]/u', '', $stx); // 특수문자 제거
$stx = get_search_string($stx); // 특수문자 제거
if ($stx) { // 검색할 키워드가 있다면
    $stx = preg_replace('/\//', '\/', trim($stx));
    $sop = strtolower($sop);
    if (!$sop || !($sop == 'and' || $sop == 'or')) $sop = 'and'; // 연산자 and , or
    $srows = isset($_GET['srows']) ? (int)preg_replace('#[^0-9]#', '', $_GET['srows']) : 10;
    if (!$srows) $srows = 10; // 한페이지에 출력하는 검색 행수
    $g5_search['tables'] = Array();    // 검색할 테이블을 배열로 만든다
    $g5_search['read_level'] = Array();
    $sql = " SELECT gr_id, bo_table, bo_read_level FROM {$g5['board_table']} WHERE bo_use_search = 1 AND bo_list_level <= '{$member['mb_level']}' ";
    $sql .= " AND gr_id != 'shop' "; // 쇼핑몰 게시글 검색 안되게~
    $sql .= " AND bo_table != 'PoorMember' "; // 불량회원 검색 안되게~
    if ($gr_id)
        $sql .= " AND gr_id = '{$gr_id}' ";
    
    $onetable = isset($onetable) ? $onetable : ""; // $onetable 이 존재한다면 $onetable은 $onetable로 존재하지 않는다면 빈값으로
    
    /* 2018-01-17 검색 결과 탭 클릭시 게시판 하나만 검색하는 기능 주석 
    if ($onetable) // 하나의 게시판만 검색한다면
        $sql .= " AND bo_table = '{$onetable}' ";
    */
    $sql .= " ORDER BY bo_subject, 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 {$g5['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 {$g5['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;
                }
            }
        }
        $g5_search['tables'][] = $row['bo_table'];
        $g5_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));
    
    if( count($s) > 1 ){
        $s = array_slice($s, 0, 2);
        $stx = implode(' ', $s);
    }
    $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}'))";
                    else
                        $str .= "INSTR({$field[$k]}, '{$search_str}')";
                    break;
                default :
                    $str .= "1=0"; // 항상 거짓
                    break;
            }
            $op2 = " or ";
        }
        $str .= ")";
        $op1 = " {$sop} ";
    }
    $str .= ")";
    $sql_search = $str;
    $str_board_list = "";
    $board_count = 0;
    $time1 = get_microtime();
    $total_count = 0;
    $board_array = array();
    for ($i=0; $i<count($g5_search['tables']); $i++) {
        $tmp_write_table   = $g5['write_prefix'] . $g5_search['tables'][$i];
        // 원본 주석추가 $sql = " select wr_id from {$tmp_write_table} where {$sql_search} ";
        $sql = " SELECT wr_id FROM {$tmp_write_table} WHERE NOT wr_7 = 'empty' AND {$sql_search} "; // 댓글내용없는 기업평가 댓글 검색 제외
        $result = sql_query($sql, false);
        $row['cnt'] = _num_rows($result);
        //array_push($board_array, $row['cnt'], $g5_search['tables'][$i]);
        if ($onetable){
            $board_array[$g5_search['tables'][$i]] = $row['cnt'];
            if ($onetable == $g5_search['tables'][$i]) {
                $total_count -= $row['cnt'];
            }
        } else {
            $total_count += $row['cnt'];
        }
        if ($row['cnt']) {
            if ($onetable){
                $board_count = 1;
            } else {
                $board_count++;
            }
            $search_table[] = $g5_search['tables'][$i];
            $read_level[]   = $g5_search['read_level'][$i];
            $search_table_count[] = $total_count;
            $sql2 = " select bo_subject, bo_mobile_subject from {$g5['board_table']} where bo_table = '{$g5_search['tables'][$i]}' ";
            $row2 = sql_fetch($sql2);
            $sch_class = "";
            $sch_all = "";
            if ($onetable == $g5_search['tables'][$i]) 
                $sch_class = "class=sch_on";
            else
                $sch_all = "class=sch_on";
        
            $str_board_list .= 
                '<li>
                    <a href="'.$_SERVER['SCRIPT_NAME'].'?'.$search_query.'&gr_id='.$gr_id.'&onetable='.$g5_search['tables'][$i].'" '.$sch_class.'>
                        <span class="sch_board">'.((G5_IS_MOBILE && $row2['bo_mobile_subject']) ? $row2['bo_mobile_subject'] : $row2['bo_subject']).'</span>
                        <span class="cnt_cmt">'.$row['cnt'].'</span>
                    </a>
                </li>';
        }
    }
    $rows = $srows;
    if ($onetable) {
        $total_page = ceil(abs($total_count) / $rows);  // 전체 페이지 계산
    } else {
        $total_page = ceil($total_count / $rows);  // 전체 페이지 계산
    }
    if ($page < 1) { $page = 1; } // 페이지가 없으면 첫 페이지 (1 페이지)
    $from_record = ($page - 1) * $rows; // 시작 열을 구함
    for ($i=0; $i<count($search_table); $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;
    if ($onetable) {
        for ($idx=$table_index; $idx<count($search_table); $idx++) {
            // 검색 탭 구현을 위한 코드 추가
                if($onetable != $search_table[$idx])
                    continue;
            
            // 검색 탭 구현을 위한 코드 추가 끝 
            $sql = " select bo_subject, bo_mobile_subject from {$g5['board_table']} where bo_table = '{$search_table[$idx]}' ";
            $row = sql_fetch($sql);
            $bo_subject[$idx] = ((G5_IS_MOBILE && $row['bo_mobile_subject']) ? $row['bo_mobile_subject'] : $row['bo_subject']);
            $tmp_write_table = $g5['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'])
                {
                    $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 (strstr($sfl, 'wr_name'))                            // 추가 2017-02-02
                    $wr_name = search_font($stx, $row['wr_name']);        // 추가 2017-02-02
                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 = '';
                $list[$idx][$i]['subject'] = $subject;
                $list[$idx][$i]['content'] = $content;
                // 2018-01-17 주석처리 $list[$idx][$i]['name'] = get_sideview($row['mb_id'], get_text(cut_str($row['wr_name'], $config['cf_cut_name'])), $row['wr_email'], $row['wr_homepage']);
                $list[$idx][$i]['name'] = get_sideview($row['mb_id'], get_text(cut_str($row['wr_name'], $config['cf_cut_name'])), $row['wr_homepage']);
                $k++;
                if ($k >= $rows)
                    break;
            }
            sql_free_result($result);
            if ($k >= $rows)
                break;
            $from_record = 0;
        }
    } else {
        for ($idx=$table_index; $idx<count($search_table); $idx++) {
            
            // 검색 탭 구현을 위한 코드 추가 끝 
            $sql = " select bo_subject, bo_mobile_subject from {$g5['board_table']} where bo_table = '{$search_table[$idx]}' ";
            $row = sql_fetch($sql);
            $bo_subject[$idx] = ((G5_IS_MOBILE && $row['bo_mobile_subject']) ? $row['bo_mobile_subject'] : $row['bo_subject']);
            $tmp_write_table = $g5['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'])
                {
                    $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 (strstr($sfl, 'wr_name'))                            // 추가 2017-02-02
                    $wr_name = search_font($stx, $row['wr_name']);        // 추가 2017-02-02
                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 = '';
                $list[$idx][$i]['subject'] = $subject;
                $list[$idx][$i]['content'] = $content;
                // 2018-01-17 주석처리 $list[$idx][$i]['name'] = get_sideview($row['mb_id'], get_text(cut_str($row['wr_name'], $config['cf_cut_name'])), $row['wr_email'], $row['wr_homepage']);
                $list[$idx][$i]['name'] = get_sideview($row['mb_id'], get_text(cut_str($row['wr_name'], $config['cf_cut_name'])), $row['wr_homepage']);
                $k++;
                if ($k >= $rows)
                    break;
            }
            sql_free_result($result);
            if ($k >= $rows)
                break;
            $from_record = 0;
        }
    }
    $write_pages = get_paging(G5_IS_MOBILE ? $config['cf_mobile_pages'] : $config['cf_write_pages'], $page, $total_page, $_SERVER['SCRIPT_NAME'].'?'.$search_query.'&gr_id='.$gr_id.'&srows='.$srows.'&onetable='.$onetable.'&page=');
}
$group_select = '<label for="gr_id" class="sound_only">게시판 그룹선택</label><select name="gr_id" id="gr_id" class="select"><option value="">전체 분류';
$sql = " select gr_id, gr_subject from {$g5['group_table']} order by gr_id ";
$result = sql_query($sql);
for ($i=0; $row=sql_fetch_array($result); $i++)
    $group_select .= "<option value=\"".$row['gr_id']."\"".get_selected($_GET['gr_id'], $row['gr_id']).">".$row['gr_subject']."</option>";
$group_select .= '</select>';
if (!$sfl) $sfl = 'wr_subject';
if (!$sop) $sop = 'or';
include_once($search_skin_path.'/search.skin.php');
include_once('./_tail.php');
?>
이 글을 내 페이스북 계정으로 보내기 이 글을 내 트위터 계정으로 보내기 이 글을 내 구글플러스 계정으로 보내기

이 질문에 댓글 쓰기 :

답변을 작성하시기 전에 로그인 해주세요.
전체 571
고마운 분의 도움으로 질문을 해결하셨다면, 채택을 눌러서 감사의 마음을 전하세요.
어떻게 질문해야 할지 모른다면 질문하는 방법을 읽어 보신후 질문해 보세요.
QA 내용 검색

회원로그인

진행중 포인트경매

  1. ISPCONFIG 3 PRO 자동설치 스크립트

    참여23 회 시작19.05.21 10:11 종료19.05.28 10:11

(주)에스아이알소프트 (06253) 서울특별시 강남구 도곡로1길 14, 6층 624호 (역삼동, 삼일프라자) 대표메일:admin@sir.kr
사업자등록번호:217-81-36347 대표:홍석명 통신판매업신고번호:2014-서울강남-02098호 개인정보보호책임자:이총

© SIRSOFT