이제 웹 개발이 거의 마무리되었다. 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년의 마지막 날 안녕~~
'WEB HACKING > 웹 해킹[실습]' 카테고리의 다른 글
Oracle Cloud : XSS(Cross-Site Scripting) 실습 (2) | 2022.01.28 |
---|---|
Oracle Cloud : Free Tier 등록 & 접속 (0) | 2022.01.27 |
Php로 웹 개발하기 : 문의 게시판(4) (0) | 2021.12.27 |
Php로 웹 개발하기 : 문의 게시판(3) (0) | 2021.12.23 |
Php로 웹 개발하기 : 문의 게시판(2) (0) | 2021.12.20 |
댓글