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

Php로 웹 개발하기 : 게시판(8) - Update

by madevth 2021. 11. 20.
반응형

게시판의 주요 기능 CRUD 중 Create, Read, Delete는 모두 구현하였다. 이제 마지막 주요 기능인 Update를 구현해보자.

 

업데이트 기능의 흐름은 다음과 같다.

1. 삭제 기능과 마찬가지로 내가 작성한 글일 경우에만 수정 버튼을 띄워준다.

2. 수정 버튼을 클릭하면 update.php에서 글을 수정하는 페이지를 띄워준다.

3. update.php에서 글 수정 버튼을 누르면 board_update.php로 넘어가 MySQL과 연동하여 update를 한다.

수정은 생성(write.php - board_create.php)과 거의 비슷한 형태(update.php - board_update.php)로 구현할 것이다.

 

우선 read.php의 버튼 부분에 다음과 같이 수정 버튼을 추가해주자.

<?php
    session_start();
    if ($_SESSION['id'] == $username) {
        echo "<button class = 'writeBtn' onclick = \"location.href = 'update.php?id=$id'\">수정</button>";
        echo "<button class = 'writeBtn' onclick = \"location.href = 'board_delete.php?id=$id'\">삭제</button>";
    }
?>

 

[update.php]

<?php
    if(isset($_GET['id'])){
        $id = $_GET['id'];
        $sql = "SELECT * FROM board where id = {$id}";
        
        $conn = mysqli_connect('localhost', 'ID', 'PW', 'DBname');
        $result = mysqli_query($conn, $sql);

        $row = mysqli_fetch_array($result);
        $title = $row['title'];
        $content = $row['content'];
        mysqli_close($conn);
    }
?>

read.php과 똑같이 MySQL에 연결한 후 해당 ID의 title과 content를 받아온다.

 

<form action = "board_update.php" method = "post">
    <div class = "posting">
        <input class = "posting_title" name = "create_title" type = "text" value = "<?=$title?>" />
        <textarea class = "posting_contents" name = "create_body"><?=$content?></textarea>
        <input class = "writeBtn" type = "submit" value = "update">
    </div>
</form>

read.php의 HTML 부분과 똑같이 form을 생성하지만, form에 초기값 title과 content를 넣어둔다. (input은 value 값으로 넣어준다.) 인자는 board_update.php로 전달한다.

 

그런데 글을 수정하려면 id값도 알아야 한다. 기존에는 id를 get 방식으로 넘겼는데, post 방식으로는 어떻게 넘길까?

ajax를 사용하지 않으려면, form을 사용하되 input type을 hidden으로 주어 화면에 표시되지 않게 하면 POST 방식으로 넘길 수 있다.

<form action = "board_update.php" method = "post">
    <div class = "posting">
        <input name = "id" type = "hidden" value = "<?=$id?>"/>
        <input class = "posting_title" name = "update_title" type = "text" value = "<?=$title?>" />
        <textarea class = "posting_contents" name = "update_body"><?=$content?></textarea>
        <input class = "writeBtn" type = "submit" value = "update">
    </div>
</form>

 

test 계정으로 로그인한 뒤 수정이 잘 되는 것을 확인할 수 있다. 이제 board_update.php로 MySQL과 연동하여 실제 DB를 수정해보자.

 

[board_update.php]

<?php
    if(isset($_POST['update_title']) && isset($_POST['update_body']) && isset($_POST['id']) && isset($_POST['update_title']) != NULL && isset($_POST['update_body']) != NULL && isset($_POST['id']) != NULL){
        $id = $_POST['id'];
        $title = $_POST['update_title'];
        $content = $_POST['update_body'];
        
        $conn = mysqli_connect('localhost', 'ID', 'PW', 'DBname');
        $sql = "UPDATE board SET title = '$title', content = '$content' where id = '$id';";

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

update를 한 후 결과를 확인해보자.

화면과 DB 모두 잘 수정되었다.

추가로, 만약 DB의 날짜를 수정한 날짜로 바꾸고 싶다면 글 생성에서 구현했던 현재 날짜 구현 코드를 추가해서 같이 업데이트해주면 된다.

반응형

댓글