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

[PHP+MySQL]게시판 만들기 7 - 댓글 수정 및 삭제

by DawIT 2020. 12. 6.
320x100

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

 

오늘은 댓글 수정 및 삭제 기능을 추가해보려 한다.

 

먼저 저번에 추가해줬던 common.js에 댓글 수정과 삭제에 관한 코드를 작성해준다.

 

$(document).ready(function(){
	$(".dat_edit_bt").click(function(){
		/* dat_edit_bt클래스 클릭시 동작(댓글 수정) */
			var obj = $(this).closest(".dap_lo").find(".dat_edit");
			obj.dialog({
				modal:true,
				width:650,
				height:200,
				title:"댓글 수정"});
		});

	$(".dat_delete_bt").click(function(){
		/* dat_delete_bt클래스 클릭시 동작(댓글 삭제) */
		var obj = $(this).closest(".dap_lo").find(".dat_delete");
		obj.dialog({
			modal:true,
			width:400,
			title:"댓글 삭제확인"});
		});

	});

 

 

그 뒤, 댓글을 수정하기 위한 rep_modify_ok.php 를 작성한다.

 

<?php
include $_SERVER['DOCUMENT_ROOT']."/BBS/db.php";
$rno = $_POST['rno'];//댓글번호
$sql = query("select * from reply where idx='".$rno."'"); //reply테이블에서 idx가 rno변수에 저장된 값을 찾음
$reply = $sql->fetch_array();

$bno = $_POST['b_no']; //게시글 번호
$sql2 = query("select * from board where idx='".$bno."'");//board테이블에서 idx가 bno변수에 저장된 값을 찾음
$board = $sql2->fetch_array();

$sql3 = query("update reply set content='".$_POST['content']."' where idx = '".$rno."'");//reply테이블의 idx가 rno변수에 저장된 값의 content를 선택해서 값 저장
?> 
<script type="text/javascript">alert('수정되었습니다.'); location.replace("/BBS/read.php?idx=<?php echo $bno; ?>");</script>

 

rep_modify_ok.php를 보면 이전에 작성한 modify_ok.php와 많이 유사한 것을 알 수 있다. 조금 바뀐 점이 있다면 댓글 번호를 따로 불러와서 사용한다는 점이다. 그 외 다른 코드들은 거의 유사하다.

 

그리고 삭제 기능을 위한 reply_delete.php를 작성한다.

 

<?php
include $_SERVER['DOCUMENT_ROOT']."/BBS/db.php";
$rno = $_POST['rno']; 
$sql = query("select * from reply where idx='".$rno."'");//reply테이블에서 idx가 rno변수에 저장된 값을 찾음
$reply = $sql->fetch_array();

$bno = $_POST['b_no'];
$sql2 = query("select * from board where idx='".$bno."'");//board테이블에서 idx가 bno변수에 저장된 값을 찾음
$board = $sql2->fetch_array();

$pwk = $_POST['pw'];
$bpw = $reply['pw'];

if(password_verify($pwk, $bpw)) 
	{
		$sql = query("delete from reply where idx='".$rno."'"); ?>
	<script type="text/javascript">alert('댓글이 삭제되었습니다.'); location.replace("/BBS/read.php?idx=<?php echo $board["idx"]; ?>");</script>
	<?php 
	}else{ ?>
		<script type="text/javascript">alert('비밀번호가 틀립니다');history.back();</script>
	<?php } ?>

 

reply_delete.php는 이전에 작성한 delete.php와는 좀 다르다. 아무래도 글의 idx와 댓글의 idx를 DB에서 각각 불러와야 하고, 댓글 작성시 사용했던 비밀번호와 지금 입력한 비밀번호가 같은지 대조도 해야 하기 때문이다.

 

이렇게 작성하고 게시판에 접속한다.

 

 

먼저 이 글의 댓글을 수정 하기위해 수정을 선택한다.

 

 

그러면 이렇게 댓글을 수정하기 위한 Form이 나오고, 비밀번호를 함께 입력해야 한다.

 

그런데 문제가 발생했다.

 

원래는 비밀번호가 다르면 수정이 되지 않아야 하는데 그대로 수정된다..

 

그래서 reply_modify_ok.php를 다음과 같이 수정했다.

 

<?php
include $_SERVER['DOCUMENT_ROOT']."/BBS/db.php";
$rno = $_POST['rno'];//댓글번호
$sql = query("select * from reply where idx='".$rno."'"); //reply테이블에서 idx가 rno변수에 저장된 값을 찾음
$reply = $sql->fetch_array();

$bno = $_POST['b_no']; //게시글 번호
$sql2 = query("select * from board where idx='".$bno."'");//board테이블에서 idx가 bno변수에 저장된 값을 찾음
$board = $sql2->fetch_array();

$input_pw = $_POST['pw'];
$db_pw = $reply['pw'];

// reply 테이블의 idx가 rno변수에 저장된 값의 content를 선택해서 값 저장
// 수정시 비밀번호 체크
if (password_verify($input_pw, $db_pw)) {
    $sql3 = query("UPDATE reply SET content='" . $_POST['content'] . "' WHERE idx = '" . $rno . "'"); ?>
    <script type="text/javascript">alert('수정되었습니다.');
    location.replace("/BBS/read.php?idx=<?php echo $bno; ?>");
    </script>
    <?php
    } else { ?>
    <script type="text/javascript">alert('비밀번호가 틀립니다');
    history.back();
    </script>
    <?php } ?>

 

이렇게 하고 다시 댓글 수정을 시도한다.

 

 

먼저 틀린 비밀번호로 수정을 시도할 시 비밀번호가 틀리다고 출력함과 동시에 수정이 되지 않는다.

 

 

그리고 알맞는 비밀번호를 통해 댓글을 수정할 시 수정되었다는 문구와 함께 정상적으로 댓글이 수정된다.

 

다음에는 이전에 JDBC를 통해서도 해봤던 페이징 기능을 구현해 봐야겠다.

댓글