php

php 게시판 페이지 만들기

진블로그 2023. 4. 26. 14:12
다른 명언

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']."</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>";
        }
    }
?>

isset()

isset()은 PHP에서 제공하는 내장 함수 중 하나로, 변수가 설정되었는지 여부를 검사하는 함수입니다.
변수가 설정되었다는 것은 해당 변수가 값이 할당되어 있는 상태를 의미합니다. isset() 함수를 사용하면, 변수가 설정되어 있는지 여부를 확인할 수 있으므로, 변수를 사용하기 전에 유효성을 검사하는 등의 목적으로 사용됩니다.

 

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

isset() 함수는 변수가 존재하는지 확인하는 내장 함수입니다.
$_GET['page']은 GET 방식으로 전달된 파라미터 중 'page'라는 이름의 값입니다.
즉, $page 변수에 GET 방식으로 전달된 'page' 파라미터의 값이 존재하는 경우, $page 변수에 'page' 파라미터의 값을 정수형으로 할당합니다.

 

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

$viewNum 변수는 한 페이지에 보여줄 게시글의 수를 정하고, $page 변수는 현재 페이지를 의미합니다.
$viewLimit 변수는 LIMIT 구문에서 사용할 인덱스 범위를 계산하는데 사용됩니다.

 

$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);

JOIN 구문은 두 개 이상의 테이블에서 데이터를 가져오기 위해 사용되며, 이 코드에서는 board와 members 테이블을 조인하여 게시글 작성자의 이름을 가져옵니다.

ORDER BY 구문은 데이터를 정렬하는데 사용됩니다. 이 코드에서는 boardID 열을 기준으로 내림차순으로 정렬합니다.

LIMIT 구문은 가져올 레코드의 개수를 제한하는데 사용됩니다. 이 코드에서는 $viewLimit와 $viewNum 변수를 사용하여 페이지에 해당하는 게시글들만 가져오도록 합니다. $viewLimit은 해당 페이지에서 처음으로 보여줄 게시글의 인덱스이며, $viewNum은 한 페이지에서 보여줄 게시글의 개수입니다.

실제 실행되는 쿼리는 $sql 변수에 저장되며, $connect -> query($sql) 메서드를 사용하여 쿼리를 실행합니다. 실행 결과는 $result 변수에 저장됩니다.

 

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']."</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>";
    }
}

$count = $result -> num_rows;

$result->num_rows는 현재 결과 세트에 있는 행의 수를 반환하는 mysqli_result 메서드입니다. 이 경우, 위의 쿼리문으로 가져온 결과에 대해 num_rows 메서드를 호출하여 결과에 포함된 행의 수를 $count 변수에 저장합니다. 이렇게 함으로써 결과가 존재하는지 여부를 확인하고, 결과가 있는 경우에는 반복문을 사용하여 결과를 출력할 수 있습니다. 결과가 없는 경우에는 해당하는 메시지를 출력합니다.

 

첫 번째 라인에서는 $count 변수에 num_rows 함수를 이용하여 게시글 개수를 구합니다.
그 다음으로는 게시글이 존재하는 경우, for 반복문을 이용하여 $count 만큼의 행을 출력합니다.
$info 변수에 fetch_array 함수를 이용하여 DB에서 가져온 게시글 정보를 연관배열로 저장합니다.
그리고, <tr> 태그로 행을 생성하고, 게시글 정보를 출력하는데, 이때 게시글 제목은 링크로 출력합니다.
마지막으로 </tr> 태그로 행을 닫습니다.
만약 게시글이 존재하지 않는다면, else 문에서 "게시글이 없습니다."를 출력합니다.

 

<?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
    $pageView = 5;
    $startPage = $page - $pageView;
    $endPage = $page + $pageView;

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

    
    //처음으로/이전
    if($page != 1 && $boardTotalCount !=0 && $page <= $boardTotalCount){
        echo "<li><a href='board.php?page=1'>처음으로</a></li>";
        $prevPage = $page - 1;
        echo "<li><a href='board.php?page={$prevPage}'>이전</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){
        $nextPage = $page + 1;
        echo "<li><a href='board.php?page={$nextPage}'>다음</a></li>";
        echo "<li><a href='board.php?page={$boardTotalCount}'>마지막으로</a></li>";
    }
?>
    $sql = "SELECT count(boardID) FROM board";
    $result = $connect -> query($sql);

    $boardTotalCount = $result -> fetch_array(MYSQLI_ASSOC);
    $boardTotalCount = $boardTotalCount['count(boardID)'];

이 코드는 데이터베이스의 board 테이블에서 전체 게시물 수를 가져오는 쿼리를 실행합니다. 쿼리 실행 결과로 mysqli_result 객체가 반환되며, 이 객체는 mysqli_result::fetch_array() 메소드를 이용해 배열로 변환됩니다. $boardTotalCount['count(boardID)']는 게시물 총 개수를 나타내며, 이를 $boardTotalCount 변수에 저장합니다. 이후 페이지네이션 구현에 사용됩니다.

 //총 페이지 갯수
    $boardTotalCount = ceil($boardTotalCount/$viewNum);

    // 1 2 3 4 5 6 [7] 8 9 10 11 12 13
    $pageView = 5;
    $startPage = $page - $pageView;
    $endPage = $page + $pageView;

이 코드는 데이터베이스의 board 테이블에서 전체 게시물 수를 가져오는 쿼리를 실행합니다. 쿼리 실행 결과로 mysqli_result 객체가 반환되며, 이 객체는 mysqli_result::fetch_array() 메소드를 이용해 배열로 변환됩니다. $boardTotalCount['count(boardID)']는 게시물 총 개수를 나타내며, 이를 $boardTotalCount 변수에 저장합니다. 이후 페이지네이션 구현에 사용됩니다.

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

이 코드는 게시판 페이지에서 "처음으로"와 "이전" 링크를 생성하는 PHP 코드입니다.

첫 번째 줄에서는 $page가 1이 아니고, $boardTotalCount가 0이 아니며, $page가 $boardTotalCount보다 작거나 같을 때 링크를 생성합니다. 이 조건을 만족하지 않으면 "처음으로"와 "이전" 링크가 필요하지 않기 때문입니다.

두 번째 줄에서는 "처음으로" 링크를 생성합니다. board.php 페이지에서 page 매개 변수를 1로 설정한 링크를 생성합니다. 이렇게 하면 첫 페이지로 이동할 수 있습니다.

세 번째 줄에서는 $prevPage 변수를 사용하여 이전 페이지 번호를 계산합니다. $prevPage 변수는 $page에서 1을 빼면서 이전 페이지 번호를 계산합니다. 그리고 "이전" 링크를 생성합니다. board.php 페이지에서 page 매개 변수를 $prevPage로 설정한 링크를 생성합니다. 이렇게 하면 현재 페이지의 이전 페이지로 이동할 수 있습니다.

이 코드를 통해 사용자는 페이지 네비게이션 기능을 통해 쉽게 이전 페이지로 이동하거나 처음 페이지로 이동할 수 있습니다.

    //페이지
    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>";
    }

이 코드는 게시판 페이지에서 페이지 번호를 생성하는 PHP 코드입니다.

$startPage와 $endPage는 현재 페이지 주변에 보여질 페이지 번호의 범위를 나타냅니다. 예를 들어, 현재 페이지가 5이고, $startPage가 3이면, 3, 4, 5, 6, 7 페이지가 보여집니다.

for 루프는 $startPage에서부터 $endPage까지 반복하면서, 각 페이지 번호에 대한 링크를 생성합니다.

먼저, $active 변수를 빈 문자열로 초기화합니다. 그리고 $i와 $page가 같으면, $active 변수에 'active' 문자열을 할당합니다. 이렇게 하면 현재 페이지 번호에 대한 스타일을 추가할 수 있습니다.

마지막으로, <li> 태그를 생성합니다. 이 때, $active 변수의 값에 따라 클래스를 추가합니다. 그리고 board.php 페이지에서 page 매개 변수를 $i로 설정한 링크를 생성합니다. 이렇게 하면 해당 페이지로 이동할 수 있습니다.

이 코드를 통해 사용자는 현재 페이지를 비롯하여 다른 페이지로 쉽게 이동할 수 있습니다. 또한, 현재 페이지 번호에 대한 스타일링을 통해 현재 위치를 쉽게 파악할 수 있습니다.

    //마지막으로/다음
    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>";
    }

이 코드는 게시판 페이지에서 "다음"과 "마지막으로" 링크를 생성하는 PHP 코드입니다.

첫 번째 줄에서는 $page가 $boardTotalCount와 같지 않고, $page가 $boardTotalCount보다 작거나 같을 때 링크를 생성합니다. 이 조건을 만족하지 않으면 "다음"과 "마지막으로" 링크가 필요하지 않기 때문입니다.

두 번째 줄에서는 $nextPage 변수를 사용하여 다음 페이지 번호를 계산합니다. $nextPage 변수는 $page에 1을 더하면서 다음 페이지 번호를 계산합니다. 그리고 "다음" 링크를 생성합니다. board.php 페이지에서 page 매개 변수를 $nextPage로 설정한 링크를 생성합니다. 이렇게 하면 현재 페이지의 다음 페이지로 이동할 수 있습니다.

세 번째 줄에서는 "마지막으로" 링크를 생성합니다. board.php 페이지에서 page 매개 변수를 $boardTotalCount로 설정한 링크를 생성합니다. 이렇게 하면 마지막 페이지로 이동할 수 있습니다.

이 코드를 통해 사용자는 페이지 네비게이션 기능을 통해 쉽게 다음 페이지로 이동하거나 마지막 페이지로 이동할 수 있습니다.

728x90