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

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

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

<figure><img src="https://396684666-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FFe2bRj2aujmxreXCSw31%2Fuploads%2F9UA07WUYNWgnlAffz6dj%2Fimage.png?alt=media&#x26;token=c327ed15-6d06-4d61-9a5b-48b4360bf508" alt=""><figcaption></figcaption></figure>

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

<mark style="background-color:purple;">**Edit & Delete 버튼**</mark>이 위치해 있는 걸 볼 수 있다.

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

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

원래는 Edit 버튼만 제공되었기 때문에&#x20;

**(1)** Delete 버튼을 추가하고

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

코드를 수정할 것이다.&#x20;

### \[ edit\_post.php ]

```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
<?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) 확인하고 가자.&#x20;

```php
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 코드가 실행되면&#x20;

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

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

```
$_POST['delete_btn']
```

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

순서로 따지자면 삭제할 게시물 보자 <mark style="background-color:purple;">**게시물에 달린 댓글을 먼저 삭제**</mark>할 것이기 때문에&#x20;

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

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

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

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

```php
$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에서 삭제하고&#x20;

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

<figure><img src="https://396684666-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FFe2bRj2aujmxreXCSw31%2Fuploads%2F3UNH1fRwHzPHbjdYt713%2Fimage.png?alt=media&#x26;token=2b747566-7b80-4bf6-b073-b0666e210d94" alt=""><figcaption></figcaption></figure>

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

<figure><img src="https://396684666-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FFe2bRj2aujmxreXCSw31%2Fuploads%2FGH02n0JiTVyLUkgPo5jG%2Fimage.png?alt=media&#x26;token=00e04457-c1ae-4f46-8728-9e30d66b27dd" alt=""><figcaption></figcaption></figure>

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

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

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

<figure><img src="https://396684666-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FFe2bRj2aujmxreXCSw31%2Fuploads%2FqAguaKMM7neSrKcObYPu%2Fimage.png?alt=media&#x26;token=040ac043-04ae-4a54-a9e0-1ffafa5966e7" alt=""><figcaption></figcaption></figure>

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

<figure><img src="https://396684666-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FFe2bRj2aujmxreXCSw31%2Fuploads%2FZpF750ri1sJko3o206d6%2Fimage.png?alt=media&#x26;token=49a83415-4dce-4777-ba8f-f828f5d11fe4" alt=""><figcaption></figcaption></figure>

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

<figure><img src="https://396684666-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FFe2bRj2aujmxreXCSw31%2Fuploads%2FxbsPEhrp5ACqwtcJl9qm%2Fimage.png?alt=media&#x26;token=254c31db-ab3c-4cc8-a30e-5355aa61db48" alt=""><figcaption></figcaption></figure>

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

사라진 걸 볼 수 있다.&#x20;

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