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

날짜 검색 질문드립니다. (다시질문.ㅠ) 채택완료

그누배우자 2년 전 조회 1,484

안녕하세요.

아래에서도 질문을 드렸었는데요..

날짜 검색을 여기저기 참고해서 만들었습니다.

 

소스는 아래와 같습니다.

 

</p>

<p> </p>

<p>bbs/list.php 에 추가</p>

<p>if($s_Date && $e_Date) {

$sql_datet .= " and left(wr_datetime, 10) between '{$s_Date}' and '{$e_Date}' ";

}

 

if ($is_search_bbs) {

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

} else {

    $sql = " select * from {$write_table} where wr_is_comment = 0 {$sql_datet}";

    if(!empty($notice_array))

        $sql .= " and wr_id not in (".implode(', ', $notice_array).") ";

    $sql .= " {$sql_order} limit {$from_record}, $page_rows ";

}</p>

<p> </p>

<p>



 

list.skin.php에 추가

<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>

<script src="//code.jquery.com/ui/1.8.18/jquery-ui.min.js"></script>

<script>

  $.datepicker.setDefaults({

    dateFormat: 'yy-mm',

    prevText: '이전 달',

    nextText: '다음 달',

    monthNames: ['1월', '2월', '3월', '4월', '5월', '6월', '7월', '8월', '9월', '10월', '11월', '12월'],

    monthNamesShort: ['1월', '2월', '3월', '4월', '5월', '6월', '7월', '8월', '9월', '10월', '11월', '12월'],

    dayNames: ['일', '월', '화', '수', '목', '금', '토'],

    dayNamesShort: ['일', '월', '화', '수', '목', '금', '토'],

    dayNamesMin: ['일', '월', '화', '수', '목', '금', '토'],

    showMonthAfterYear: true,

    yearSuffix: '년'

  });

     $(function() {

        $("#s_Date, #e_Date").datepicker({

            dateFormat: 'yy-mm-dd'

        });

    });</p>

<p></script>

 

      <form name="fsearch" method="get">

            <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">

            <input type="hidden" name="sfl" value="wr_datetime"<?php echo get_selected($sfl, 'wr_datetime'); ?>>

            <input type="text" name="s_Date" id="s_Date" autocomplete="off">~<input type="text" name="e_Date" id="e_Date" autocomplete="off"> 

            <button type="submit" value="검색" class="sch_btn"><i class="fa fa-search" aria-hidden="true"></i><span class="sound_only">검색</span></button>

            </form>

 

 

이렇게 해서 기능은 정상적으로 잘 동작을 하는데요..

문제는

결과는 3건인데

하단에 페이징 리스트가 나옵니다.

2페이지 눌러보면 상관없는 게시물이 그대로 나와버리더라구요..

 

bbs/list.php 에서 뭔가를 해줘야 할 것 같은데

검색해도 나오지 않아서 이렇게 다시 질문올려봅니다.

도와주십시오..ㅠ

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

답변 4개

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

$sql_datet관련 코드 삭제, 모든 것을 원본대로 돌리고 더음 코드만 추가 수정하세요

 

if ($sca || $stx || $stx === '0' || ($s_Date && $e_Date)) {     //검색이면
    $is_search_bbs = true;      //검색구분변수 true 지정
    $sql_search = get_sql_search($sca, $sfl, $stx, $sop);           

   if(!$sql_search || $sql_search =='0') $sql_search =''; 
   if($s_Date && $e_Date){
        if($sql_search) $sql_search .= " and ";
        $sql_search .= " wr_datetime between '$s_Date 00:00:00' and '$e_Date 23:59:59' ";

       $qstr.="&e_Date=$e_Date&s_Date=$s_Date";
   }

 

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

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

2년 전

bbs/list.php

 

이부분은 원본 그대로 유지하고

</p>

<p>if ($is_search_bbs) {

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

}</p>

<p>

 

이부분이 다음과 같이 수정되어야 할것 같습니다.

</p>

<p>// ------------------------------------------- 추가</p>

<p>$sql_datet = '';

if ($s_Date && $e_Date) {

    $sql_datet .= " and left(wr_datetime, 10) between '{$s_Date}' and '{$e_Date}' ";

}   </p>

<p>// ------------------------------------------- 추가</p>

<p>if ($sca || $stx || $stx === '0') {     //검색이면

    $is_search_bbs = true;      //검색구분변수 true 지정

    $sql_search = get_sql_search($sca, $sfl, $stx, $sop);</p>

<p>    // 가장 작은 번호를 얻어서 변수에 저장 (하단의 페이징에서 사용)

    $sql = " select MIN(wr_num) as min_wr_num from {$write_table} ";

    $row = sql_fetch($sql);

    $min_spt = (int)$row['min_wr_num'];</p>

<p>    if (!$spt) $spt = $min_spt;</p>

<p>    //$sql_search .= " and (wr_num between {$spt} and ({$spt} + {$config['cf_search_part']})) "</p>

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

    

    // 원글만 얻는다. (코멘트의 내용도 검색하기 위함)

    // 라엘님 제안 코드로 대체 <a href="http://sir.kr/g5_bug/2922" target="_blank" rel="noopener noreferrer">http://sir.kr/g5_bug/2922</a>

    $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);

    */

} else {

    $sql_search = "";</p>

<p>    $total_count = $board['bo_count_write'];

}</p>

<p>

 

list.skin.php

</p>

<p>        <form name="fsearch" method="get">

            <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">

            <label for="sfl" class="sound_only">검색대상</label>

            <select name="sfl" id="sfl">

                <?php echo get_board_sfl_select_options($sfl); ?>

            </select></p>

<p>            <!-- <input type="hidden" name="sfl" value="wr_datetime"<?php // echo get_selected($sfl, 'wr_datetime'); ?>> --></p>

<p>            <input type="text" name="s_Date" id="s_Date" autocomplete="off">~<input type="text" name="e_Date" id="e_Date" autocomplete="off"></p>

<p>            ...</p>

<p>        </form></p>

<p>

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

답변에 대한 댓글 2개

그누배우자
2년 전
답변정말 감사합니다!
너무 자세히 적어주셔서 정말 감사드립니다!! ㅎㅎ
근데 날짜검색 자체가 안되네요 ㅠ
제가 뭔가 잘못만지고 있나봅니다.... 그대로 하긴했는데..ㅠ
배르만
2년 전
위 답변은 커스텀되어 있지 않은 5.5.8.2.5 버전 기준입니다.
커스텀 되어 있거나 코드자체가 기준버전과 많이 다를경우
관련부분에 대한 추가확인이 필요합니다.

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

e
2년 전

bbs/list.php 에 아래소스를 추가해서.. 전체 페이지수를 다시 구해야 합니다.

</p>

<p>    $sql = " SELECT COUNT(DISTINCT `wr_parent`) AS `cnt` FROM {$write_table} WHERE {$sql_search} {$sql_datet}";</p>

<p>    $row = sql_fetch($sql);</p>

<p>    $total_count = $row['cnt'];</p>

<p>

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

답변에 대한 댓글 2개

그누배우자
2년 전
// 원글만 얻는다. (코멘트의 내용도 검색하기 위함)
// 라엘님 제안 코드로 대체 http://sir.kr/g5_bug/2922
$sql = " SELECT COUNT(DISTINCT `wr_parent`) AS `cnt` FROM {$write_table} WHERE {$sql_search} {$sql_datet}";
$row = sql_fetch($sql);
$total_count = $row['cnt'];

이렇게 해보니 기존이랑 똑같은 증상이네요 ㅠ
e
eyekiss
2년 전
$sql_datet 변수를 선언한 이후에 위의 소스를 추가해줘야 합니다.
기존의 상단 소스는 수정해도 소용이 없습니다.

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

쿼리 echo $sql; 이렇게 찍으면 뭐라 나와요

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

답변에 대한 댓글 3개

그누배우자
2년 전
select * from g5_write_test where wr_is_comment = 0 and left(wr_datetime, 10) between '2023-01-20' and '2023-01-20' order by wr_num, wr_reply limit 0, 15

이렇게 나옵니다.
그누배우자
2년 전
이렇게 하면 결과는 2개 인데
다음페이지누르면 기존의 2페이지가 나와버립니다.
엑스엠엘
2년 전
페이징에서
다음 페이지 링크에 날짜가 들어가 도록 해주면 됩니다.
보통 $qstr 변수를 이용합니다.

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

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

로그인