본문 바로가기
PHP

PHP) 페이징 구현하기

by code_learner 2021. 8. 26.

 

<?php
$conn = mysqli_connect("localhost", "hpeeragetest", "gksksla1225!", "hpeeragetest_godohosting_com");
?>
<!doctype html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script src="color.html"></script>
<meta charset="UTF-8">
<title>게시판</title>
<link rel="stylesheet" type="text/css" href="css/paging.css">

</head>
<body>

	<input type="button" value="night"
		onclick="
			   nightDayHandler(this);">
			   
	<hr>
	<div id="board_area">
		<h1>자유게시판</h1>
		<h4>자유롭게 글을 쓸 수 있는 게시판입니다.</h4>
		<table class="list-table" border=1>
			<thead>
				<tr>
					<th width="70">번호</th>
					<th width="500">제목</th>

				</tr>
			</thead>
        <?php
        if (isset($_GET['page'])) {
            $page = $_GET['page'];
        } else {
            $page = 1;
        }
        $sql = "select * from aboard";
        $result = mysqli_query($conn, $sql);
        $row_num = mysqli_num_rows($result); // 게시판 총 레코드 수
        $list = 5; // 한 페이지에 보여줄 개수
        $block_ct = 5; // 블록당 보여줄 페이지 개수

        $block_num = ceil($page / $block_ct); // 현재 페이지 블록 구하기
        $block_start = (($block_num - 1) * $block_ct) + 1; // 블록의 시작번호
        $block_end = $block_start + $block_ct - 1; // 블록 마지막 번호

        $total_page = ceil($row_num / $list); // 페이징할 페이지 수 구하기
        if ($block_end > $total_page)
            $block_end = $total_page; // 만약 블록의 마지박 번호가 페이지수보다 많다면 마지박번호는 페이지 수
        $total_block = ceil($total_page / $block_ct); // 블럭 총 개수
        $start_num = ($page - 1) * $list; // 시작번호 (page-1)에서 $list를 곱한다.

        $sql2 = "SELECT * FROM aboard ORDER BY nid DESC LIMIT $start_num, $list";
        $result2 = mysqli_query($conn, $sql2);
        while ($board = $result2->fetch_array()) {
            $title = $board["ntitle"];
            if (strlen($title) > 30) // 글자가 30 이상이라면 ..으로 변환
            {
                $title = str_replace($board["ntitle"], mb_substr($board["ntitle"], 0, 30, "utf-8") . "...", $board["ntitle"]);
            }
            // $sql3 = mq("select * from reply where con_num='".$board['idx']."'");
            // $rep_count = mysqli_num_rows($sql3);
            // 답변수 출력
            ?>
      <tbody>
				<tr>
					<td width="70"><?php echo $board['nid']; ?></td>
					<td width="500"><a
						href='/page/board/read.php?nid=<?php echo $board["nid"]; ?>'><?php echo $title; ?><span>[<?php echo $rep_count; ?>]</span></a></td>


				</tr>
			</tbody>
      <?php } ?>
    </table>
		<!---페이징 넘버 --->
		<div id="page_num">
			<ul>
        <?php
        if ($page <= 1) { // 만약 page가 1보다 크거나 같다면
            echo "<li class='fo_re'>처음</li>"; // 처음이라는 글자에 빨간색 표시
        } else {
            echo "<li><a href='?page=1'>처음</a></li>"; // 알니라면 처음글자에 1번페이지로 갈 수있게 링크
        }
        if ($page <= 1) { // 만약 page가 1보다 크거나 같다면 빈값
        } else {
            $pre = $page - 1; // pre변수에 page-1을 해준다 만약 현재 페이지가 3인데 이전버튼을 누르면 2번페이지로 갈 수 있게 함
            echo "<li><a href='?page=$pre'>이전</a></li>"; // 이전글자에 pre변수를 링크한다. 이러면 이전버튼을 누를때마다 현재 페이지에서 -1하게 된다.
        }
        for ($i = $block_start; $i <= $block_end; $i ++) {
            // for문 반복문을 사용하여, 초기값을 블록의 시작번호를 조건으로 블록시작번호가 마지박블록보다 작거나 같을 때까지 $i를 반복시킨다
            if ($page == $i) { // 만약 page가 $i와 같다면
                echo "<li class='fo_re'>[$i]</li>"; // 현재 페이지에 해당하는 번호에 굵은 빨간색을 적용한다
            } else {
                echo "<li><a href='?page=$i'>[$i]</a></li>"; // 아니라면 $i
            }
        }
        if ($block_num >= $total_block) { // 만약 현재 블록이 블록 총개수보다 크거나 같다면 빈 값
        } else {
            $next = $page + 1; // next변수에 page + 1을 해준다.
            echo "<li><a href='?page=$next'>다음</a></li>"; // 다음글자에 next변수를 링크한다. 현재 4페이지에 있다면 +1하여 5페이지로 이동하게 된다.
        }
        if ($page >= $total_page) { // 만약 page가 페이지수보다 크거나 같다면
            echo "<li class='fo_re'>마지막</li>"; // 마지막 글자에 긁은 빨간색을 적용한다.
        } else {
            echo "<li><a href='?page=$total_page'>마지막</a></li>"; // 아니라면 마지막글자에 total_page를 링크한다.
        }
        ?>
      </ul>
		</div>
		<div id="write_btn">
			<a href="board.php"><button>글쓰기</button></a>
		</div>
	</div>
</body>
</html>

https://blog.naver.com/PostView.nhn?isHttpsRedirect=true&blogId=bgpoilkj&logNo=221265496444

 

[PHP] 게시판 블록 페이징 하기 #9

※ 2019/05/31 내용 수정 ※ 2019/06/06 코드 수정 ※ 2019/09/28 코드 수정 예제파일 http://developtest....

blog.naver.com

 

'PHP' 카테고리의 다른 글

PHP+그누보드)@Include_once 와 Include_once차이  (0) 2021.09.02
PHP)preg_match 함수  (0) 2021.08.29
PHP) 전역변수, 지역변수, 정적변수  (0) 2021.08.29
PHP) 윈도우 10 환경에서 아파치, PHP7 설치  (0) 2021.08.26
php) unset  (0) 2021.08.22

댓글