본문 바로가기

프론트앤드 수업

[mysql,php] 게시판 페이지( 이전, 다음 ) 버튼만들기

728x90

 

이전, 다음으로 가는 버튼 생성

// 페이지의 레코드 갯수 list_num
        $list_num = 5;
        // 한 블럭당 페이지 수
        $page_num =3;
        // 현재페이지
        $page = isset($_GET['page']) ? $_GET['page'] : 1;
        //전체 페이지수 = 전체 레코드수 / 페이지당 레코드 개수
        // 20 / 5 => 4page가 됨 ceil -> Math.cell과 동일 (올림)
        $total_page = ceil($total / $list_num);
        // 전체 블럭수 = 전체 페이지 수 / 블럭당 페이지 수
        $total_block = ceil($total_page / $page_num);
        // 현재 블럭 번호 = 현재 페이지 번호 / 블럭당 페이지 수 
        // 1 / 3 =0.3 => 1이됨  7 / 3 = 2.. => 3이됨 1을뺴서 2인상태로 +3을해서 6이되고 +1을하면 7이됨.
        $now_block = ceil($page / $page_num);        
        // 블럭 당 시작 페이지 번호 = (해당글의 블럭번호 - 1) * 블럭당 페이지수 + 1
        $s_pageNum = ($now_block - 1) * $page_num + 1;
        if($s_pageNum <=0){
            $s_pageNum = 1;
        }
        // 블럭 당 마지막 페이지 번호
        $e_pageNum = $now_block * $page_num;
        // 마지막 페이지 번호가 전체 페이지수를 넘지 않도록 설정
        if($e_pageNum > $total_page){
            $e_pageNum = $total_page;
        }
        //시작번호 0,5,10,15 가 나오도록 지정
        $start = ($page-1) * $list_num;
        //쿼리작성
        $sql = "select * from books limit $start, $list_num";
        // start가 1인경우 0,5 2인경우 5,5 3인경우 10,5 // start는 받아온page -1 * 5 기에...
        $result2 = mysqli_query($conn, $sql);

1. 한페이지당 보일 레코드의 개수입력 - 5

2. 페이지를 몇까지 보일지 블럭의 개수를 입력 - 3

3. 현재 페이지를 확인. 기본은 1로 만들어야 하기에 삼항연산자로 받아올 page값이 없다면 1을 넣어줌.

4. 전체 페이지의 수는 전체 레코드의 수 / 페이지당 레코드의 수

20줄의 책 내용이 있을시 5로나누면 4가 된다. ceil함수는 Math.cell과 동일 ( 올림 )

totalpage 로 맨 마지막 page를 확인할 수 있다.

5. 전체 블럭수는 페이지 수 / 블럭당 페이지 수

전에페이지가 10페이지라면 한블럭당 페이지를 3개씩 사용할거기에 블럭은 totalblock는 4가 되서 4개의 블럭이 만들어짐

6. 현재 블럭 위치. 현재 페이지 / 한블럭당 페이지 수

현재 페이지가 3일시 3으로 나눠지면 1이된다. 그렇기에 현재 블록의 위치는 1이 된다.

nowblock는 당장은 의미가 없지만 변수로서 활용을 위해 선언되어있다.

s_pagenum은 블럭당 시작페이지번호를 나타내는데 1,4,7,10 ... 3씩 더해진 값이 나와야한다.

그렇기에 nowblock에서 1을 빼고 * page num+1 을 해준다.

현재페이지가 4인경우 nowblock의 값은 1.333. 올림해서 2가 된다. -1을해 1을 만들고 x pagenum( 3 ) +1 을 하면 4가 되기에 다음페이지로 넘어갈 수 있다.

7. s_pagenum 스타트페이지번호는 -1을 하기에 0보다 작거나 같으면 1을 리턴해 기본적으로 첫페이지가 나올 수 있도록 해준다.

8. 블럭의 마지막위치는 nowblock에서 * pagenum(3) 을 해주면된다. 1

3을 3으로 나누고 올림을하면 무슨경우든 1이 나오게되고 *3을하면 3이된다.

6을 3으로나누고 올림하면 무슨경우든 2가 나오게 된다. x3을하면 1,3,6,9 마지막페이지번호를 만들 수 있다.

마지막 페이지번호가 전체 페이지번호를 넘기지 않기위해 e_pageNum과 total_page를 비교해 마지막페이지가 더 크다면 totalpage의 수를 마지막 페이지번호에 넣어준다.

9. 한페이지에 5개만 표시를 하기에 0,5,10,15 의 변수가 생성되도록 수식을 작성한다.

(현재페이지-1) * listnum (5) 현재페이지가 3이라면 mysql안에 있는 테이블에서 15번째 줄부터 출력을하기위한 값이다.

 $sql = "select * from books limit $start, $list_num";

select * from 테이블명 limet 시작위치 , 표출할 개수;

0에서 5개. 5에서 5개 10에서 5개 씩만 가져오게 된다.

        $result2 = mysqli_query($conn, $sql);

        while($row = mysqli_fetch_array($result2)){

          echo "<tr>
                <td>{$row['id']}</td>
                <td><a href='detail.php?id={$row['id']}'>{$row['title']}</a></td>
                <td>{$row['writer']}</td>
                <td>{$row['publisher']}</td>
                <td>{$row['price']}</td>
                <td>{$row['bookdate']}</td>
             </tr>";
    }

이렇게해서 돌릴시 처음화면엔 5개만이 표출된다. 다음페이지로 넘어가고싶으면 ?page=2 ..3..4 입력시 다음으로 넘어갈 수 있다.

이전, 다음, 페이지 만들기


        <?php
            for($print_page = $s_pageNum; $print_page <= $e_pageNum; $print_page++){
         ?> <a href ="index.php?page=<?=$print_page?>"><?=$print_page?> </a>

;;; 좀괴랄하네;;;

일단 1,2,3 버튼을 만들기위해 for문을 사용한다.

printpage = s_pagenum(스타트페이지); 그리고 아까 계산해놓은 e_page 앤드페이지까지로 하며 1씩 더해준다.

1

3, 4

6 7~9 가 나오게 된다. a태그를주어 누를때마다 p불러오는 page값을 get방식으로 변경해서 처리해준다. 이까지하면 번호를 선택해 1,2,3을 이동할 수 있다.

 <?php
         if($page <= 1) {?>  
         <a href="index.php?page=1">이전</a>
        <?php
        }else{ ?> 
         <a href="index.php?page=<?=($page-1)?>">이전</a> 
         <?php
         } ?>

                <?php
            if($page >= $total_page) {?>
                     <a href="index.php?page=<?=$total_page?>">다음</a>
            <?php
            }else{?>
                     <a href="index.php?page=<?=($page+1)?>">다음</a>
            <?php
            }  ?>

 

1. 현재 페이지가 1보다 작거나 같으면 이전 클릭시 1을 반환해서 1밑으로는 내려가지 않도록 고정한다.

2. 현재페이지가 2이상이라면 페이지에서 1을 빼서 한칸씩 이동시킬 수 있다.

3. 다음도 마찬가지지만 마지막 페이지보다 현재 페이지가 더 크거나 같다면 마지막 페이지를 넣어주고 그게 아니라면 페이지에 +1을 해준다.

 

 

728x90
댓글