상세 페이지 : 댓글 저장

DATE : 2023/12/06

사용자가 위에 보이는 게시물에 "i am Dog person!"이라는 댓글을 달고 싶어하는 상황이라고 상상해보자.

지금은 단지 문자를 입력할 수 있는 칸과 임의대로 만들어둔 댓글들이 출력 되고 있을 뿐,

댓글을 저장하는 기능은 그 무엇도 구현되어있지 않은 상황이다.

댓글을 보여주는 영역에서는 사용자들이 작성한 댓글을 모아두었다가 가져오는 과정이 수행되는데

문제는.. 모아둔 댓글이 있어야 보여주든지 말든지 하지!!

그.래.서

댓글을 저장하는 기능을 먼저 살펴보고자 하는 것. 😆

<form action="./upload_comment.php" class="comment_form" method="post">
    <textarea name="comment"></textarea>
    <input type="submit" value="Comment" name="comment_btn">
    <input type="text" name="idx" value="<?=$idx;?>" style="display: none;">
</form>

사용자가 댓글을 작성한 후, COMMENT 버튼을 누르면

<Form> tag - action에 작성된 upload_comment.php가 동작하게 된다.

동시에 textarea에 작성된 내용이 POST method로 전달되면서

upload_comment.php에서는 $_POST['comment']로 그 값을 가져올 수 있다.

"댓글을 저장한다"는 관점에서 생각해보면 각 댓글이 어떤 게시물에 달린 댓글인지 구분할 필요가 있다.

<input type="text" name="idx" value="<?=$idx;?>" style="display: none;">

이를 위해 게시물의 식별 정보인 ID를 idx 라는 이름으로 전달해주는 것이다.

여기까지 봤을 때 준비된 재료는

textarea -> comment
input -> id

댓글 내용과 게시물 ID이다.

댓글 정보를 저장할 Table은 총 5개의 column을 가지기 때문에

  • cmt_id : 1부터 자동 증가하는 댓글 식별 정보

  • idx : 댓글이 어떤 게시물의 댓글인지 나타내는 게시물 ID

  • author : 댓글 작성자

  • date : 댓글 작성 일시

  • comment : 작성된 댓글 내용

남아있는 author & date 값을 알아내야 하고 이는 upload_comment.php에서 수행할 것이다.

[ upload_comment.php ]

<?php
    require_once("db_connect.php");
    require_once('jwt.php');

    $cmt = $_POST['comment'];
    $idx = $_POST['idx'];
    $author = getToken($_COOKIE['JWT'])['usr'];
    $comment = $_POST['comment'];
    
    if(trim($cmt) == '') {
        echo "<script>alert('You have to write something');
            location.replace('article.php?idx=$idx');
        </script>";
    }
    
    $date = date("Y-m-d H:i:s");
    $sql = "INSERT INTO comments values (default,'$idx','$author','$date','$comment')";
    $result = mysqli_query($conn, $sql);
    
    if(!$result) {
        echo "<script>alert('Error');
            location.replace('article.php?idx=$idx');
        </script>";
    } else {
        echo "<script>alert('Successfully, Your Comment is stored!');
            location.replace('article.php?idx=$idx');
        </script>";
    }
?>

article page에서 넘겨준 comment, id, comment 값을 변수에 할당하고

댓글 작성자가 누구인지는 현재 로그인 한 사용자의 JWT 쿠키에서 뽑아온다.

작성 일시도 date() 함수를 사용해 어렵지 않게 구해 실행할 INSERT문을 완성해주면 된다.

INSERT문의 경우에는 결과가 0 or 1로 나오는 데 만약 Query를 실행하는 과정에 문제가 생겨

0이 반환 된다면 not 연산자에 의해 if문이 실행되면서 Error를 출력하게 될 것이다.

이제 준비가 끝났으니 댓글을 작성해 Table에 잘 들어가는 지 확인해보자.

게시물에 댓글을 작성한 후, Comment 버튼을 누르면

정상적으로 처리되었다는 문구와 함께

Table에도 댓글이 새로 추가된 걸 확인할 수 있다. 👍

이제 게시물에 이런 저런 댓글을 작성해 임의로 만들어둔 댓글이 아닌!

사용자가 직접 작성한 댓글을 출력하는 comment_box를 구현해보도록 하자!

Last updated