10. PHP 게시판 만들기, delete 제작 2

2015. 4. 13. 23:22
저자 : Kurien

주의: 본 게시판은 보안을 생각하지 않고 만들어졌으므로 실제로 사용되어서는 안되는 코드입니다.

공부할 때 게시판이 이처럼 동작한다는 정도로만 이해해주세요.


일 때문에 피곤함을 핑계로... 업데이트가 조금 늦었네요 ㅠ

이번 시간에는 delete_update.php에 대해서 알아보겠습니다.


201504010_project.zip


파일은 지난번과 동일합니다.


바로 코드로 넘어가겠습니다.


<?php

require_once("../dbconfig.php");


//$_POST['bno']이 있을 때만 $bno 선언

if(isset($_POST['bno'])) {

$bNo = $_POST['bno'];

}


$bPassword = $_POST['bPassword'];


//글 삭제

if(isset($bNo)) {

//삭제 할 글의 비밀번호가 입력된 비밀번호와 맞는지 체크

$sql = 'select count(b_password) as cnt from board_free where b_password=password("' . $bPassword . '") and b_no = ' . $bNo;

$result = $db->query($sql);

$row = $result->fetch_assoc();

//비밀번호가 맞다면 삭제 쿼리 작성

if($row['cnt']) {

$sql = 'delete from board_free where b_no = ' . $bNo;

//틀리다면 메시지 출력 후 이전화면으로

} else {

$msg = '비밀번호가 맞지 않습니다.';    

?>

<script>

alert("<?php echo $msg?>");

history.back();

</script>

<?php

exit;

}

}


$result = $db->query($sql);

//쿼리가 정상 실행 됐다면,

if($result) {

$msg = '정상적으로 글이 삭제되었습니다.';

$replaceURL = './';

} else {

$msg = '글을 삭제하지 못했습니다.';

?>

<script>

alert("<?php echo $msg?>");

history.back();

</script>

<?php

exit;

}



?>

<script>

alert("<?php echo $msg?>");

location.replace("<?php echo $replaceURL?>");

</script>


이번 코드도 write_update.php와 비슷한 부분이 있을거라고 생각됩니다.

먼저 $_POST['bno']이 있는지 검사하고 있다면 $bNo 변수에 넣어줍니다.

그리고 delete.php에서 받아온 $_POST['bPassword']도 $bPassword 변수에 넣어주고,


$bNo이 있을 때 글 삭제 코드를 실행합니다.


먼저 삭제할 글의 비밀번호와 입력된 비밀번호가 맞는지 체크를 해야겠죠?


select문을 이용해서 b_password가 일치하는 값을 출력받습니다.

여기서 select문에 있는 count를 이용해서 조건에 일치하는 행이 몇 개나 존재하는 지를 알 수 있습니다.

어짜피 b_no은 primary key(기본키)이므로 1개거나, 0개일 수밖에 없습니다.


결과를 출력하고 만약 $row['cnt'](글의 수)가 1이라면 삭제 sql문을 작성합니다.


$row['cnt']가 0이라면 비밀번호가 맞지 않거나 글이 없다는 건데,

여기선 비밀번호가 맞지 않는다는 내용을 출력했네요.

추후에 수정하도록 하고, 비밀번호가 맞지 않거나 글이 없으면 메시지를 출력하고 이전 화면으로 돌아갑니다.


다시 돌아와서 글의 수가 1이였고, 삭제 sql문이 작성되었다면 query를 전송하는 $db->query($sql)을 만나게됩니다.

쿼리 전송 결과 값은 $result에 저장되고, 정상 실행 되었다면 $result = true,

실패되었다면 $result는 false가 되고 각각에 맞는 조건이 실행됩니다.


마지막으로 글 삭제에 성공 했다면 alert와 함께 location.replace가 실행되고, 목록 화면으로 나가지겠죠.


글 삭제 부분은 오히려 더 쉽다고 느껴집니다...만, 글 삭제를 하게 되면 복원을 하지 못하는 만큼 중요하기도 한 부분입니다.
지금 당장은 문제가 없겠지만, 나중에 데이터가 쌓였을 때 작은 오류 하나로 모든 글이 사라지게 되면 문제가 생기는거죠.

어렵지 않으면서 가장 어려워 해야할 부분인 것 같습니다.

게시판의 현재 진행상황은 http://kurien.dothome.co.kr에서 확인하실 수 있구요.
지적할 점, 어려운 부분, 질문 등은 댓글에 남겨주시면 빠르게 답변해드리겠습니다.