💡 관리자 회원정보 페이지에 페이징 처리를 해보자!
⭐️ 완성샷
🔴 페이징 처리하기 - 1
/* paging : 한 페이지 당 데이터 개수 */
$list_num = 5;
/* paging : 한 블럭 당 페이지 수 */
$page_num = 3;
/* paging : 현재 페이지 */
$page = isset($_GET["page"])? $_GET["page"] : 1;
/* paging : 전체 페이지 수 = 전체 데이터 / 페이지당 데이터 개수, ceil : 올림값, floor : 내림값, round : 반올림 */
$total_page = ceil($num / $list_num);
// echo "전체 페이지 수 : ".$total_page;
/* paging : 전체 블럭 수 = 전체 페이지 수 / 블럭 당 페이지 수 */
$total_block = ceil($total_page / $page_num);
/* paging : 현재 블럭 번호 = 현재 페이지 번호 / 블럭 당 페이지 수 */
$now_block = ceil($page / $page_num);
/* paging : 블럭 당 시작 페이지 번호 = (해당 글의 블럭번호 - 1) * 블럭당 페이지 수 + 1 */
$s_pageNum = ($now_block - 1) * $page_num + 1;
// 데이터가 0개인 경우
if($s_pageNum <= 0){
$s_pageNum = 1;
};
/* paging : 블럭 당 마지막 페이지 번호 = 현재 블럭 번호 * 블럭 당 페이지 수 */
$e_pageNum = $now_block * $page_num;
// 마지막 번호가 전체 페이지 수를 넘지 않도록
if($e_pageNum > $total_page){
$e_pageNum = $total_page;
};
🟤 한 페이지 당 데이터 개수
나는 한페이지 당 보이는 개수를 5개로 하기로 했다.
🟤 한 블럭 당 페이지 수
나는 한 블럭 당 페이지 수는 3개로 정했다.
🟤 현재 페이지
현재 페이지를 get 방식으로 가져온다. 페이지가 없으면 1번 페이지로 간다.
🟤 전체 페이지수
- 전체 페이지 수 = 전체 데이터 / 페이지당 데이터 개수
- $total_page = ceil($num / $list_num);
- 올림 해줘야한다.
- 페이지는 데이터가 1개여도 무조건 1개가 있어야한다.
ex) 전체데이터(19개) / 페이지당 데이터 개수(5) = 3.8
5/5/5/4 이런식으로 페이지가 구성됨 -> 총 4개의 페이지가 필요
🟤 전체 블럭 수
- 전체 페이지 수 / 블럭 당 페이지 수
- $total_block = ceil($total_page / $page_num);
- 올림 해줘야한다.
- ex) 전체 페이지 수(4) / 한 블럭 당 페이지 수(3) = 1.3333...
1, 2, 3 || 4, 5, 6
나는 4번 페이지 밖에 없지만 그래도 전체 블럭 수는 2개가 필요하다.
🟤 현재 블럭 번호
- 현재 페이지 번호 / 블럭 당 페이지 수
- $now_block = ceil($page / $page_num);
- 올림 해줘야한다.
- ex) 현재 페이지 번호(1, 2, 3, 4 중 한개) / 블럭당 페이지 수(3) =
1 -> 0.3333 || 2 -> 0.6666 || 3 -> 1 || 4 -> 1.3333
1,2,3을 올림하면 1블록 / 4,5,6을 올림하면 2블록 -> 현재 몇 번째 블록에 위치한지 알 수 있다.
🟤 블럭 당 시작 페이지 번호
- (해당 글의 블럭번호 - 1) * 블럭당 페이지 수 + 1
- $s_pageNum = ($now_block - 1) * $page_num + 1;
- ex) 1,2,3 페이지 일 때 -> (현재블럭(1) - 1) 3 + 1 = 1
4,5,6 페이지 일 때 -> (현재블럭(2) - 1) 3 + 1 = 4 - 데이터가 0일 때 경우를 만들어줘야함. 그 때는 시작 페이지가 1이다.
🟤 블럭 당 마지막 페이지 번호
- 현재 블럭 번호 * 블럭 당 페이지 수
- $e_pageNum = $now_block * $page_num;
- 대신 마지막 번호는 전체 페이지 수를 넘기면 안된다.
- ex) 나는 총 19개 데이터를 가지고 있고, 총 4페이지가 나왔다.
하지만 블럭 당 마지막 페이지 번호를 계산해보면 6이라는 숫자가 나온다.
그럼 전체 페이지 수를 넘기게 된거라서 조건을 따로 만들어준다. - 만약 마지막 페이지 번호>전체페이지 라면, 마지막 페이지 번호는 전체 페이지 번호랑 같다!
🟠 Ceil, Floor, Round
Ceil : 올림값
Floor : 내림값
Round : 반올림
🟡 변수 출력하기
위에 만들어 놓은 변수들을 활용해서 페이지에 출력해보자!
/* paging : 시작 번호 = (현재 페이지 번호 - 1) * 페이지 당 보여질 데이터 수 */
$start = ($page - 1) * $list_num;
/* paging : 쿼리 작성 - limit 몇번부터, 몇개 */
$sql = "select * from members limit $start, $list_num;";
/* paging : 쿼리 전송 */
$result = mysqli_query($dbcon, $sql);
/* paging : 글번호 */
$cnt = $start + 1;
🟤 시작 번호
- (현재 페이지 번호 - 1) * 페이지 당 보여질 데이터 수
- $start = ($page - 1) * $list_num;
- 1페이지의 시작 번호는 0이다. -> index는 0부터 시작한다. 따라서 0이 1번이라고 생각하면된다.
🟤 쿼리 작성 -> 전송
- limit : 몇번부터, 몇개
- $sql = "select * from members limit $start, $list_num;";
- ex) 1번 페이지는 0번 부터 5개,
2번 페이지는 5번부터 5개,
3번 페이지는 10번부터 5개 ... - $result = mysqli_query($dbcon, $sql);
🟤 글번호
- $cnt = $start + 1;
- 글번호는 index가 0부터 시작하나 실제로는 1부터 시작함으로
출력될 때는 1부터 시작할 수 있게 $start에 +1를 해준다.
🟢 회원 정보 가져오기
while($array = mysqli_fetch_array($result)){
?>
<tr class="brd">
<!-- <td><?php echo $i; ?></td> -->
<td><?php echo $cnt; ?></td>
<td><?php echo $array["u_name"]; ?></td>
<td><?php echo $array["u_id"]; ?></td>
<td><?php echo $array["birth"]; ?></td>
<td><?php echo $array["postalCode"]." ".$array["add1"]." ".$array["add2"]; ?></td>
<td><?php echo $array["email"]; ?></td>
<td><?php echo $array["mobile"]; ?></td>
<td><?php echo $array["reg_date"]; ?></td>
<td><a href="edit.php?u_idx=<?php echo $array["idx"]; ?>">수정</a></td>
<td><a href="#" onclick="del_check(<?php echo $array["idx"]; ?>)">삭제</a></td>
</tr>
<?php
/* $i++; */
/* paging */
$cnt++;
};
?>
while 반복문을 사용해서 mysqli_fetch_array()를 이용해 필드명으로 값을 출력한다.
그리고 글번호를 1개씩 플러스 해준다.
🔵 Pager 만들기
이렇게 밑에 페이지를 표시해주는 부분을 만들 것이다.
위에 만들어 놓은 변수들을 이용해서 만드는 것이다.
<p class="pager">
<?php
/* paging : 이전 페이지 */
if($page <= 1){
?>
<a href="list.php?page=1">이전</a>
<?php } else{ ?>
<a href="list.php?page=<?php echo ($page-1); ?>">이전</a>
<?php };?>
<?php
/* pager : 페이지 번호 출력 */
for($print_page = $s_pageNum; $print_page <= $e_pageNum; $print_page++){
?>
<a href="list.php?page=<?php echo $print_page; ?>"><?php echo $print_page; ?></a>
<?php };?>
<?php
/* paging : 다음 페이지 */
if($page >= $total_page){
?>
<a href="list.php?page=<?php echo $total_page; ?>">다음</a>
<?php } else{ ?>
<a href="list.php?page=<?php echo ($page+1); ?>">다음</a>
<?php };?>
</p>
🟤 이전 페이지 만들기
- p태그 안에 작성해준다. (div도 상관 없음)
- 페이지는 음수가 없다.
- 만약 페이지가 1보다 작으면 페이지는 무조건 1 페이지이다. php인라인 코딩으로 바로 적어준다.
- 1페이지 보다 작은게 아니라면 그냥 페이지에서 -1을 해주면 된다.
🟤 다음 페이지 만들기
- 페이지가 토탈 페이지 이상이면 페이지는 그냥 전체 페이지 수이다.
- 왜냐하면 4페이지까지만 있는데 그 이상은 없다. 그 외에는 페이지 +1을 해주면 된다.
'Backend > PHP' 카테고리의 다른 글
[PHP] 관리자 페이지 만들기 - 2 (0) | 2023.12.13 |
---|---|
[PHP] 관리자 페이지 만들기 - 1 (0) | 2023.12.13 |
[PHP] 회원탈퇴 페이지 만들기 (0) | 2023.12.13 |
[PHP] 정보 수정 페이지 만들기 (0) | 2023.12.11 |
[PHP] 로그인 페이지 만들기 - 2 (index, logout) (0) | 2023.12.11 |