게시물 삭제 기능 추가 : article.php

DATE : 2023/12/27

이번 POST에서는 상세 페이지에 삭제 버튼을 추가해

게시물과 관련 댓글을 삭제하는 기능에 대해 살펴볼 것이다.

현재 상세 페이지 구성을 확인해보면 게시물 내용이 하단에

Edit & Delete 버튼이 위치해 있는 걸 볼 수 있다.

두 버튼은 게시물 작성자와 현재 로그인한 사용자가 일치할 때만 활성화 되어

게시물을 작성한 사람만 수정 OR 삭제를 할 수 있게 기능이 제한되어 있다.

원래는 Edit 버튼만 제공되었기 때문에

(1) Delete 버튼을 추가하고

(2) 클릭 된 버튼에 따라 알맞은 기능이 실행되도록

코드를 수정할 것이다.

[ edit_post.php ]

<?php
    require_once("db_connect.php");
    $idx = $_POST['idx'];

    if(isset($_POST['delete_btn'])) {
        $sql = "SELECT cmt_id FROM comments WHERE idx='$idx'";
        $res = mysqli_query($conn, $sql);
        
        while($row = mysqli_fetch_array($res)) {
            $cmt_id = $row['cmt_id'];
            $sql = "DELETE FROM comments WHERE cmt_id='$cmt_id'";

            $result = mysqli_query($conn, $sql);
            if(!$result) {
                echo '<script>alert("Something Was Wrong");</script>';
            }
        }

        $sql = "DELETE FROM board WHERE id='$idx'";
        $res = mysqli_query($conn, $sql);

        if(!$res) {
            echo '<script>alert("Error");
            window.location.href = "./index.php";</script>';
            exit;
        } else {
            echo '<script>alert("Your Article is Successfully Deleted.");
            window.location.href = "./index.php";</script>';
            exit;
        }
    }


    ...
?>

사용자가 Delete & Edit 버튼을 클릭하면 edit_post.php 코드가 실행되는데

이때 클릭 된 버튼이 무엇이냐에 따라서 실행되는 내용을 달리 할 것이다.

우선 Delete & Edit 버튼이 작성된 코드에서

<?php 
    if ($cur_usr == $post_author) {?>
        <div class="btn_box">
            <input type="submit" value="Edit" name="edit_btn">
            <input type="submit" value="Delete" name="delete_btn">    
        </div>
    <?php } else { ?>
        <div class="btn_box">
            <input type="submit" value="Edit" disabled>
            <input type="submit" value="Delete" name="delete_btn" disabled>
        </div>
<?php }?>

각 버튼의 name 값을 (edit_btn, delete_btn) 확인하고 가자.

if(isset($_POST['delete_btn'])) {
    $sql = "SELECT cmt_id FROM comments WHERE idx='$idx'";
    $res = mysqli_query($conn, $sql);
    
    while($row = mysqli_fetch_array($res)) {
        $cmt_id = $row['cmt_id'];
        $sql = "DELETE FROM comments WHERE cmt_id='$cmt_id'";

        $result = mysqli_query($conn, $sql);
        if(!$result) {
            echo '<script>alert("Something Was Wrong");</script>';
        }
    }

사용자가 둘 중 하나를 클릭해 edit_post.php 코드가 실행되면

제일 먼저 어떤 버튼이 눌렸는지 확인한다.

만약 Delete 버튼이 클릭 됐다면 아래의 값이 존재할 것이기 때문에

$_POST['delete_btn']

게시물과 댓글을 삭제하는 코드를 실행하게 된다.

순서로 따지자면 삭제할 게시물 보자 게시물에 달린 댓글을 먼저 삭제할 것이기 때문에

현재 게시물에 달린 댓글의 ID를 모두 조회한다.

댓글이 하나 이상일 수 있기 때문에 while문을 통해

while($row = mysqli_fetch_array($res)) {...}

얻어온 댓글을 하나씩 삭제하는 과정을 수행하게 된다.

$sql = "DELETE FROM board WHERE id='$idx'";
$res = mysqli_query($conn, $sql);

if(!$res) {
    echo '<script>alert("Error");
    window.location.href = "./index.php";</script>';
    exit;
} else {
    echo '<script>alert("Your Article is Successfully Deleted.");
    window.location.href = "./index.php";</script>';
    exit;
}

관련 댓글을 모두 삭제하는 과정에서 별 다른 문제가 없다면 바로 게시물을 삭제하는 코드가 실행된다.

DELETE문을 통해 해당 게시물을 board Table에서 삭제하고

에러가 발생했을 경우에는 팝업 창을 통해 알 수 있도록 처리해두었다.

코드 결과를 확인해보기 위해 mario로 로그인한 후, Delete 버튼을 눌러보..기 전에!

현재 DB 내용을 먼저 확인해보면 삭제할 게시물의 댓글 3개를 아래 사진에서 찾아볼 수 있다.

Table 상태를 확인했으니 이번엔 진짜로 Delete 버튼을 눌러보자 😏

버튼을 누르면 코드 실행 순서에 알맞게 댓글이 삭제되었다는 문구가 먼저 뜨고

뒤이어 게시물이 삭제되었다는 문구도 확인!!

(위의 코드에서는 댓글이 여러 개면 댓글 수만큼 팝업이 떠서 댓글 삭제 팝업은 그냥 지워두었다.)

Table도 확인해보면 위에서 미리 체크해두었던 게시물의 댓글만 쏙!

사라진 걸 볼 수 있다.

이렇게 해서 게시물 삭제와 관련된 기능 구현 완-료! 👍

Last updated