PHP
회원정보 페이지에 paging 만들기
이전에 만들어둔 list.php 파일에 회원정보 테이블을 paging 시킨다.
1. 필요한 데이터들 변수에 담기
- 전체 데이터 개수 구해서 변수에 담기
< ?php $num = mysqli_num_rows($result); ? >
- 한 페이지당 글의 개수 설정하고 변수에 담기
< ?php $list_num = 5; ? >
- 한 블럭 당 페이지 개수 설정하고 변수에 담기
< ?php $page_num = 3; ? >
- 현재 페이지가 몇 번째 페이지인지 구하기(조건연산자)
< ?php $page = isset($_GET["page"])? $_GET["page"] : 1; //받아오는 page는 url에 표시되는 숫자로 page가 1과 양의 정수가 아니면 표시되지 않도록 설정 ? >
- 전체 페이지 수 구하는 수식
전체 페이지 수 = 전체 데이터 수 / 페이지 당 데이터 개수
여기에서 숫자 관련 함수 사용
· ceil : 올림값. 소수점이 나오면 무조건 올림!
· floor : 내림값. 소수점이 나오면 무조건 내림!
· round : 반올림. 0.4까지 내리고 0.5부터 올린다.
< ?php //1.4처럼 나머지가 나와도 2페이지에 표시해야 하기 때문에 올림 $total_page = ceil($num / $list_num); ? >
2. 블럭 설정하기
블럭은 < 1 2 3 > < 4 5 6 > 처럼 페이지를 넘기는 숫자 집합을 말한다.
- 총 블럭의 개수 구하는 수식
총 블럭 수 = 전체 페이지 수 / 블럭 당 페이지 수
< ?php $total_block = ceil($total_page / $page_num); ? >
- 현재 블럭 번호 구하는 수식
현재 블럭 번호 = 현재 페이지 번호 / 블록 당 페이지 수
< ?php $total_block = ceil($total_page / $page_num); ? >
- 블럭 당 시작페이지 번호 수식
블럭 당 시작 페이지 번호 = (해당 글의 블럭 번호 - 1) * 블럭 당 페이지 수 + 1
여기에 0보다 작으면 무조건 0을 표시하도록 조건문을 추가한다.
< ?php $s_pageNum = ($now_block - 1) * $page_num + 1; if ($s_pageNum <= 0){ $s_pageNum = 1; }; ? >
- 블럭 당 마지막 번호 구하는 수식
블럭 당 마지막 페이지 번호 = 현재 블럭 번호 * 블럭 당 페이지 수
여기에 마지막 번호가 전체 페이지 수를 넘지 않도록 조건문을 추가한다.
< ?php $e_pageNum = $now_block * $page_num; if($e_pageNum > $total_page){ $e_pageNum = $total_page; }; ? >
paging 할 수 있도록 출력 쿼리 설정
이전에 만들어둔 list.php 파일에 회원정보 테이블을 paging 시킨다.
paging은 while문 바로 위에서 시작한다.
한 개의 페이지에 5개의 데이터를 뿌리면
1페이지에는 1부터 5번까지의 데이터
2페이지에는 6번부터 10번까지의 데이터가 나타나야 한다.
- 시작 글(회원) 번호 구하는 수식
시작 글(회원) 번호 = (현재 페이지 번호 - 1) * 페이지 당 보여질 데이터 수
데이터의 순서는 0부터이기 때문에 1을 빼준다.
< ?php $start = ($page - 1) * $list_num; ? >
- 뿌려줄 데이터의 조건 설정해서 가져오기
< ?php $sql = "select * from members limit $start, $list_num;"; //limit로 시작 글 번호 부터 한 페이지 당 글 개수(위에서 $list_num에 담아둠)만큼 출력되도록 함 //기존의 select문을 가져와서 변형시킨다. //이 $sql로 테이블에 데이터도 뿌린다. $result = mysqli_query($dbcon, $sql); //데이터베이스에 쿼리 보내서 가져오기 ? >
- 시작하는 글(회원) 번호 뿌려주기
데이터의 순서는 0부터이기 때문에 빼준 1을 다시 더해 테이블에 뿌린다.
< ?php $cnt = $start + 1; ? >
- 테이블의 $array[“idx”]를 시작하는 회원 번호로 수정
기존에 array로 받아온 값 array[“idx”]를 위에서 설정한 $cnt로 수정한다.
< ?php // < td>< ?php echo array["idx"]; ? >< /td> 이것을 아래와 같이 수정 < td>< ?php echo $cnt; ? >< /td> ? >
- $cnt 반복문 안에서 1씩 증가
$cnt은 글(회원) 시작 번호이기 때문에 반복문에서 하나씩 증가해서 값을 가져와야 한다.
따라서 $cnt의 값은 1씩 증가해야한다.
< ?php //테이블 상단 코드 while ($array = mysqli_fetch_array($result)){ ? > < tr> < td>< ?php echo $cnt; ?></ td> < td>< ?php echo $array["u_name"]; ?>< /td> < td>< ?php echo $array["u_id"]; ?>< /td> < td>< ?php echo $array["mobile"]; ?>< /td> < td>< ?php echo $array["email"]; ?>< /td> < td>< ?php echo $array["birth"]; ?>< /td> < td> < ?php echo $array["postalcode"]; ?> < ?php echo $array["addr1"]; ? > < ?php echo $array["addr2"]; ?> < /td> < td>< ?php echo $array["reg_date"]; ?></td> < td>< a href="edit.php?g_idx=< ? php echo $array["idx"]; ? >">수정< /a>< /td> < td>< a href="#" onclick='del_mem(< ? php echo $array["idx"]; ? >)'>삭제< /a>< /td> < /tr> < ?php $cnt = $cnt + 1; }; ? >
페이저 pager 만들기
이제 url을 가지고 페이지를 이동시킬 수 있다.
아래 pager 블럭을 만들어 페이지를 넘길 수 있도록 UI를 만든다.
1. HTML 코드 만들기
클릭해 넘어갈 수 있도록 a로 링크를 만든다.
< p> < a href="#">이전< /a> < a href="#">다음< /a> < /p>
이전과 다음에 url 연결하기
a href에 url을 넣을 때 page번호로 이동하기 때문에 GET 방식으로 이동할 수 있도록 링크를 넣는다.
< p> < a href="list.php?page=< ?php echo ($page-1); ? >">이전< /a> < a href="list.php?page=< ?php echo ($page+1); ?>">다음< /a> < /p>
다만 이 때 페이지 번호가 1이었을 떄 이전을 눌러 1 미만의 수가 되거나
최종 페이지에서 다음을 눌러 최종 페이지 수 보다 크게 가면 해당 페이지가 없기 때문에
조건문을 통해 1보다 작거나 최종 페이지 수 보다 클 때는 페이지를 이동하지 못하도록 한다.
< p> < ?php if($page <= 1){ //페이지 수가 1보다 작을 때 ? > < a href="list.php?page=1">이전< /a> < ?php }else{ ? > < a href="list.php?page=< ?php echo ($page-1); ? >">이전< /a> < ?php }; ?> < ?php if($page >= $total_page){ ? > < a href="list.php?page=">다음< /a> < ?php } else{ ? > < a href="list.php?page=< ?php echo ($page+1); ? >">다음< /a> < ?php }; ? > < /p>
2. 숫자 블럭 만들기
- 이전과 다음 사이에 숫자 블럭 삽입하기
이전과 다음 사이에 클릭 할 수 있도록 숫자 블럭을 삽입한다.
< 1 2 3 >
< 4 5 6 >
과 같은 블럭을 넣기 위해서는 반복문으로 숫자와 링크를 같이 뿌려줘야 한다.
이 때 위에서 만든 시작 페이지 변수와 마지막 페이지 변수를 사용한다. ($s_pageNum, $e_pageNum)
< p> < ?php if($page <= 1){ //페이지 수가 1보다 작을 때 ?> < a href="list.php?page=1">이전< /a> < a href="list.php?page=< ?php echo ($page-1); ? >">이전< /a> < ?php }; ?> < ?php //시작 페이지부터 마지막 페이지까지 //시작 페이지부터 ; 마지막 페이지까지 ; 1개씩 증가한다. 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 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>