...
728x90
반응형
PHP를 이용하여 게시판과 필요한 기능들 만들기(2)
게시판 페이지 설정

PHP 작성하기
<?php
if(isset($_GET['page'])){
$page = (int)$_GET['page'];
} else {
$page = 1;
}
$viewNum = 20;
$viewLimit = ($viewNum * $page) - $viewNum;
// 1~20 DESC LIMIT 0, 20 --> page1 (viewNum * 1) - viewNum
// 21~40 DESC LIMIT 21, 40 --> page2 (viewNum * 2) - viewNum
// 41~60 DESC LIMIT 41, 60 --> page3 (viewNum * 3) - viewNum
// 61~80 DESC LIMIT 61, 80 --> page4 (viewNum * 4) - viewNum
$sql = "SELECT b.boardID, b.boardTitle, m.youName, b.regTime, b.boardView FROM board b JOIN members m ON(b.memberID = m.memberID) ORDER BY boardID DESC LIMIT {$viewLimit}, {$viewNum}";
$result = $connect -> query($sql);
if($result){
$count = $result -> num_rows;
if($count > 0){
for($i=0; $i<$count; $i++){
$info = $result -> fetch_array(MYSQLI_ASSOC);
echo "<tr>";
echo "<td>".$info['boardID']."</td>";
echo "<td><a href='boardView.php?boardID={$info['boardID']}'>".$info['boardTitle']."</a></td>";
echo "<td>".$info['youName']."</td>";
echo "<td>".date('Y. m. d', $info['regTime'])."</td>";
echo "<td>".$info['boardView']."</td>";
echo "</tr>";
}
} else {
echo "<tr><td colspan='4'> 선택된 게시글이 없습니다. </td></tr>";
}
}
?>
</tbody>
</table>
</div>
<div class="board__pages">
<ul>
<?php
// 게시글의 총 개수 + 나오는 페이지 수 -> 둘 다 알아야함
$sql = "SELECT count(boardID) FROM board";
$result = $connect -> query($sql);
$boardTotalCount = $result -> fetch_array(MYSQLI_ASSOC);
$boardTotalCount = $boardTotalCount['count(boardID)'];
//총 페이지 개수
$boardTotalCount = ceil($boardTotalCount/$viewNum);
// 1 2 3 4 5 6 [7] 8 9 10 11 12 13 앞뒤로 5개 번호의 페이지만 보이게
$pageView = 4;
$startPage = $page - $pageView;
$endPage = $page + $pageView;
// 처음 페이지 초기화
if($startPage < 1) $startPage = 1;
// 마지막 페이지 초기화
if($endPage >= $boardTotalCount) $endPage = $boardTotalCount;
// 처음으로, 이전페이지
if($page != 1 && $page <= $boardTotalCount){
$prev = $page - 1;
echo "<li><a href='board.php?page=1'>처음으로</a></li>";
echo "<li><a href='board.php?page={$prev}'>이전</a></li>";
}
// 페이지
for($i=$startPage; $i<=$endPage; $i++){
$active = "";
if($i == $page) $active = "active";
echo "<li class='{$active}'><a href='board.php?page={$i}'>{$i}</a></li>";
}
// 다음페이지, 마지막페이지
if($page != $boardTotalCount && $page <= $boardTotalCount){
$next = $page + 1;
echo "<li><a href='board.php?page={$next}'>다음</a></li>";
echo "<li><a href='board.php?page={$boardTotalCount}'>마지막으로</a></li>";
}
?>
PHP 정리해보기
- 게시판 목록
- 우선 GET 방식으로 page의 정보를 받아와 $page에 저장합니다. 만약 page 정보가 없다면 $page에는 1을 저장하여 기본 페이지는 1번으로 만들어줍니다.
- 쿼리문의 LIMIT에 사용할 $viewNum을 만들어 설정합니다. 데이터를 20개씩 보여주기 위해 20을 저장합니다.
- $viewLimit 에는 데이터의 시작시점에 사용할 번호를 구하는 식을 저장합니다.
- $sql에 필요한 데이터를 불러오는 쿼리문을 저장하여 전송하고 전송값을 $result에 저장합니다.
- $result에 데이터가 있다면 $count에 $result 에 들어있는 데이터의 개수를 저장합니다.
- 데이터가 있다면 for문을 사용해 $count만큼 반복하여 테이블에 데이터를 출력합니다. (게시판)
- 각 버튼의 변수 설정 & 초기값 설정
- board테이블에서 boardID의 개수를 불러오는 쿼리문을 $sql에 저장합니다.
- $sql을 전송하고 전송한 값을 $result에 저장합니다.
- $boardTotalCount에 $result의 데이터를 배열형식으로 저장하고, 다시 그 개수를 저장하여 ceil(올림)합니다.
- $pageView에 현재 페이지에서 전후로 몇 페이지의 목록이 보이게 할 지 저장합니다.
- $startPage에는 $page - $pageView 를, $endPage에는 $page + $pageView를 저장합니다.
- 처음과 마지막 페이지에서 전, 후에 더 이상 페이지 목록이 나타나지 않게 초기값을 설정합니다.
- 처음으로 버튼과 이전페이지 버튼
- $page가 가장 첫 페이지가 아닐 때 (1번이 아닐 때) && $page가 $boardTotalCount 보다 작거나 같을 때
- $prev에는 $page - 1 을 저장하고
- 처음페이지 버튼과 이전페이지 버튼에 주소를 적어 출력합니다.
- 마지막으로 버튼과 다음페이지 버튼
- $page가 $boardTotalCount 보다 작을 때
- $next에 $page + 1을 저장하고
- 다음페이지 버튼과 마지막페이지 버튼에 주소를 적어 출력합니다.
728x90
반응형