본문 바로가기
WEB HACKING/웹 해킹[실습]

Php로 웹 개발하기 : 문의 게시판(5)

by madevth 2021. 12. 31.
반응형

이제 웹 개발이 거의 마무리되었다. Q&A 게시판의 잔기능들을 마무리 짓고, 관리자의 댓글 다는 기능만 구현하면 웹 개발은 끝이다! 메인 페이지를 조금 정리하고, 데이터를 삭제하는 기능에서 테이블의 id를 정렬하는 등 추가적인 보완만 하고 웹 해킹 공격 이론에서 다뤘던 대응 방안을 적용해 볼 것이다.

 

[qna_read.php]

<div class = "btns">
    <button class = "writeBtn" onclick = "location.href = 'qna_board.php'">문의 게시판</button>
    <?php
        if ($login_user == "admin") {
            echo "<button class = 'writeBtn' onclick = \"location.href = 'qna_answer.php?id=$id'\">댓글</button>";
        }
        else{
            echo "<button class = 'writeBtn' onclick = \"location.href = 'qna_delete.php?id=$id'\">삭제</button>";
        }
    ?>
</div>

문의 게시판을 읽는 코드에서, 수정 기능은 제거했다. 넣고 싶다면 게시판 수정 코드 write.php와 board_update.php에서 SQL Query의 테이블 정도만 수정하면 된다. 삭제 기능도 마찬가지로 board_delete.php를 조금만 수정하면 된다.

 

[qna_delete.php]

<?php
    if(isset($_GET['id'])){
        $conn = mysqli_connect('localhost', 'ID', 'PW', 'DBname');
        $id = mysqli_real_escape_string($conn, $_GET['id']);
        $sql = "DELETE FROM qna where id = {$id}";

        if($result = mysqli_query($conn, $sql)){
            echo "<script>alert('글이 삭제되었습니다!')</script>";
            echo "<script>window.location.href='board.php';</script>";
        }
        mysqli_close($conn);
    }
?>

 

이제 이번 포스팅의 메인이자 PHP 웹 개발의 마지막 기능인 관리자의 댓글 기능을 구현해보자.

[qna_answer.php]

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="./css/style.css"  rel = "stylesheet"/>
    <title>Comment</title>
</head>
<body>
    <div class = "column">
        <div class = "posting">
            <?php
                if(isset($_GET['id'])){
                    $conn = mysqli_connect('localhost', 'ID', 'PW', 'DBname');
                    $id = mysqli_real_escape_string($conn, $_GET['id']);
                    $sql = "SELECT * FROM qna where id = {$id}";
                    $result = mysqli_query($conn, $sql);

                    $row = mysqli_fetch_array($result);
                    $title = $row['title'];
                    $content = $row['content'];
                    
                    mysqli_close($conn);
                }
            ?>
            <div class = "posting_title"><?=$title?></div>
            <div class = "posting_contents"><?=$content?></div>
            <form action = "qna_comment.php" method = "post">
                <div class = "posting">
                	<input name = "id" type = "hidden" value = "<?=$id?>"/>
                    <textarea class = "posting_title" name = "comment" placeholder = "댓글"></textarea>
                    <input class = "writeBtn" type = "submit" value = "create">
                </div>
            </form>
        </div>
    </div>
</body>
</html>

id를 GET으로 받아와서 글 제목과 내용을 출력하고, form 태그를 만들어서 관리자가 댓글을 달 수 있도록 만든다. 어떤 id column에 comment를 추가할지 알아야 하기 때문에, input type hidden으로 id를 넘겨주었다.

댓글을 누르니 input을 받을 수 있는 칸이 생겼다.

 

이제 create를 누르면 DB에 comment를 저장하고, 읽을 수 있도록 만들어주자.

ALTER table `qna` add column `comment` varchar(50);

관리자가 댓글을 한 번만 달 수 있다고 가정하고 코멘트 컬럼을 추가해주었다.

 

[qna_comment.php]

<?php
    if(isset($_POST['comment']) && isset($_POST['id']) && isset($_POST['comment']) != NULL && isset($_POST['id']) != NULL){
        $conn = mysqli_connect('localhost', 'ID', 'PW', 'DBname');
        $id = mysqli_real_escape_string($conn, $_POST['id']);
        $comment= mysqli_real_escape_string($conn, $_POST['comment']);
        
        $sql = "UPDATE qna SET comment = '$comment' where id = '$id';";

        if($result = mysqli_query($conn, $sql)){
            echo "<script>alert('글 작성에 성공하셨습니다!')</script>";
            echo "<script>window.location.href='qna_board.php';</script>";
        } else{
            echo mysqli_error($conn);
        }
        mysqli_close($conn);
    }
?>

댓글을 달고 테이블을 확인해보자.

잘 저장된 것을 확인할 수 있다.

이제 qna_read.php에서 comment를 표시하는 로직만 추가하면 된다.

 

[qna_read.php]

<?php
  $title = $row['title'];
  $content = $row['content'];
  $comment = $row['comment'];
 ?>
<div class = "posting_title"><?=$title?></div>
<div class = "posting_contents"><?=$content?></div>
<div class = "posting_title"><?=$comment?></div>

comment만 추가로 가져온 후, content의 밑에 출력해주면 된다.

댓글이 없는 경우 아무것도 뜨지 않지만, 댓글이 있는 경우 뜨는 것을 확인할 수 있다.

 

2021년의 마지막 날 안녕~~

반응형

댓글