PHP

PHP-게시판 기능 구현

Hyeon been 2023. 4. 26. 14:12

한번씩 읽고 가세요.

“ 지연되는 프로젝트에 인력을 더 투입하면 오히려 더 늦어진다. ”

- Frederick Philips Brooks
Mythical Man-Month 저자
728x90

게시판  기능 구현

게시판 목록 구현하기

<?php
    if(isset($_GET['page'])){
        $page = (int) $_GET['page'];

    } else {
        $page = 1;
    }


    $viewNum = 10;

    $viewLimit = ($viewNum * $page) - $viewNum;

    //1~20  DESC LIMIT 0, 20      ---> page1 (viewNum * 1) - viewNum
    //21~40  DESC LIMIT 20, 20    ---> page2 (viewNum * 2) - viewNum
    //41~60  DESC LIMIT 40, 20    ---> page3 (viewNum * 3) - viewNum
    //61~80  DESC LIMIT 60, 20    ---> 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>";
            };
        }
    }
?>

첫번째론 page를 정의 해줍니다. 

    if(isset($_GET['page'])){
        $page = (int) $_GET['page'];

    } else {
        $page = 1;
    }

두번째는 viewNum을 정해주고 

viewLimit를 viewNum* page  -viewNum으로 정의 해줍니다.

그 후  sql문을 써서 값을들 불러온 후 그 후 DESC LIMIT 를 {$viewLimit},{$viewNum}"로 정해줍니다.

   $viewNum = 10;

    $viewLimit = ($viewNum * $page) - $viewNum;

    //1~20  DESC LIMIT 0, 20      ---> page1 (viewNum * 1) - viewNum
    //21~40  DESC LIMIT 20, 20    ---> page2 (viewNum * 2) - viewNum
    //41~60  DESC LIMIT 40, 20    ---> page3 (viewNum * 3) - viewNum
    //61~80  DESC LIMIT 60, 20    ---> 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);

다음으론 sql문으로 boardID를 선택해가져와 줍니다.

    $sql = "SELECT count(boardID) FROM board";
    $result = $connect -> query($sql);

    $boardTotalCount = $result -> fetch_array(MYSQLI_ASSOC);
    $boardTotalCount = $boardTotalCount['count(boardID)'];
        //총 페이지 갯 수
    $boardTotalCount = ceil($boardTotalCount/$viewNum);

그리고 boardTotalCount 를 count(boardID) 아이디값 갯 수로  정의 해줍니다.

그 후 또 다시  boardTotalCount 를 재정의 해줍니다. ceil(boardTotalCount/viewNum)보더 토탈 값을 뷰 넘버 값으로 나눈 뒤 올림을 해주어 총 페이지 값으로 바꿔줍니다.

    $pageView = 5;
    $startPage =  $page - $pageView;
    $endPage = $page + $pageView;

    //처음 페이지 초기화//마지막 페이지 초기화
    if($startPage < 1) $startPage = 1;
    if($endPage >= $boardTotalCount) $endPage = $boardTotalCount;


    //처음으로 이전
    if($page != 1 && $page <= $boardTotalCount  ){
        $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 = "";
        if($i == $page) $active = "active";
        
        if($page <= $boardTotalCount ){
            echo "<li class='{$active}'><a href='board.php?page={$i}'>{$i}</a></li>";
        }
        

    }
     //마지막으로 다음
    if($page != $boardTotalCount && $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>";
    

    }
    
?>

미션

pageView를 5개로 정해주고 

startpage를 page - pageView

endpage를 page + pageView

정의하여 앞에 5개 뒤에 5개가 나오게 해줍니다.

    //처음 페이지 초기화//마지막 페이지 초기화
    if($startPage < 1) $startPage = 1;
    if($endPage >= $boardTotalCount) $endPage = $boardTotalCount;

처음페이지와 마지막 페이지를 초기화 해줍니다.

만약 시작페이지가 1보다 작을때 시작 페이지를 1로 해주고

만약 끝 페이지가 페이지 총갯수보다 클 때  끝페이지는 페이지 총 갯수로 정해줍니다.

 

    //처음으로 이전
    if($page != 1 && $page <= $boardTotalCount  ){
        $prevPage = $page-1;
        echo "<li><a href='board.php?page=1'>처음으로</a></li>";
        echo "<li><a href='board.php?page={$prevPage}'>이전</a></li>";
    }

마지막으로 버튼을 만들어줍니다.

처음으로 가는 버튼과 이전으로 가는 버튼을 만들어주기 위해 조건을 부여합니다.

만약 페이지가 1이 아니고 페이지가 페이지 총 갯수 보다 작을때만 

echo를 출력해줍니다.

    //페이지
    for($i=$startPage; $i<=$endPage; $i++){
        $active = "";
        if($i == $page) $active = "active";
        
        if($page <= $boardTotalCount ){
            echo "<li class='{$active}'><a href='board.php?page={$i}'>{$i}</a></li>";
        }
        

    }
     //마지막으로 다음
    if($page != $boardTotalCount && $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>";
    }

페이지와 마지막,다음 버튼까지 

만들어주면  밑에 버튼이 생깁니다.