<?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로 설정한 링크를 생성합니다. 이렇게 하면 마지막 페이지로 이동할 수 있습니다.
이 코드를 통해 사용자는 페이지 네비게이션 기능을 통해 쉽게 다음 페이지로 이동하거나 마지막 페이지로 이동할 수 있습니다.