카테고리 없음

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개씩의 게시글을 출력해 줄 수 있다.