jineecode

php로 게시판 구체적으로 구현하기 (2) 본문

php

php로 게시판 구체적으로 구현하기 (2)

지니코딩 2021. 4. 5. 15:13

jineecode.tistory.com/113?category=834643

 

php로 게시판 구체적으로 구현하기 (1)

먼저 저는 php를 전문적으로 공부하지 않았으며 문제 해결 기록용으로 남깁니다. 지금까지 구현해왔던 게시판은 키 값이 글 번호였으며 이러한 로직은 게시판의 게시물이 삭제되었을 때 문제가

jineecode.tistory.com

이어서 이전글, 다음글 페이지를 이어서 구현해보겠습니다.

 

 

골격은

jineecode.tistory.com/108?category=834643

 

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

먼저 저는 php를 전문적으로 공부하지 않았으며 문제 해결 기록용으로 남깁니다. 제가 구현하는 게시판은 키 값이 글 번호이며 이러한 로직은 게시판의 게시물이 삭제되었을 때 문제가 발생한다

jineecode.tistory.com

와 같지만 위의 단점을 개선한 코드입니다.


 

  <?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
Comments