PHP

PHP + MAMP사이트 만들기 기초- 03 게시판 페이징 기능

grovy 2023. 4. 26. 13:06
728x90

PHPPHP + MAMP사이트 만들기 기초- 03 게시판 페이징 기능

 

1. PHP + MAMP 설정- 01 회원가입, 로그아웃

2. PHP + MAMP  02 게시판 & 게시글보기 & 수정하기

 

php소스는 요기에 전부다 있어요 ! 

 

게시판 페이징 기능을 추가해요 ! 


<?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 

 

하단에는 페이징기능을 상황별로 체크해본 이미지에요 ! 

조건에 따라 나오는 이미지를 올려봤어요 !

만들면서 느낀점 

화면을 만들때 처음부터 한번에 만들기 보단..

최적의 구조를 먼저 생각한뒤 

기능을 하나씩 추가 해야겠어요