jineecode
다음 글, 이전 글 php로 구현하기 본문
먼저 저는 php를 전문적으로 공부하지 않았으며 문제 해결 기록용으로 남깁니다.
제가 구현하는 게시판은 키 값이 글 번호이며 이러한 로직은 게시판의 게시물이 삭제되었을 때 문제가 발생한다는 것을 염두해주세요.
게시판
테이블
테이블명: opc_qna
컬럼명은 아래와 같습니다.
qna.php
<?php
include $_SERVER['DOCUMENT_ROOT'].'/openconcert/process/connect/db_connect.php';
$sql="select * from opc_qna order by OPC_QNA_num desc limit 5";
$qna_result=mysqli_query($dbConn, $sql);
while($qna_row=mysqli_fetch_array($qna_result)){
$qna_res_num=$qna_row['OPC_QNA_num'];
$qna_res_id=$qna_row['OPC_QNA_name'];
$qna_res_tit=$qna_row['OPC_QNA_tit'];
$qna_res_reg=$qna_row['OPC_QNA_reg'];
$qna_res_hit=$qna_row['OPC_QNA_hit'];
?>
opc_qna 테이블로부터 5개까지만 역순으로 OPC_QNA_num를 불러옵니다.
쿼리를 날려주고 while 반복문을 작성해줍니다.
게시판 제목에 걸려있는 태그
<span class="qna-tit">
<a href="/openconcert/page/qna/qna_view.php?num=<?=$qna_res_num?>"class="qna-link">
<?=$qna_res_tit?></a>
</span>
게시판 제목인 $qna_res_tit를 클릭하면 자세한 게시판을 볼 수 있는 qna_view.php 로 넘어가는데 그 뒤에 ?num=<?=$qna_res_num?>을 붙혀서 클릭 시 주소 뒤에 해당 번호의 넘버가 붙도록 했습니다.
5번째 글을 클릭하면 주소창 뒤에 num이 붙습니다.
qna_view.php
<?php
$qna_detail_num=$_GET['num'];
include $_SERVER['DOCUMENT_ROOT'].'/openconcert/process/connect/db_connect.php';
// 해당 게시물 정보
$sql="select * from opc_qna where OPC_QNA_num=$qna_detail_num";
$result=mysqli_query($dbConn, $sql);
$row=mysqli_fetch_array($result);
$qna_detail_tit=$row['OPC_QNA_tit'];
$qna_detail_name=$row['OPC_QNA_name'];
$qna_detail_des=$row['OPC_QNA_desc'];
$qna_detail_new_des=nl2br($qna_detail_des);
$qna_detail_hit=$row['OPC_QNA_hit'];
$new_hit=$qna_detail_hit + 1;
$sql="update opc_qna set OPC_QNA_hit=$new_hit where OPC_QNA_num=$qna_detail_num";
$qna_detail_reg=$row['OPC_QNA_reg'];
mysqli_query($dbConn, $sql);
// DB ROW COUNT
$query = "SELECT * FROM opc_qna";
$data = mysqli_query($dbConn, $query);
$total_rows = mysqli_num_rows($data);
?>
$qna_detail_num=$_GET['num'];
주소창 뒤에 붙은 num을 get방식으로 가져와 $qna_detail_num 에 저장합니다.
// 해당 게시물 정보
위와 같은 방식으로 opc_qna 테이블을 불러옵니다.
달라진 점은 hit 수 증가인데 이 게시물에선 다루지 않습니다.
// DB ROW COUNT
opc_qna 테이블의 행 갯수를 카운트합니다.
쿼리를 날려준 뒤 mysqli_num_rows 으로 행 갯수를 셉니다.
이 갯수는 $total_rows 에 저장해두었습니다.
>>지금부터 이전글, 다음글 작업입니다.
게시판
php가 전혀 들어가지 않은 상태입니다.
위는 아래 코드와 같습니다
이전글 다음글 마크업은 취향에 따라 만듭니다.
<div class="view-list">이전글<span class="view-prev">등록된 이전글이 없습니다.</span>
</div>
<div class="view-list">다음글<span class="view-next">등록된 다음글이 없습니다.</span>
</div>
php를 입혀봅니다.
qna_view.php
<div class="view-list">이전글<span class="view-prev">
<?php
if($qna_detail_num - 1 == 0){
?>
등록된 이전글이 없습니다.</span>
</div>
<?php
} else {
// 이전글 넘버
$prev_num=$qna_detail_num-1;
$prev_sql="select * from opc_qna where OPC_QNA_num=$prev_num";
$prev_result=mysqli_query($dbConn, $prev_sql);
$prev_row=mysqli_fetch_array($prev_result);
$prev_qna_detail_tit=$prev_row['OPC_QNA_tit'];
// echo $prev_qna_detail_tit;
?>
<a href="/openconcert/page/qna/qna_view.php?num=<?=$prev_num?>">
<?=$prev_qna_detail_tit?></a></span>
</div>
<?php
}
?>
<div class="view-list">다음글<span class="view-next">
<?php
if($qna_detail_num == $total_rows){
?>
등록된 다음글이 없습니다.
</span>
</div>
<?php
} else {
// 다음글 넘버
$next_num=$qna_detail_num+1;
$next_sql="select * from opc_qna where OPC_QNA_num=$next_num";
$next_result=mysqli_query($dbConn, $next_sql);
$next_row=mysqli_fetch_array($next_result);
$next_qna_detail_tit=$next_row['OPC_QNA_tit'];
// echo $next_qna_detail_tit;
?>
<a href="/openconcert/page/qna/qna_view.php?num=<?=$next_num?>">
<?=$next_qna_detail_tit?>
</a></span>
</div>
<?php
}
?>
로직은 이렇습니다.
이전글 : 현재의 넘버에서 -1 을 했을 때 0이면 '이전글이 없습니다' 출력, 아니면 이전글이 있습니다.
if($qna_detail_num - 1 == 0)
다음글 : 현재의 넘버 = 테이블의 행 갯수이면 '다음글이 없습니다' 출력, 아니면 다음글이 있습니다.
if($qna_detail_num == $total_rows)
이전글의 제목을 불러오는 방법
// 이전글 넘버
$prev_num=$qna_detail_num-1;
$prev_sql="select * from opc_qna where OPC_QNA_num=$prev_num";
$prev_result=mysqli_query($dbConn, $prev_sql);
$prev_row=mysqli_fetch_array($prev_result);
$prev_qna_detail_tit=$prev_row['OPC_QNA_tit'];
// echo $prev_qna_detail_tit;
현재의 넘버에서 -1 을 하면 이전글의 넘버가 나올 것입니다.
이 넘버와 맞는 OPC_QNA_num 을 매치시켜서 쿼리를 날려주고 해당 타이틀을 찾아 저장하면 됩니다.
다음글의 제목을 불러오는 방법
$next_num=$qna_detail_num+1;
$next_sql="select * from opc_qna where OPC_QNA_num=$next_num";
$next_result=mysqli_query($dbConn, $next_sql);
$next_row=mysqli_fetch_array($next_result);
$next_qna_detail_tit=$next_row['OPC_QNA_tit'];
이전글과 마찬가지로 코드합니다.
이를 가지고 코드하면 이렇게 되는 것입니다.
<a href="/openconcert/page/qna/qna_view.php?num=<?=$next_num?>">
<?=$next_qna_detail_tit?>
</a>
결과
다시 한 번 말하지만 이 코드의 치명적인 단점은 키 값이 글 번호이기 때문에 게시물이 삭제 되었을 때 문제가 생깁니다.
2번 게시물이 삭제되었을 때,
jineecode.tistory.com/114?category=834643
위 문제를 해결한 글입니다.
'php' 카테고리의 다른 글
php로 게시판 구체적으로 구현하기 (2) (0) | 2021.04.05 |
---|---|
php로 게시판 구체적으로 구현하기 (1) (0) | 2021.04.05 |
검색 폼 유형 (0) | 2021.03.31 |
nl2br로 줄바꿈을 한 textarea의 수정? (0) | 2021.03.29 |