본문 바로가기
따라 공부하기/PHP게시판 따라하기

[PHP+MySQL]게시판 만들기 6 - 댓글 작성 기능

by DawIT 2020. 12. 5.
320x100

이 글은 이곳을 참고하여 쓰여졌습니다.

 

오늘은 게시판에 댓글을 달아보려고 한다.

 

댓글을 달기 위해 먼저 reply테이블을 만들어준다.

 

3

 

reply 테이블을 구성은 이렇다.

 

그리고 글을 조회하는데 사용되는 read.php에서 댓글 부분을 추가해준다.

 

 

일단 <head> 태그에 필요한 js파일과 css를 로드한다.

 

<?php
	include $_SERVER['DOCUMENT_ROOT']."/BBS/db.php"; /* db load */
?>
<!doctype html>
<head>
<meta charset="UTF-8">
<title>게시판</title>
<link rel="stylesheet" type="text/css" href="/BBS/css/style.css" />
<link rel="stylesheet" type="text/css" href="/BBS/css/jquery-ui.css" />
<script type="text/javascript" src="/BBS/js/jquery-3.2.1.min.js"></script>
<script type="text/javascript" src="/BBS/js/jquery-ui.js"></script>
<script type="text/javascript" src="/BBS/js/common.js"></script>
</head>
<body>
	<?php
		$bno = $_GET['idx']; /* bno함수에 idx값을 받아와 넣음*/
		$hit = mysqli_fetch_array(query("select * from board where idx =".$bno));
		$hit = $hit['hit'] + 1;
		$fet = query("update board set hit = '".$hit."' where idx = '".$bno."'");
		$sql = query("select * from board where idx=".$bno); /* 받아온 idx값을 선택 */
		$board = $sql->fetch_array();
	?>
<!-- 글 불러오기 -->
<div id="board_read">
	<h2><?php echo $board['title']; ?></h2>
		<div id="user_info">
			<?php echo $board['name']; ?> <?php echo $board['date']; ?> 조회:<?php echo $board['hit']; ?> 추천수:<?php echo $board['thumbup']; ?>
				<div id="bo_line"></div>
			</div>
			<div id="bo_content">
				<?php echo nl2br("$board[content]"); ?>
			</div>
	<!-- 목록, 수정, 삭제 -->
	<div id="bo_ser">
		<ul>
			<li><a href="/">[목록으로]</a></li>
			<li><a href="thumbup.php?idx=<?php echo $board['idx']; ?>">[추천]</a></li>
			<li><a href="modify.php?idx=<?php echo $board['idx']; ?>">[수정]</a></li>
			<li><a href="delete.php?idx=<?php echo $board['idx']; ?>">[삭제]</a></li>
		</ul>
	</div>
</div>
<!--- 댓글 불러오기 -->
<div class="reply_view">
	<h3>댓글목록</h3>
		<?php
			$sql3 = query("select * from reply where con_num='".$bno."' order by idx desc");
			while($reply = $sql3->fetch_array()){ 
		?>
		<div class="dap_lo">
			<div><b><?php echo $reply['name'];?></b></div>
			<div class="dap_to comt_edit"><?php echo nl2br("$reply[content]"); ?></div>
			<div class="rep_me dap_to"><?php echo $reply['date']; ?></div>
			<div class="rep_me rep_menu">
				<a class="dat_edit_bt" href="#">수정</a>
				<a class="dat_delete_bt" href="#">삭제</a>
			</div>
			<!-- 댓글 수정 폼 dialog -->
			<div class="dat_edit">
				<form method="post" action="/BBS/rep_modify_ok.php">
					<input type="hidden" name="rno" value="<?php echo $reply['idx']; ?>" /><input type="hidden" name="b_no" value="<?php echo $bno; ?>">
					<input type="password" name="pw" class="dap_sm" placeholder="비밀번호" />
					<textarea name="content" class="dap_edit_t"><?php echo $reply['content']; ?></textarea>
					<input type="submit" value="수정하기" class="re_mo_bt">
				</form>
			</div>
			<!-- 댓글 삭제 비밀번호 확인 -->
			<div class='dat_delete'>
				<form action="/BBS/reply_delete.php" method="post">
					<input type="hidden" name="rno" value="<?php echo $reply['idx']; ?>" /><input type="hidden" name="b_no" value="<?php echo $bno; ?>">
			 		<p>비밀번호<input type="password" name="pw" /> <input type="submit" value="확인"></p>
				 </form>
			</div>
		</div>
	<?php } ?>

	<!--- 댓글 입력 폼 -->
	<div class="dap_ins">
		<form action="/BBS/reply_ok.php?idx=<?php echo $bno; ?>" method="post">
			<input type="text" name="dat_user" id="dat_user" class="dat_user" size="15" placeholder="아이디">
			<input type="password" name="dat_pw" id="dat_pw" class="dat_pw" size="15" placeholder="비밀번호">
			<div style="margin-top:10px; ">
				<textarea name="content" class="reply_content" id="re_content" ></textarea>
				<button id="rep_bt" class="re_bt">댓글</button>
			</div>
		</form>
	</div>
</div><!--- 댓글 불러오기 끝 -->
<div id="foot_box"></div>
</div>
</body>
</html>

 

그리고 read.php 하단에 댓글입력을 위한 코드들을 추가해준다. 일단 댓글목록에는 reply테이블에 기존에 있던 모든 댓글을 $bno와 con_num이 일치하는 것들만 가져옴으로써 출력한다. 구체적으로는 $reply 변수에 fetch_array()함수를 통해 각각의 컬럼에 해당하는 정보를 가져오고, dap_io 에서 한줄씩 출력해준다.

 

또한 댓글을 작성했을 시, reply_ok.php로 post형식으로 데이터가 전달되니, 해당되는 reply.php를 작성한다.

 

<?php
	include $_SERVER['DOCUMENT_ROOT']."/BBS/db.php";

    $bno = $_GET['idx'];
    $userpw = password_hash($_POST['dat_pw'], PASSWORD_DEFAULT);
    
    if($bno && $_POST['dat_user'] && $userpw && $_POST['content']){
        $sql = query("insert into reply(con_num,name,pw,content) values('".$bno."','".$_POST['dat_user']."','".$userpw."','".$_POST['content']."')");
        echo "<script>alert('댓글이 작성되었습니다.'); 
        location.href='/BBS/read.php?idx=$bno';</script>";
    }else{
        echo "<script>alert('댓글 작성에 실패했습니다.'); 
        history.back();</script>";
    }
?>

 

이렇게 작성해주고 게시판을 새로고침한다.

 

 

아무 글이나 들어가주면 하단에 댓글 입력 폼이 생성되어있는 것을 볼 수있다.

 

 

이제 아무 댓글이나 입력해준다. 그리고 댓글 버튼을 선택하면,

 

 

작성 완료 메시지와 함께 정상적으로 댓글이 표시되는것을 확인할 수 있다.

 

그냥 마치기는 조금 심심해서 index.php에서 글 제목 옆에 댓글 개수를 숫자로 나타내주는 코드를 추가해 보았다.

 

 

php를 많이 해본것은 아니여서 기존 코드의 방식을 그대로 사용했는데.. 이게 최적의 방법은 아닐 거 같다.

 

 

그래도 작동은 잘 한다!!!

 

다음에는 댓글 수정 및 삭제 기능을 넣어봐야겠다.

댓글