이전, 다음으로 가는 버튼 생성
// 페이지의 레코드 갯수 list_num
$list_num = 5;
// 한 블럭당 페이지 수
$page_num =3;
// 현재페이지
$page = isset($_GET['page']) ? $_GET['page'] : 1;
//전체 페이지수 = 전체 레코드수 / 페이지당 레코드 개수
// 20 / 5 => 4page가 됨 ceil -> Math.cell과 동일 (올림)
$total_page = ceil($total / $list_num);
// 전체 블럭수 = 전체 페이지 수 / 블럭당 페이지 수
$total_block = ceil($total_page / $page_num);
// 현재 블럭 번호 = 현재 페이지 번호 / 블럭당 페이지 수
// 1 / 3 =0.3 => 1이됨 7 / 3 = 2.. => 3이됨 1을뺴서 2인상태로 +3을해서 6이되고 +1을하면 7이됨.
$now_block = ceil($page / $page_num);
// 블럭 당 시작 페이지 번호 = (해당글의 블럭번호 - 1) * 블럭당 페이지수 + 1
$s_pageNum = ($now_block - 1) * $page_num + 1;
if($s_pageNum <=0){
$s_pageNum = 1;
}
// 블럭 당 마지막 페이지 번호
$e_pageNum = $now_block * $page_num;
// 마지막 페이지 번호가 전체 페이지수를 넘지 않도록 설정
if($e_pageNum > $total_page){
$e_pageNum = $total_page;
}
//시작번호 0,5,10,15 가 나오도록 지정
$start = ($page-1) * $list_num;
//쿼리작성
$sql = "select * from books limit $start, $list_num";
// start가 1인경우 0,5 2인경우 5,5 3인경우 10,5 // start는 받아온page -1 * 5 기에...
$result2 = mysqli_query($conn, $sql);
1. 한페이지당 보일 레코드의 개수입력 - 5
2. 페이지를 몇까지 보일지 블럭의 개수를 입력 - 3
3. 현재 페이지를 확인. 기본은 1로 만들어야 하기에 삼항연산자로 받아올 page값이 없다면 1을 넣어줌.
4. 전체 페이지의 수는 전체 레코드의 수 / 페이지당 레코드의 수
20줄의 책 내용이 있을시 5로나누면 4가 된다. ceil함수는 Math.cell과 동일 ( 올림 )
totalpage 로 맨 마지막 page를 확인할 수 있다.
5. 전체 블럭수는 페이지 수 / 블럭당 페이지 수
전에페이지가 10페이지라면 한블럭당 페이지를 3개씩 사용할거기에 블럭은 totalblock는 4가 되서 4개의 블럭이 만들어짐
6. 현재 블럭 위치. 현재 페이지 / 한블럭당 페이지 수
현재 페이지가 3일시 3으로 나눠지면 1이된다. 그렇기에 현재 블록의 위치는 1이 된다.
nowblock는 당장은 의미가 없지만 변수로서 활용을 위해 선언되어있다.
s_pagenum은 블럭당 시작페이지번호를 나타내는데 1,4,7,10 ... 3씩 더해진 값이 나와야한다.
그렇기에 nowblock에서 1을 빼고 * page num+1 을 해준다.
현재페이지가 4인경우 nowblock의 값은 1.333. 올림해서 2가 된다. -1을해 1을 만들고 x pagenum( 3 ) +1 을 하면 4가 되기에 다음페이지로 넘어갈 수 있다.
7. s_pagenum 스타트페이지번호는 -1을 하기에 0보다 작거나 같으면 1을 리턴해 기본적으로 첫페이지가 나올 수 있도록 해준다.
8. 블럭의 마지막위치는 nowblock에서 * pagenum(3) 을 해주면된다. 1
3을 3으로 나누고 올림을하면 무슨경우든 1이 나오게되고 *3을하면 3이된다.
6을 3으로나누고 올림하면 무슨경우든 2가 나오게 된다. x3을하면 1,3,6,9 마지막페이지번호를 만들 수 있다.
마지막 페이지번호가 전체 페이지번호를 넘기지 않기위해 e_pageNum과 total_page를 비교해 마지막페이지가 더 크다면 totalpage의 수를 마지막 페이지번호에 넣어준다.
9. 한페이지에 5개만 표시를 하기에 0,5,10,15 의 변수가 생성되도록 수식을 작성한다.
(현재페이지-1) * listnum (5) 현재페이지가 3이라면 mysql안에 있는 테이블에서 15번째 줄부터 출력을하기위한 값이다.
$sql = "select * from books limit $start, $list_num";
select * from 테이블명 limet 시작위치 , 표출할 개수;
0에서 5개. 5에서 5개 10에서 5개 씩만 가져오게 된다.
$result2 = mysqli_query($conn, $sql);
while($row = mysqli_fetch_array($result2)){
echo "<tr>
<td>{$row['id']}</td>
<td><a href='detail.php?id={$row['id']}'>{$row['title']}</a></td>
<td>{$row['writer']}</td>
<td>{$row['publisher']}</td>
<td>{$row['price']}</td>
<td>{$row['bookdate']}</td>
</tr>";
}
이렇게해서 돌릴시 처음화면엔 5개만이 표출된다. 다음페이지로 넘어가고싶으면 ?page=2 ..3..4 입력시 다음으로 넘어갈 수 있다.
이전, 다음, 페이지 만들기
<?php
for($print_page = $s_pageNum; $print_page <= $e_pageNum; $print_page++){
?> <a href ="index.php?page=<?=$print_page?>"><?=$print_page?> </a>
;;; 좀괴랄하네;;;
일단 1,2,3 버튼을 만들기위해 for문을 사용한다.
printpage = s_pagenum(스타트페이지); 그리고 아까 계산해놓은 e_page 앤드페이지까지로 하며 1씩 더해준다.
1
3, 4
6 7~9 가 나오게 된다. a태그를주어 누를때마다 p불러오는 page값을 get방식으로 변경해서 처리해준다. 이까지하면 번호를 선택해 1,2,3을 이동할 수 있다.
<?php
if($page <= 1) {?>
<a href="index.php?page=1">이전</a>
<?php
}else{ ?>
<a href="index.php?page=<?=($page-1)?>">이전</a>
<?php
} ?>
<?php
if($page >= $total_page) {?>
<a href="index.php?page=<?=$total_page?>">다음</a>
<?php
}else{?>
<a href="index.php?page=<?=($page+1)?>">다음</a>
<?php
} ?>
1. 현재 페이지가 1보다 작거나 같으면 이전 클릭시 1을 반환해서 1밑으로는 내려가지 않도록 고정한다.
2. 현재페이지가 2이상이라면 페이지에서 1을 빼서 한칸씩 이동시킬 수 있다.
3. 다음도 마찬가지지만 마지막 페이지보다 현재 페이지가 더 크거나 같다면 마지막 페이지를 넣어주고 그게 아니라면 페이지에 +1을 해준다.
'프론트앤드 수업' 카테고리의 다른 글
[mysql,php] 간단한 로그인,로그아웃 만들어보기 (0) | 2022.05.30 |
---|---|
[mysql,php] 쿠키,세션 생성 (0) | 2022.05.30 |
[mysql,php] 연동해서 삽입,수정,삭제 가능한 테이블 만들기 (0) | 2022.05.27 |
[php] 파일 수정,삭제,추가를 이용해 게시판 만들기 (0) | 2022.05.26 |
[php] 파일추가 및 게시판처럼 파일내용 표출하기예제 (0) | 2022.05.25 |