jineecode

다음 글, 이전 글 php로 구현하기 본문

php

다음 글, 이전 글 php로 구현하기

지니코딩 2021. 3. 30. 11:49

먼저 저는 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로 게시판 구체적으로 구현하기 (2)

jineecode.tistory.com/113?category=834643 php로 게시판 구체적으로 구현하기 (1) 먼저 저는 php를 전문적으로 공부하지 않았으며 문제 해결 기록용으로 남깁니다. 지금까지 구현해왔던 게시판은 키 값이 글

jineecode.tistory.com

위 문제를 해결한 글입니다.

Comments