Animated Turtle

Query

PHP, 게시판 이용하기(2)

훙구 2023. 4. 26. 13:07

...

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
반응형