jineecode
php로 게시판 구체적으로 구현하기 (2) 본문
jineecode.tistory.com/113?category=834643
이어서 이전글, 다음글 페이지를 이어서 구현해보겠습니다.
골격은
jineecode.tistory.com/108?category=834643
와 같지만 위의 단점을 개선한 코드입니다.
<?php
$noti_detail_num=$_GET['num'];
include $_SERVER['DOCUMENT_ROOT'].'/openconcert/process/connect/db_connect.php';
// 해당 게시물 정보
$sql="select * from opc_noti where OPC_NOTI_num=$noti_detail_num";
$result=mysqli_query($dbConn, $sql);
$row=mysqli_fetch_array($result);
$noti_detail_tit=$row['OPC_NOTI_tit'];
$noti_detail_des=$row['OPC_NOTI_desc'];
$noti_detail_new_des=nl2br($noti_detail_des);
$noti_detail_hit=$row['OPC_NOTI_hit'];
$new_hit=$noti_detail_hit + 1;
$sql="update opc_noti set OPC_NOTI_hit=$new_hit where OPC_NOTI_num=$noti_detail_num";
$noti_detail_reg=$row['OPC_NOTI_reg'];
mysqli_query($dbConn, $sql);
// DB ROW COUNT
$query = "SELECT * FROM opc_noti";
$data = mysqli_query($dbConn, $query);
$total_rows = mysqli_num_rows($data);
?>
<!-- view-list start -->
<div class="view-list">이전글<span class="view-prev">
<?php
if($noti_detail_num - 1 == 0){
?>
등록된 이전글이 없습니다.</span>
</div>
<?php
} else {
// 이전글 넘버
$sql="SELECT * FROM opc_noti WHERE OPC_NOTI_num < $noti_detail_num ORDER BY OPC_NOTI_num desc limit 1";
$prev_result=mysqli_query($dbConn, $sql);
$prev_row=mysqli_fetch_array($prev_result);
$prev_num=$prev_row['OPC_NOTI_num'];
$prev_noti_detail_tit=$prev_row['OPC_NOTI_tit'];
?>
<a href="/openconcert/page/notice/noti_view.php?num=<?=$prev_num?>">
<?=$prev_noti_detail_tit?></a></span>
</div>
<?php
}
?>
<div class="view-list">다음글<span class="view-next">
<?php
// 현재 페이지가 마지막 페이지?
$sql="SELECT * FROM opc_noti WHERE OPC_NOTI_num ORDER BY OPC_NOTI_num desc limit 1";
$result=mysqli_query($dbConn, $sql);
$row=mysqli_fetch_array($result);
$number=$row['OPC_NOTI_num'];
if($noti_detail_num==$number){
// 현재 페이지 번호 31번, 전체 로우 갯수 28개, 다음 게시글??
// 전체 로우 갯수를 세고,
?>
등록된 다음글이 없습니다.
</span>
</div>
<?php
} else {
// 다음글 넘버
$next_sql="SELECT * FROM opc_noti WHERE OPC_NOTI_num > $noti_detail_num limit 1";
$next_result=mysqli_query($dbConn, $next_sql);
$next_row=mysqli_fetch_array($next_result);
$next_num=$next_row['OPC_NOTI_num'];
$next_noti_detail_tit=$next_row['OPC_NOTI_tit'];
?>
<a href="/openconcert/page/notice/noti_view.php?num=<?=$next_num?>">
<?=$next_noti_detail_tit?>
</a></span>
</div>
<?php
}
?>
전체 게시물 리스트에 보여지는 번호는 그저 우리 눈에 보여지는 가상번호일 뿐이며,
디테일한 하나하나의 게시물 데이터는 실제 키값으로 연결해야 된다는 관점이 포인트이다.
즉,
가장 최근 글의 번호는 52번이지만
실제로 이 데이터가 갖고 있는 넘버는 ?num=59 번째 게시물이다.
테이블의 키 값을 확인해보면 알 수 있다.
이 점을 염두해두고 코드를 짜면 쉽게 이해할 수 있다.
이전글이 없을 때 이전글이 없습니다. 조건문
<?php
if($noti_detail_num - 1 == 0){
?>
등록된 이전글이 없습니다.</span>
</div>
GET으로 가져온 넘버에서 -1을 했을 시 0 이면 이전글이 없습니다 가 출력됩니다.
이전글이 있을 때 조건문
<?php
} else {
// 이전글 넘버
$sql="SELECT * FROM opc_noti WHERE OPC_NOTI_num < $noti_detail_num ORDER BY OPC_NOTI_num desc limit 1";
$prev_result=mysqli_query($dbConn, $sql);
$prev_row=mysqli_fetch_array($prev_result);
$prev_num=$prev_row['OPC_NOTI_num'];
$prev_noti_detail_tit=$prev_row['OPC_NOTI_tit'];
?>
<a href="/openconcert/page/notice/noti_view.php?num=<?=$prev_num?>">
<?=$prev_noti_detail_tit?></a></span>
</div>
<?php
}
?>
$sql="SELECT * FROM opc_noti WHERE OPC_NOTI_num < $noti_detail_num ORDER BY OPC_NOTI_num desc limit 1";
GET으로 가져온 넘버($noti_detail_num) 보다 작은 넘버를 구합니다.
이때, order by desc 에서 (테이블의 역순) 딱 하나만 고른다 (limit 1)는 조건을 뒤에 꼭 붙혀줍니다.
예를 들어 내가 클릭한 게시물의 번호가, 50번째 게시물이고, 이전글을 하나 가져오기 위해 50보다 작은 것 중 하나만 가져와 변수에 저장한 것입니다. -가 아닌 부등호를 쓴 이유는 게시물 사이에 두 개를 지웠을 때 오류가 뜹니다.
이렇게 쿼리를 날린 것의 넘버와 tit을 각각 변수에 저장해, a 태그와 제목에 삽입해줍니다.
다음글이 없을 때 조건문
<div class="view-list">다음글<span class="view-next">
<?php
$sql="SELECT * FROM opc_noti WHERE OPC_NOTI_num ORDER BY OPC_NOTI_num desc limit 1";
$result=mysqli_query($dbConn, $sql);
$row=mysqli_fetch_array($result);
$number=$row['OPC_NOTI_num'];
if($noti_detail_num==$number){
?>
등록된 다음글이 없습니다.
</span>
</div>
$sql="SELECT * FROM opc_noti WHERE OPC_NOTI_num ORDER BY OPC_NOTI_num desc limit 1";
다음글이 없다는 것은 현재 내가 보고 있는 글의 넘버($noti_detail_num)가 테이블에 존재하는 가장 마지막의 넘버와 같다는 뜻입니다.
즉, 테이블의 가장 마지막 넘버를 불러와 저장해서 비교해야합니다.
opc_noti 테이블 에서, ORDER BY OPC_NOTI_num desc limit 1, 즉, OPC_NOTI_num의 역순으로 하나만 불러옵니다.
이것을 저장하여 비교합니다.
$noti_detail_num==$number
GET으로 가져온 넘버와 테이블의 맨 마지막 번호가 일치하면 등록된 다음글이 없습니다를 출력합니다.
다음글이 있을 때 조건문
<?php
} else {
// 다음글 넘버
$next_sql="SELECT * FROM opc_noti WHERE OPC_NOTI_num > $noti_detail_num limit 1";
$next_result=mysqli_query($dbConn, $next_sql);
$next_row=mysqli_fetch_array($next_result);
$next_num=$next_row['OPC_NOTI_num'];
$next_noti_detail_tit=$next_row['OPC_NOTI_tit'];
?>
<a href="/openconcert/page/notice/noti_view.php?num=<?=$next_num?>">
<?=$next_noti_detail_tit?>
</a></span>
</div>
<?php
}
?>
$next_sql="SELECT * FROM opc_noti WHERE OPC_NOTI_num > $noti_detail_num limit 1";
opc_noti 테이블에서 현재 넘버보다 하나 큰 것을 가져와 저장하고 그 테이블의 정보를 변수에 저장해 a태그와 제목에 넣어줍니다.
이렇게 하면 중간에 삭제를 하더라도 다음글과 이전글이 잘 읽어냅니다.
53번 글 삭제
^^*
'php' 카테고리의 다른 글
php로 게시판 구체적으로 구현하기 (1) (0) | 2021.04.05 |
---|---|
검색 폼 유형 (0) | 2021.03.31 |
다음 글, 이전 글 php로 구현하기 (0) | 2021.03.30 |
nl2br로 줄바꿈을 한 textarea의 수정? (0) | 2021.03.29 |