본문 바로가기

카테고리 없음

PHP)게시판 페이징 - 1

이번에는 게시판에 페이징 기능을 넣어보겠다.

페이징 기능을 추가하려면 몇가지 변수와 로직을 추가해야한다.

지금까지 다룬 것은 페이지네이션 바를 구성하고 번호에 해당하는 페이지를 보여준다.

각 페이지는 5개의 포스트로 구성되어 있다.

page1
page3

마지막 페이지를 확인해보면 5개의 포스트를 채우지 못하여 2개의 포스트만 출력하는걸 알 수 있다.

전과 후로 한칸 씩 이동하는것은 다음 포스트에서 다룬다.

해당 코드를 살펴보자.

$count_sql = "SELECT COUNT(*) FROM posts";

우선 DB내부에 칼럼 수를 확인해주어야한다. 칼럼 수를 이용해서 페이징을 할 것이므로 쿼리를 만들어준다.

$row_c = $connect_statment->fetch(PDO::FETCH_ASSOC);
$count = $row_c['COUNT(*)'];

COUNT를 사용하여 값은 변수에 담으면 Array의 형태로 저장된다. Array내부를 확인해보면 칼럼의 수가 COUNT(*)으로

저장되어있다. 이를 불러와 따로 변수에 담아주어야한다.

$page = isset($_GET["page"])? $_GET["page"] : 1;

페이징을 위해서 변수를 선언해줘야한다. 해당 구문이 없으면 페이지네이션이 나중에 나오기때문에

page라는 GET응답이 없으므로 오류가 생긴다. 이를 방지하기 위해 $_GET["page"]가 없을 경우 page에 값을 부여해준다.

$start = 0;
$page_num = 5;

$pagination = ceil($count / $page_num);

mysql의 limit을 사용하여 한 페이지마다 표시할 페이지의 수를 정해야한다.

pagenation 변수는 위에서 구한 칼럼(포스트)의 수와 한 페이의 수를 나눠서 반올림해준다.

만약 11개의 포스트가 존재한다면 5로 나누어 소수점은 반올림하여 3개의 페이지를 만들어준다.

2개의 페이지는 5개의 포스트를 출력하고 마지막 페이지는 남은 1개의 포스트를 출력한다.

 

$start = ($page - 1) * $page_num;
$sql = "SELECT * FROM posts limit $start , $page_num";

start 변수는 페이지마다 5씩 늘어나야한다. 따라서 현 페이지에 값에서 1을 빼주고(page의 기본값은 1이므로) 최대 포스트 수를 곱해준다. 첫 페이지의 경우 0~4까지 표시한다. 페이지마다 값이 5씩 증가한다. sql 쿼리에서 limit을 이용하여

페이지마다 몇개의 포스트를 표시할것인지 정해준다.이를 완료하면 기본적인 구성이 완료된다.

다음으로 페이지네이션을 구성해줘야한다.

<nav aria-label="Page navigation example">
      <ul class="pagination">
        <li class="page-item">
          <a class="page-link" href="#" aria-label="Previous">
            <span aria-hidden="true">&laquo;</span>
          </a>
        </li>
        <?php for($page = 1; $page <= $pagination; $page++) : ?>
        <li class="page-item"><a class="page-link" href="<?= 'test.php?page='.$page ?>"><?=$page?></a></li>
        <?php endfor ?>
        <li class="page-item">
          <a class="page-link" href="#" aria-label="Next">
            <span aria-hidden="true">&raquo;</span>
          </a>
        </li>
      </ul>
    </nav>

bootstrap을 이용해 구성해준다. php에서 for문은 endfor를 이용해 중간에 다른 php 구문을 삽입할 수 있다.

이를 이용하여 페이지네이션을 구성해준다. 현제 test페이지에서 구성중이므로 test.php?page로 이동시켜야한다.

해당 구문을 완성하면 기초적인 페이징이 완료된다.