728x90
PHPPHP + MAMP사이트 만들기 기초- 03 게시판 페이징 기능
1. PHP + MAMP 설정- 01 회원가입, 로그아웃
2. PHP + MAMP 02 게시판 & 게시글보기 & 수정하기
게시판 페이징 기능을 추가해요 !
<?php
//get방식으로 받은 page 변수가 있다면 값을 넣어주고 없으면 초기값 1로 설정
//isset()함수로 null 체크를 abs로 절대값설정을 했어요 !
if (isset($_GET['page'])){
$page = abs((int)$_GET['page']);
// abs([숫자])
}else{
$page =1;
};
//화면에 뿌려줄 게시물 갯수
$viewNum =10;
//화면에 뿌려줄 게시물의 시작점을 sql에 넣기위해 변수 선언
$viewLimit = ($viewNum *$page)-$viewNum;
//게시글 총 갯수 구하기
$sql = "select count(boardId) from board";
$result = $connect -> query($sql);
//count함수를 sql로 실행시켜 글번호 (pk값)의 갯수를 출력
$boardTotalCount = $result ->fetch_array(MYSQLI_ASSOC);
$boardTotalCount = $boardTotalCount['count(boardId)'];
//총 페이지 갯수 = $boardTotalCount
//ceil()을 쓴이유는 올림처리해야 마지막글까지 나옴
$boardTotalCount = ceil($boardTotalCount/$viewNum);
//앞뒤로 최대 5개씩 설정
$pageView = 5;
//지금 보는 페이지에서 -5까지 나오게 만든다
//ex) 1 2 3 4 5 지금보는page 7 8 9 10 11
$startPage = $page - $pageView;
$endPage = $page + $pageView;
//이전 페이지
//page가 1일경우 나올 필요가 없으므로 !=1 조건을 넣고
//$boardTotalCount >1 게시물갯수가 1이상일경우에만
//if문을 실행
if($page != 1 && $boardTotalCount > 1){
$prevPage = $page-1;
echo "<li><a href='board.php?page=1'>처음으로</a></li>";
echo "<li><a href='board.php?page={$prevPage}'>이전</a></li>";
}
//페이지 기능
for($i=$startPage ;$i <= $endPage ; $i++){
//active class 설정
$active = "";
if($i == $page){
$active = "active";
}
//페이지 버튼에 출력될 값이 음수일경우에
//페이지 버튼이 총페이지갯수보다 클경우엔
//출력이 안되게 설정 !
if($i > 0 && $i <=$boardTotalCount ){
echo "<li class ='{$active}'><a href = 'board.php?page={$i}'>{$i}</a></li>";
}
}
// 페이지 값이 총 페이지 갯수보다 작을때만 다음 & 마지막으로 이동출력하기
if($page < $boardTotalCount){
$nextPage = $page+1;
echo "<li><a href='board.php?page={$nextPage}'>다음</a></li>";
echo "<li><a href='board.php?page={$boardTotalCount}'>마지막으로</a></li>";
}
?>
주석으로 설명달아놓았어요 !
페이징 기능을 만든 순서를 적어 볼게요
1. page값을 get 방식으로 받아오기 & 받아오는 값이 없을경우 초기값 설정하기
2. 하단에 1 2 3 4 5 6 7 8 9 이런식으로 page를 넘어갈수 있도록 for문을 이용하여 뿌려줬어요 !
3. 처음으로 & 이전페이지 & 다음페이지 & 마지막페이지로 이동버튼 만들어 주기
4. 게시글이 없을때 & page = 1 일 때 하단 페이징 구현한 페이지 버튼의 값이 음수 (-4 -3 -2 -1 )표시 x
하단에는 페이징기능을 상황별로 체크해본 이미지에요 !
만들면서 느낀점
화면을 만들때 처음부터 한번에 만들기 보단..
최적의 구조를 먼저 생각한뒤
기능을 하나씩 추가 해야겠어요