카테고리 없음
Fedora DB 게시글 페이징(Limit)
OnejinSim
2023. 12. 18. 19:45
데이터베이스와 연동하여 저장된 게시글들을 볼 수 있다.
그러나 사용자가 페이지에 접속했을 때 모든 게시글이 전부 출력된다면 난감할 것이다.
때문에 페이징 처리를 통해 일정갯수(10개)의 게시글만 불러오고 넘기는 기능이 필요하다.
최종 코드
vi /var/www/html/board.php
<h1>Hello world</h1>
<table border=1>
<tr>
<th>ID</th>
<th>UserID</th>
<th>Title</th>
<th>Content</th>
<th>Writer</th>
<th>Create Date</th>
<th>Reply ID</th>
</tr>
<?php
include "dbconn.php";
session_start();
echo "<p>Current User ID: " . $_SESSION["uname"] . "</p>";
$s = $_GET['page'];
if($s == ""){ $s = 0; }
//$ss = "select * from tbBlog ORDER BY id DESC limit $s*2,2";
//echo $ss;
$result = mysqli_query($conn, "select * from tbBlog ORDER BY id DESC limit " . ($s*2) . ",2");
$data = $result -> fetch_all(MYSQLI_ASSOC);
$Count = mysqli_query($conn, "select COUNT(*) AS Count FROM tbBlog");
$Cnt = mysqli_fetch_assoc($Count);
//echo "<p>" . $Cnt['Count'] . "</p>";
foreach($data as $row):
?>
<tr>
<td><?= $row['id'] ?></td>
<td><?= $row['tbUserID'] ?></td>
<td><a href="detail.php?index=<?php echo $row['id']; ?>"><?= $row['title'] ?></a></td>
<td><?= $row['content'] ?></td>
<td><?= $row['writer'] ?></td>
<td><?= $row['create_date'] ?></td>
<td><?= $row['replyID'] ?></td>
</tr>
<?php endforeach ?>
</table>
<a href="./write.html">Write New Blog!</a>
<table>
<tr>
<?php
for($i=0; $i < $Cnt['Count']/2; $i++){
echo "<td><a href='board.php?page=$i'>" . $i . "</a></td>";
}//for
?>
</tr>
</table>
이는 쿼리문에서 Limit를 사용하면 되는데
$result = mysqli_query($conn, "select * from tbBlog"); 에서
$result = mysqli_query($conn, "select * from tbBlog ORDER BY id DESC LIMIT 2");
와 같이 추가해주면 게시글이 2개씩 보여진다.
LIMIT 4,2
라고 하면 4번째 인덱스로부터 2개가 출력된다.
페이징을 하기 위해서는 총 게시글의 갯수를 알아야한다.
갯수를 구하는 쿼리문은 select COUNT(*) AS Count FROM tbBlog; 와 같다.
이를 php에 적용하면
$Count = mysqli_query($conn, "select COUNT(*) AS Count FROM tb Blog");
$Cnt = mysqli_fetch_assoc($Count); //array값 반환
echo "<p>" . $Cnt['Count'] . "</p>";
$Cnt['Count']를 통해 값을 쓸 수 있다.
이제 페이지의 하단에 페이징 숫자들을 나열해보자.
좌우로 나열하기위해 테이블을 사용하였다.
<table>
<tr>
<?php
for($i=0; $i < $Cnt['Count']/2; $i++){
echo "<td><a href='board.php?page=$i'>" . $i . "</a></td>";
}//for
?>
</tr>
</table>
게시글을 2개씩 보여줄 것이기 때문데 전체갯수에서 2를 나누어 주었다. 10개씩 보여준다면 10을 나누고 쿼리의 limit 또한 양식에 맞게 10을 넣어주면 된다.
숫자를 누르면 get방식으로 값을 넘겨주는데 이를 받아주자.
$s = $_GET['page'];
if($s == ""){ $s = 0; }
페이징 숫자를 눌러 값을 넘겨주어 받는 부분이다. 페이징 숫자를 누르기 전이라면 기본값으로 0을 준다.
$result = mysqli_query($conn, "select * from tbBlog ORDER BY id DESC limit " . ($s*2) . ",2");
이렇게 해주면 ($s*2)번째로 부터 2개씩의 게시글을 출력해 줄 수 있다.