지정 기간 검색

지정 기간 검색

QA

지정 기간 검색

본문

일자를 지정하여 검색하여 해당 기간 내의 게시글을 표기하는 기능을 만들고자

 

2106084734_1580884401.9502.png

위 이미지와 같이 세팅이 되어 있습니다.

 

2106084734_1580884469.5545.png

위 이미지와 같이 주소창이 검색 결과(당일)로 입력이 되기까지 합니다.

 

하지만, 정작 원하는 게시물들을 표기하지 못하고 그대로인 점이 문제입니다.

 

해당 코드는 php 파일로 따로 만들어 스킨파일 list.skin.php 로 include 했습니다.

 


  <input type="hidden" name="bo_table" value="<?php echo $bo_table ?>">
  <input type="hidden" name="sca" value="<?php echo $sca ?>">
  <input type="hidden" name="sop" value="and">

 

 


$str .= '<option value="wr_1" '.get_selected($sfl, 'wr_1').'>숙박일자</option>';
$str .= '<option value="wr_last" '.get_selected($sfl, 'wr_last').'>예약일자</option>';

검색 구분 부분

 


<div class="clearfix">
            <label for="sfl" class="sound_only">검색 구분</label>
            <select name="sfl" id="sfl">
                <?php echo search_data_sfl_select_options_date($sfl); ?>
            </select>
            <!-- 시작일 -->
            <span class="dset">
              <input type="t_start" class="datepicker inpType" name="t_start" id="t_start" placeholder="2000-01-01" required >
              <i class="fas fa-calendar-alt btncalendar dateclick"></i>
            </span>
            <span class="demi">~</span>
            <!-- 종료일 -->
            <span class="dset">
              <input type="t_end" class="datepicker inpType" name="t_end" id="t_end" placeholder="2000-01-01" required >
              <i class="fas fa-calendar-alt btncalendar dateclick"></i>
            </span>
            <button type="submit" value="검색" class="sch_btn"><i class="fa fa-search" aria-hidden="true"></i><span class="sound_only">검색</span></button>
          </div>

검색 입력 부분

 

 

 

bbs/list 부분


<?php
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
// 분류 사용 여부
$is_category = false;
$category_option = '';
if ($board['bo_use_category']) {
    $is_category = true;
    $category_href = G5_BBS_URL.'/board.php?bo_table='.$bo_table;
    $category_option .= '<li><a href="'.$category_href.'"';
    if ($sca=='')
        $category_option .= ' id="bo_cate_on"';
    $category_option .= '>전체</a></li>';
    $categories = explode('|', $board['bo_category_list']); // 구분자가 , 로 되어 있음
    for ($i=0; $i<count($categories); $i++) {
        $category = trim($categories[$i]);
        if ($category=='') continue;
        $category_option .= '<li><a href="'.($category_href."&sca=".urlencode($category)).'"';
        $category_msg = '';
        if ($category==$sca) { // 현재 선택된 카테고리라면
            $category_option .= ' id="bo_cate_on"';
            $category_msg = '<span class="sound_only">열린 분류 </span>';
        }
        $category_option .= '>'.$category_msg.$category.'</a></li>';
    }
}
$sop = strtolower($sop);
if ($sop != 'and' && $sop != 'or')
    $sop = 'and';
// 분류 선택 또는 검색어가 있다면
$stx = trim($stx);
if ($sca || $stx) {
    $sql_search = get_sql_search($sca, $sfl, $stx, $sop);
    // 가장 작은 번호를 얻어서 변수에 저장 (하단의 페이징에서 사용)
    $sql = " select MIN(wr_num) as min_wr_num from {$write_table} ";
    $row = sql_fetch($sql);
    $min_spt = (int)$row['min_wr_num'];
    if (!$spt) $spt = $min_spt;
    $sql_search .= " and (wr_num between {$spt} and ({$spt} + {$config['cf_search_part']})) ";
    // 원글만 얻는다. (코멘트의 내용도 검색하기 위함)
    // 라엘님 제안 코드로 대체 http://sir.kr/g5_bug/2922
    $sql = " SELECT COUNT(DISTINCT `wr_parent`) AS `cnt` FROM {$write_table} WHERE {$sql_search} ";
    $row = sql_fetch($sql);
    $total_count = $row['cnt'];
    /*
    $sql = " select distinct wr_parent from {$write_table} where {$sql_search} ";
    $result = sql_query($sql);
    $total_count = sql_num_rows($result);
    */
}
///////기간별검색//////////////
//t_start=20&t_end=25&x=25&y=9
elseif ($sfl || $t_start || $t_end)
{
    $sql_search = "'$sfl' >= '$t_start' and '$sfl' <= '$t_end'";
    // 가장 작은 번호를 얻어서 변수에 저장 (하단의 페이징에서 사용)
    $sql = " select MIN(wr_num) as min_wr_num from {$write_table} ";
    $row = sql_fetch($sql);
    $min_spt = (int)$row['min_wr_num'];
    if (!$spt) $spt = $min_spt;
    $sql_search .= " and (wr_num between {$spt} and ({$spt} + {$config['cf_search_part']})) ";
    // $sql_search .= " and (wr_num between '".$spt."' and '".($spt + $config[cf_search_part])."') ";
    // 원글만 얻는다. (코멘트의 내용도 검색하기 위함)
    $sql = " SELECT COUNT(DISTINCT `wr_parent`) AS `cnt` FROM {$write_table} WHERE {$sql_search} ";
    $row = sql_fetch($sql);
    $total_count = $row['cnt'];
}
////////////////////////////
else {
    $sql_search = "";
    $total_count = $board['bo_count_write'];
}
if(G5_IS_MOBILE) {
    $page_rows = $board['bo_mobile_page_rows'];
    $list_page_rows = $board['bo_mobile_page_rows'];
} else {
    $page_rows = $board['bo_page_rows'];
    $list_page_rows = $board['bo_page_rows'];
}
if ($page < 1) { $page = 1; } // 페이지가 없으면 첫 페이지 (1 페이지)
// 년도 2자리
$today2 = G5_TIME_YMD;
$list = array();
$i = 0;
$notice_count = 0;
$notice_array = array();
// 공지 처리
if (!$sca && !$stx) {
    $arr_notice = explode(',', trim($board['bo_notice']));
    $from_notice_idx = ($page - 1) * $page_rows;
    if($from_notice_idx < 0)
        $from_notice_idx = 0;
    $board_notice_count = count($arr_notice);
    for ($k=0; $k<$board_notice_count; $k++) {
        if (trim($arr_notice[$k]) == '') continue;
        $row = sql_fetch(" select * from {$write_table} where wr_id = '{$arr_notice[$k]}' ");
        if (!$row['wr_id']) continue;
        $notice_array[] = $row['wr_id'];
        if($k < $from_notice_idx) continue;
        $list[$i] = get_list($row, $board, $board_skin_url, G5_IS_MOBILE ? $board['bo_mobile_subject_len'] : $board['bo_subject_len']);
        $list[$i]['is_notice'] = true;
        $i++;
        $notice_count++;
        if($notice_count >= $list_page_rows)
            break;
    }
}
$total_page  = ceil($total_count / $page_rows);  // 전체 페이지 계산
$from_record = ($page - 1) * $page_rows; // 시작 열을 구함
// 공지글이 있으면 변수에 반영
if(!empty($notice_array)) {
    $from_record -= count($notice_array);
    if($from_record < 0)
        $from_record = 0;
    if($notice_count > 0)
        $page_rows -= $notice_count;
    if($page_rows < 0)
        $page_rows = $list_page_rows;
}
// 관리자라면 CheckBox 보임
$is_checkbox = false;
if ($is_member && ($is_admin == 'super' || $group['gr_admin'] == $member['mb_id'] || $board['bo_admin'] == $member['mb_id']))
    $is_checkbox = true;
// 정렬에 사용하는 QUERY_STRING
$qstr2 = 'bo_table='.$bo_table.'&sop='.$sop;
// 0 으로 나눌시 오류를 방지하기 위하여 값이 없으면 1 로 설정
$bo_gallery_cols = $board['bo_gallery_cols'] ? $board['bo_gallery_cols'] : 1;
$td_width = (int)(100 / $bo_gallery_cols);
// 정렬
// 인덱스 필드가 아니면 정렬에 사용하지 않음
//if (!$sst || ($sst && !(strstr($sst, 'wr_id') || strstr($sst, "wr_datetime")))) {
if (!$sst) {
    if ($board['bo_sort_field']) {
        $sst = $board['bo_sort_field'];
    } else {
        $sst  = "wr_num, wr_reply";
        $sod = "";
    }
} else {
    // 게시물 리스트의 정렬 대상 필드가 아니라면 공백으로 (nasca 님 09.06.16)
    // 리스트에서 다른 필드로 정렬을 하려면 아래의 코드에 해당 필드를 추가하세요.
    // $sst = preg_match("/^(wr_subject|wr_datetime|wr_hit|wr_good|wr_nogood)$/i", $sst) ? $sst : "";
    $sst = preg_match("/^(wr_datetime|wr_hit|wr_good|wr_nogood)$/i", $sst) ? $sst : "";
}
if(!$sst)
    $sst  = "wr_num, wr_reply";
if ($sst) {
    $sql_order = " order by {$sst} {$sod} ";
}
if ($sca || $stx) {
    $sql = " select distinct wr_parent from {$write_table} where {$sql_search} {$sql_order} limit {$from_record}, $page_rows ";
} ////////////기간별검색/////////////////
elseif ($sfl || $t_start || $t_end){
    // $sql = " select distinct wr_parent from $write_table where $sql_search $sql_order limit $from_record, $board[bo_page_rows] ";
    // $sql = " select distinct wr_parent from $write_table where $sql_search $sql_order limit $from_record, $page_rows ";
    $sql = " select distinct wr_parent from {$write_table} where {$sql_search} {$sql_order} limit {$from_record}, $page_rows ";
  }
////////////////////////////////////////
else {
    $sql = " select * from {$write_table} where wr_is_comment = 0 ";
    if(!empty($notice_array))
        $sql .= " and wr_id not in (".implode(', ', $notice_array).") ";
    $sql .= " {$sql_order} limit {$from_record}, $page_rows ";
}
// 페이지의 공지개수가 목록수 보다 작을 때만 실행
if($page_rows > 0) {
    $result = sql_query($sql);
    $k = 0;
    while ($row = sql_fetch_array($result))
    {
        // 검색일 경우 wr_id만 얻었으므로 다시 한행을 얻는다
        if ($sca || $stx)
            $row = sql_fetch(" select * from {$write_table} where wr_id = '{$row['wr_parent']}' ");
        //////////기간별검색/////////////////////
        if ($sfl || $t_start || $t_end)
            $row = sql_fetch(" select * from {$write_table} where wr_id = '{$row['wr_parent']}' ");
        ////////////////////////////////////////
        $list[$i] = get_list($row, $board, $board_skin_url, G5_IS_MOBILE ? $board['bo_mobile_subject_len'] : $board['bo_subject_len']);
        if (strstr($sfl, 'subject')) {
            $list[$i]['subject'] = search_font($stx, $list[$i]['subject']);
        }
        $list[$i]['is_notice'] = false;
        $list_num = $total_count - ($page - 1) * $list_page_rows - $notice_count;
        $list[$i]['num'] = $list_num - $k;
        $i++;
        $k++;
    }
}
$write_pages = get_paging(G5_IS_MOBILE ? $config['cf_mobile_pages'] : $config['cf_write_pages'], $page, $total_page, './board.php?bo_table='.$bo_table.$qstr.'&page=');
$list_href = '';
$prev_part_href = '';
$next_part_href = '';
if ($sca || $stx) {
    $list_href = './board.php?bo_table='.$bo_table;
    $patterns = array('#&page=[0-9]*#', '#&spt=[0-9\-]*#');
    //if ($prev_spt >= $min_spt)
    $prev_spt = $spt - $config['cf_search_part'];
    if (isset($min_spt) && $prev_spt >= $min_spt) {
        $qstr1 = preg_replace($patterns, '', $qstr);
        $prev_part_href = './board.php?bo_table='.$bo_table.$qstr1.'&spt='.$prev_spt.'&page=1';
        $write_pages = page_insertbefore($write_pages, '<a href="'.$prev_part_href.'" class="pg_page pg_prev">이전검색</a>');
    }
    $next_spt = $spt + $config['cf_search_part'];
    if ($next_spt < 0) {
        $qstr1 = preg_replace($patterns, '', $qstr);
        $next_part_href = './board.php?bo_table='.$bo_table.$qstr1.'&spt='.$next_spt.'&page=1';
        $write_pages = page_insertafter($write_pages, '<a href="'.$next_part_href.'" class="pg_page pg_end">다음검색</a>');
    }
}

$write_href = '';
if ($member['mb_level'] >= $board['bo_write_level']) {
    $write_href = './write.php?bo_table='.$bo_table;
}
$nobr_begin = $nobr_end = "";
if (preg_match("/gecko|firefox/i", $_SERVER['HTTP_USER_AGENT'])) {
    $nobr_begin = '<nobr>';
    $nobr_end   = '</nobr>';
}
// RSS 보기 사용에 체크가 되어 있어야 RSS 보기 가능 061106
$rss_href = '';
if ($board['bo_use_rss_view']) {
    $rss_href = './rss.php?bo_table='.$bo_table;
}
$stx = get_text(stripslashes($stx));
include_once($board_skin_path.'/list.skin.php');
?>
 

 

 

 

이 질문에 댓글 쓰기 :

답변 2

관리자 > 환경설정 > 기본 환경설정 > 게시판 기본 설정

 

에 보면..

 

[검색 단위] 라는 설정이 있습니다. [ ] 건 단위로 검색

 

이 부분의 숫자를 높게 (999999 등) 설정하여 저장한 뒤 확인해 보셨으면 합니다.

 

$sql_search .= " and (wr_num between {$spt} and ({$spt} + {$config['cf_search_part']})) ";

 

코드와 관련이 있는 부분입니다.

검색 단위를 높게 잡고 해도 검색 결과는 나오지 않습니다.
그리고 검색 단위와 상관없이 현재 해결된 부분이 있습니다.
반응이 없이 검색 전의 목록을 보여줬었는데,
현재 검색이 되지만 값을 못 찾는 것처럼 결과 값이 없다라고 나오게 됬습니다.

기간별 검색 부분의 sql문을 출력해서..  sql 문이 맞는지를 확인해보면 어떨까 싶습니다.

$sql = " select distinct wr_parent from {$write_table} where {$sql_search} {$sql_order} limit {$from_record}, $page_rows ";

echo $sql;

무슨 오류가 난다는건지가 없는것 같습니다.ㅜㅜ

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

회원로그인

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