티스토리 뷰

MongoDB

[MongoDB] php MongoDB update / delete

hiolivia 2022. 5. 11. 12:42

CRUD 중에 update / delete를 구현해 보겠습니다.

 

php MongoDB 연동 / select 👇

https://hiolivia.tistory.com/52

 

insert 👇

https://hiolivia.tistory.com/53

 

index.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">
    <title>INDEX</title>
    <style>
        table {
            border-collapse: collapse;
        }

        table tr td {
            border: 1px solid #ccc;
        }
    </style>
</head>

<body>
    <table>
        <tr>
            <td>index</td>
            <td>title</td>
            <td>content</td>
            <td>delete</td>
            <td>update</td>
        </tr>
    </table>

    <div id="input">
        <p><input type="text" name="title" id="title" placeholder="title"></p>
        <p><textarea name="content" name="content" id="content" placeholder="content"></textarea></p>
        <p><input type="submit" value="insert" id='insert_btn' onclick="insert()"></p>
        <p><input type="submit" value="update" id='update_btn' onclick="update()" style="display: none;"></p>
    </div>


</body>

<script src="jquery.min.js"></script>
<script>
    let index;

    function beforeUpdate(t) {
        $("#insert_btn").hide();
        $("#update_btn").show();

        let parent = $(t).parent();
        index = parseInt($(parent).first().text());

        let title = $(parent).children().eq(1).text();
        let content = $(parent).children().eq(2).text();

        $("#title").val(title);
        $("#content").val(content);
    }

    function update() {
        $.ajax({
            type: 'POST',
            dataType: 'text',
            url: 'update.php',
            data: {
                num: index,
                title: $("#title").val(),
                content: $("#content").val()
            },
            success: function(data) {
                location.reload();
            }
        })
    }

    function delete_(t) {
        $.ajax({
            type: 'POST',
            dataType: 'text',
            url: 'delete.php',
            data: {
                num: $(t).parent().first().text()
            },
            success: function(data) {
                location.reload();
            }
        })
    }


    function insert() {
        $.ajax({
            type: 'POST',
            dataType: 'text',
            url: 'insert.php',
            data: {
                title: $("#title").val(),
                content: $("#content").val()
            },
            success: function(data) {
                location.reload();
            }
        })
    }


    function select() {
        $.ajax({
            type: 'POST',
            dataType: 'json',
            url: 'select.php',
            data: {},
            success: function(data) {

                for (var i in data) {
                    $("table").append("<tr><td>" + data[i].num + "</td><td>" + data[i].title + "</td><td>" + data[i].content + "</td><td id='delete' onclick='delete_(this)'>삭제</td><td id='update' onclick='beforeUpdate(this)'>수정</td></tr>");
                }

            }
        })
    }
    select();
</script>

</html>

수정 클릭 시 insert 버튼은 가려주고 update 버튼을 보여주게 됩니다. 해당 데이터를 가져와서 input 창의 값으로 넣어주고 수정한 값을 update.php 파일로 전송합니다.

삭제 클릭 시에도 삭제할 데이터를 delete.php 파일로 전송합니다.

 

update.php

<?php
    include("mongo.php");
    
    $num = (int)$_POST['num'];
    $title = $_POST['title'];
    $content = $_POST['content'];
    
    if (!empty($num)) {
        $bulk = new MongoDB\Driver\BulkWrite;
        $bulk->update(
            ['num' => $num],
            ['$set' => ['title' => $title, 'content' => $content]],
            ['multi' => false, 'upsert' => false]
            //multi: 조건에 따라 여러 개의 데이터를 수정
            //upsert: 해당 데이터가 존재하지 않을 시 새로 생성
        );
    
        $result = $con->executeBulkWrite('db00.topic', $bulk);
}

받아온 수정할 데이터를 저장합니다.

 

delete.php

<?php 
    include("mongo.php");

    $num = (int)$_POST['num'];

    $bulk = new MongoDB\Driver\BulkWrite;
    $bulk->delete(['num' => $num]);
    $result = $con->executeBulkWrite('db00.topic', $bulk);
?>

받아온 삭제할 데이터를 삭제시킵니다.

 

여기서 값이 맞게 들어오는데 실행이 안된다면 타입을 꼭 확인하세요! 정확하게 하기 위해 (int)를 사용해 정수로 명시해주면 에러를 막을 수 있습니다.

 

이렇게 해서 MongoDB CURD를 완성해보았습니다! 이제 우리는 많은 것을 만들 준비가 되었어요!🎉🎉