페이징처리와 검색관련해서 질문입니다.

페이징처리와 검색관련해서 질문입니다.

QA

페이징처리와 검색관련해서 질문입니다.

본문

<?php

    include_once('./_common.php');

 

    if($_GET['sfl']){

        $sfl = mysql_escape_string($_GET['sfl']);

        $stx = mysql_escape_string($_GET['stx']);

    }

 

  /* 페이징 시작 */

  $sql_cnt = "select count(*) as cnt from ex_work_data";

  if(isset($_GET['page'])){ $page = $_GET['page']; } else { $page = 1; }

  $row = sql_fetch($sql_cnt);  // mysql_fetch_array로 하면 페이지 12345 가 다 보임

 

  $allPost = $row['cnt']; //전체 게시글의 수

  echo "전체게시글 수:" .  $allPost;

     

  $onePage = 5; // 한 페이지에 보여줄 게시글의 수.

  $allPage = ceil($allPost / $onePage); //전체 페이지의 수

  if($page < 1 && $page > $allPage) {

  ?>

    <script>

      alert("존재하지 않는 페이지입니다.");

      history.back();

    </script>

  <?php

    exit;

  }

 

  $oneSection = 5; //한번에 보여줄 총 페이지 개수(1 ~ 10, 11 ~ 20 ...)

  $currentSection = ceil($page / $oneSection); //현재 섹션

  $allSection = ceil($allPage / $oneSection); //전체 섹션의 수

 

  $firstPage = ($currentSection * $oneSection) - ($oneSection - 1); //현재 섹션의 처음 페이지

 

  if($currentSection == $allSection) {

    $lastPage = $allPage; //현재 섹션이 마지막 섹션이라면 $allPage가 마지막 페이지가 된다.

  } else {

    $lastPage = $currentSection * $oneSection; //현재 섹션의 마지막 페이지

  }

 

  $prevPage = (($currentSection - 1) * $oneSection); //이전 페이지, 11~20일 때 이전을 누르면 10 페이지로 이동.

  $nextPage = (($currentSection + 1) * $oneSection) - ($oneSection - 1); //다음 페이지, 11~20일 때 다음을 누르면 21 페이지로 이동.

 

  $paging = '<ul>'; // 페이징을 저장할 변수

 

  //첫 페이지가 아니라면 처음 버튼을 생성

  if($page != 1) { 

    $paging .= '<li class="page page_start"><a href="./work_data_list.php?page=1">처음</a></li>';

  }

  //첫 섹션이 아니라면 이전 버튼을 생성

  if($currentSection != 1) { 

    $paging .= '<li class="page page_prev"><a href="./work_data_list.php?page=' . $prevPage . '">이전</a></li>';

  }

 

  // 페이징 숫자 나옴

  for($i = $firstPage; $i <= $lastPage; $i++) {

    if($i == $page) {

      $paging .= '<li class="page current">' . $i . '</li>';

    } else {

      $paging .= '<li class="page"><a href="./work_data_list.php?page=' . $i . '">' . $i . '</a></li>';

    }

  }

   

  //마지막 섹션이 아니라면 다음 버튼을 생성

  if($currentSection != $allSection) { 

    $paging .= '<li class="page page_next"><a href="./work_data_list.php?page=' . $nextPage . '">다음</a></li>';

  }

   

  //마지막 페이지가 아니라면 끝 버튼을 생성

  if($page != $allPage) { 

    $paging .= '<li class="page page_end"><a href="./work_data_list.php?page=' . $allPage . '">끝</a></li>';

  }

  $paging .= '</ul>';

   

  /* 페이징 끝 */

  $currentLimit = ($onePage * $page) - $onePage; //몇 번째의 글부터 가져오는지

  $sqlLimit = ' limit ' . $currentLimit . ', ' . $onePage; //limit sql 구문

  $sql .= $sqlLimit;

  $result = sql_query($sql);

  $list_num = $allPost - ($page - 1) * $onePage;

 

 

?>

<table>

    <form  method="POST" name="frm" id="frm" >

    <input type="hidden" name="work_uid" id="work_uid" value="" />

    <input type="hidden" name="w" id="w" value="" />

        <?php

            $sql = " select * from ex_work_data ";

            $res = sql_query($sql);

            $cnt = 0;

            while($row = sql_fetch_array($res)) { $cnt++; ?>

            <tr>

                <td><?=$cnt?>.</td>

                <td><?=$row['work_branch']?></td>

                <td><?=$row['work_name']?></td>

                <td>

                    <button onclick="goForm('u','<?=$row['work_uid']?>');">수정</button>

                </td>

                <td>

                    <button onclick="goForm('d','<?=$row['work_uid']?>');">삭제</button>

                </td>

            </tr>

        <?php

            }

        ?>

    </form>

</table>

<a href="./work_data_write.php">글쓰기</a>

 

<script type="text/javascript">

    function fsearch(f) {

            if(f.sfl.value==''){ alert("검색분류를 선택하세요."); f.stx.focus(); return false; }

            if(f.stx.value==''){ alert("검색어가 입력되지 않았습니다."); f.stx.focus(); return false; }

    }

    return true;

 

</script>

 

<div>

    <form action="./work_data_list.php" onsubmit="return fsearch(this)" method="get">

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

            <option value="">- 선택 -</option>

            <option value="work_branch" <?=$sfl == 'work_branch' ? 'selected' : ''?>>지사</option>

            <option value="work_name" <?=$sfl == 'work_name' ? 'selected' : '' ?>>내용</option>

        </select>

        <input type="text" name="stx" id="stx" value="<?=$stx?>" />

        <input type="submit" value="검색" />

    </form>

</div>

<?php

    if($cnt>0) {

        echo $paging;

    }

?>

 

전체게시글의 수를 변경해주면 

 

밑에 페이지를 나타내는 숫자는 변경돼서 나오는데 리스트는 항상 전체글이 출력이 됩니다.

 

소스에서 어떤쪽에 문제가 있는지 궁금합니다.

 

검색도 안되는 이유가 페이징이 안돼서 검색이 안되는건지 

 

아니면 검색폼에서 소스에 문제가 있는것인지 궁금합니다.

 

기존의 소스를 토대로 하여 만들었는데 제가 보기에 다른부분이 안보여 질문올립니다.

 

이 질문에 댓글 쓰기 :

답변 2

전체글이 출력되면

해당 쿼리에서 전체글을 출력하고있기때문에

그렇습니다.

bbs/list.php 파일 하단에 get_list함수를 실행하는데

이전에 실행되는 쿼리문에서 where 절을 추가하여서

원하시는 글만 뽑아오도록 구현하셔야합니다.

그누보드의 get_paging 함수를 활용하세요.

 

아래처럼 간단하게 처리가 가능합니다.

 


<?
$table = "TABLE_NAME";
$sql_common = " from $table";
$sql_search = " where (1) ";
 
// 여기서부터 조건검색 시작 
if($a) {
	$sql_search .= " and aaa = '$a'"
}
 
if($b) {
	$sql_search .= " and bbb = '$b'"
}
 
.
.
.
.
.
.
 
$sql_order = " order by ID_NO desc ";  // 정렬
 
 
$sql = " select
			count(*) as cnt
       $sql_common
       $sql_search
       $sql_order ";
$row = sql_fetch($sql);
$total_count = $row[cnt]; //총갯수
 
//한페이지에 보여질 리스트 숫자..
$rows = 20;
$total_page  = ceil($total_count / $rows);  // 전체 페이지 계산
if (!$page) $page = 1; // 페이지가 없으면 첫 페이지 (1 페이지)
$from_record = ($page - 1) * $rows; // 시작 열을 구함
 
$sql = " select
			*
          $sql_common
          $sql_search
          $sql_order
          limit $from_record, $rows ";
$result = sql_query($sql);
 
$qstr = "sfl=$sfl&stx=$stx"; //검색조건 변수들
if($a) { $qstr .= "&a=$a" }
if($b) { $qstr .= "&b=$b" }
 
$write_pages = get_paging(G5_IS_MOBILE ? $config['cf_mobile_pages'] : $config['cf_write_pages'], $page, $total_page, '?'.$qstr.'&page=');
 
?>
답변을 작성하시기 전에 로그인 해주세요.
전체 123,726 | RSS
QA 내용 검색

회원로그인

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