PHP 게시판 페이지네이션 구현

(PHP 페이징 구현에서 넘어옴)

1 개요[ | ]

PHP 게시판 페이징 구현
PHP 페이지네이션 구현
  • 대략 다음 카페 스타일의 페이징 방식을 구현해보았다.
  • $LIST_SIZE = 한 페이지에 출력될 게시물의 수
  • 현재 페이지 번호가 가운데에 위치한다.
$MORE_PAGE = 지정한 수만큼 페이지번호 링크를 양쪽으로 출력한다.
예를 들어 3이면 왼쪽으로 3개, 오른쪽으로 3개가 보인다.
  • 그 바깥쪽으로 1페이지와 마지막 페이지 링크가 있다.
  • 맨 바깥쪽에는 이전 페이지, 다음 페이지 링크가 있다.
  • (보안) 사용자로부터 받는 page 변수는 intval()로 처리하여 SQL인젝션을 방지하자.
<?php
include 'pdo.php';
$LIST_SIZE = 6;
$MORE_PAGE = 3;

$page = $_GET['page'] ? intval($_GET['page']) : 1;
$page_count = query_one("SELECT CEIL( COUNT(*)/$LIST_SIZE ) FROM board1");

$start_page = max($page - $MORE_PAGE, 1);
$end_page = min($page + $MORE_PAGE, $page_count);
$prev_page = max($start_page - $MORE_PAGE - 1, 1);
$next_page = min($end_page + $MORE_PAGE + 1, $page_count);

$offset = ( $page - 1 ) * $LIST_SIZE;
$rows = query_rows("SELECT * FROM board1 ORDER BY id DESC LIMIT $offset, $LIST_SIZE");
?>
<style>
a { text-decoration: none; }
.pagenum {
	display: inline-block; width: 25px;
	border: 1px solid transparent;
	color: gray; font-weight: bold;
	text-decoration: none; text-align: center;
}
.pagenum:hover { color: orange; border: 1px solid orange; }
.pagenum.current { color: orange; text-decoration: underline; }
.move_btn { color: gray; }
.disabled { color: silver; }
.paging_area { text-align: center; }
</style>

<table>
	<tr>
		<th>번호</th>
		<th>제목</th>
	</tr>
<?php foreach( $rows as $row ): ?>
	<tr>
		<td><?= $row['id'] ?></td>
		<td><?= $row['subject'] ?></td>
	</tr>
<?php endforeach ?>
</table>

<div class='paging_area'>
<?php if( $start_page > 1 ): ?>
	<a class='move_btn' href="<?= "$PHP_SELP?page=$prev_page" ?>">« 이전</a>
	<a class='pagenum' href="<?= "$PHP_SELP?page=1" ?>">1</a> ...
<?php else: ?>
	<span class='move_btn disabled'>« 이전</span>
<?php endif ?>

<?php for( $p = $start_page; $p <= $end_page; $p++ ): ?>
	<a class='pagenum <?= ( $p == $page )?"current":"" ?>' href="<?= "$PHP_SELP?page=$p" ?>">
		<?= $p ?>
	</a>
<?php endfor ?>

<?php if( $end_page < $page_count ): ?>
	... <a class='pagenum' href="<?= "$PHP_SELP?page=$page_count" ?>"><?= $page_count ?></a>
	<a class='move_btn' href="<?= "$PHP_SELP?page=$next_page" ?>">다음 »</a>
<?php else: ?>
	<span class='move_btn disabled'>다음 »</span>
<?php endif ?>
</div>

2 같이 보기[ | ]

3 참고[ | ]

문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}