본문 바로가기
IT/PHP

PHP(11) 리뷰 수정, 삭제

by Sungjun_ 2020. 2. 19.

이번에는 리뷰 수정, 삭제 기능을 만들겠습니다.

(사진 수정, 삭제는 다음 글에서 진행하겠습니다.)

 

viewReview.php 파일에 아래와 같이 코드를 추가해줍시다.

<section>
        <div class="mainCon">
            <div class="viewTitle"><?= $review['title'] ?></div>
            <div class="viewInfo">
                <div class="viewName"><?= $review['name']?></div>
                <div class="viewTime"><?= $time?></div>
            </div>
            <div class="viewStory">
                <?= $review['story']?>
                <?php 
                    if(!$review['image']){

                    } else{
                        echo "<br><img src='image/$review[image]'></img>";
                    }
                ?>
            </div>
            <div class="viewBtn">
                <div><a href="review.php">목록으로</a></div>
                <?php if($review['userid'] != $_SESSION['userid']){
                    } else{
                ?>
                <div>
                <a href="reviewUpdate.php?no=<?= $review['no']?>">수정</a>
                <a href="board_process.php?mode=delete">삭제</a>
                </div>
                <?php } ?>
            </div>
        </div>
    </section>
/* css 파일 */
.viewBtn{
    display: flex;
    width: 50%;
    margin-top: 20px;
    margin-left: 350px;
    flex-direction: row;
    justify-content: space-between;
}

/* viewBtn쪽을 수정했습니다. */

목록으로 돌아가는 버튼쪽에 수정, 삭제 추가해줬습니다.

그리고 리뷰를 작성한 사람이 아니면 수정, 삭제 버튼이 보이지 않게했습니다.

또한, 수정시 게시글의 no 값을 reviewUpdate 파일로 넘겨줍니다.

 

먼저 수정 기능부터 하겠습니다. board 폴더 안에 reviewUpdate.php 파일을 만들어줍니다.

<?php
    require_once("../db/db.php");
    session_start();

    $no = $_GET['no'];

    $sql = $db -> prepare("SELECT * FROM review WHERE no=:no");
    $sql -> bindParam("no",$no);
    $sql -> execute();
    $review = $sql -> fetch();

    if($review['userid'] != $_SESSION['userid']){
        errMsg('수정 권한이 없습니다.');
    }

?>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="../css/default.css">
    <link rel="stylesheet" href="../css/style.css?ver=21">
    <title>Sung's 영화 리뷰</title>
</head>
<body>
    <header>
        <nav id="navBar">
            <div class="navBarCon">
                <div class="navBarleft">
                    Sung's 영화 리뷰
                </div>
                <div class="navBarItem">
                    <ul>
                        <a href="../main.php"><li>홈으로</li></a>
                        <a href="review.php"><li>리뷰 보기</li></a>
                    </ul>
                </div>
                <div class="navBarRight">
                    <div class="navBarLogin">
                        <?php if(!isset($_SESSION['userid'])){
                            echo '<a href="../member/login.php">로그인</a>';
                        } else {
                        echo '<div class="helloUser">'.$_SESSION['name'].'님 환영합니다.</div>';
                        echo '<div class="outAndUpdate"><a href="../member/member_process.php?mode=logout">로그아웃</a> | 
                        <a href="../member/update.php">정보수정</a>
                        </div>';
                        }
                        ?>   
                    </div>
                </div>
            </div>
        </nav>
    </header>
    <section>
        <div class="mainCon">
            <div class="writeTitle">리뷰 수정</div>
            <form class="writeForm" action="board_process.php?mode=update" method="post" enctype= "multipart/form-data">
                <input type="hidden" name="id" value="review">
                <input type="hidden" name="no" value="<?= $review['no']?>">
                <input type="hidden" name="userid" value="<?= $_SESSION['userid'] ?>">
                <input type="hidden" name="name" value="<?= $_SESSION['name'] ?>">
                <p><input class="writeTypeText" type="text" name="title" size="50" value="<?= $review['title']?>" required></p>
                <textarea class="writeTextarea" name="story" required><?= $review['story']?></textarea>
                <?php if(!$review['image']){
                    } else{ ?>
                        <?= $review['image']?><br>
                <?php } ?>
                <input type="file" name="image" value="<?=$review['image']?>">
                <div class="imageExp">jpg, jpeg, gif, png 파일만 사용가능 </div>
                <div class="writeBtn">
                <input type="submit" value="작성">&nbsp;&nbsp;&nbsp;&nbsp;
                <input type="button" value="취소" onclick="history.back(1)">
                </div>
            </form>
        </div>
    </section>
    <footer></footer>
</body>
</html>

위쪽에서 셀렉문을 이용해 리뷰의 정보를 받아옵니다.

그리고 if문을 사용해 작성자와 로그인한 사람의 정보가 다르면 수정할 수 없게 합니다.

 

textarea 아래쪽에 있는 if 문은 현재 저장된 이미지 파일명을 보여주는 곳이고

나중에 사진 수정, 삭제시 이용할 것입니다.

 

board_process.php에 update 케이스를 만들어줍시다.

case 'update':
            $no = $_POST['no'];
            $newTitle = $_POST['title'];
            $newStory = $_POST['story'];

            $sql = $db -> prepare("UPDATE review SET title=:title, story=:story WHERE no=:no ");
            $sql -> bindParam("title",$newTitle);
            $sql -> bindParam("story",$newStory);
            $sql -> bindParam("no",$no);
            $sql -> execute();
            header("location:review.php");
        break;

이렇게 입력해줍니다.

 

이제 작동하는지 실험해봅시다.

이 리뷰의 작성 아이디는 sungs고 현재 로그인한 아이디는 house입니다.

수정, 삭제 버튼이 보이지 않는 것을 볼 수 있습니다.

 

아이디가 일치해 오른쪽 하단에 수정, 삭제 버튼이 보이는 것을 확인할 수 있습니다.

 

수정버튼을 누르면

이렇게 창이 나옵니다.

수정을 해봅시다.

 

제대로 수정이 된 것을 확인 할 수 있습니다.

 

 

 

다음으로 삭제 기능입니다.

viewReview.php 부분을 조금 수정했습니다.

 

<?php
    require_once("../db/db.php");
    session_start();

    $no = $_GET['no'];
    $sql = $db -> prepare("SELECT * FROM review WHERE no=:no");
    $sql -> bindParam("no",$no);
    $sql -> execute();
    $review = $sql -> fetch();

    $time = DateTime::createFromFormat('Y-m-d H:i:s', $review['redate']);
    $time = date_format($time, 'Y-m-d');

?>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="../css/default.css">
    <link rel="stylesheet" href="../css/style.css?ver=22">
    <script>
        function confirmDel(text) {
            const selValue = confirm(text);
            if(selValue == true){
                location.href="board_process.php?mode=delete&no=<?= $review['no']?>";
            } else if(selValue == false){
                history.back(1);
            }
        }
    </script>
    <title>Sung's 영화 리뷰</title>
</head>
<body>
    <header>
        <nav id="navBar">
            <div class="navBarCon">
                <div class="navBarleft">
                    Sung's 영화 리뷰
                </div>
                <div class="navBarItem">
                    <ul>
                        <a href="../main.php"><li>홈으로</li></a>
                        <a href="review.php"><li>리뷰 보기</li></a>
                    </ul>
                </div>
                <div class="navBarRight">
                    <div class="navBarLogin">
                        <?php if(!isset($_SESSION['userid'])){
                            echo '<a href="../member/login.php">로그인</a>';
                        } else {
                        echo '<div class="helloUser">'.$_SESSION['name'].'님 환영합니다.</div>';
                        echo '<div class="outAndUpdate"><a href="../member/member_process.php?mode=logout">로그아웃</a> | 
                        <a href="../member/update.php">정보수정</a>
                        </div>';
                        }
                        ?>   
                    </div>
                </div>
            </div>
        </nav>
    </header>
    <section>
        <div class="mainCon">
            <div class="viewTitle"><?= $review['title'] ?></div>
            <div class="viewInfo">
                <div class="viewName"><?= $review['name']?></div>
                <div class="viewTime"><?= $time?></div>
            </div>
            <div class="viewStory">
                <?= $review['story']?>
                <?php 
                    if(!$review['image']){

                    } else{
                        echo "<br><img src='image/$review[image]'></img>";
                    }
                ?>
            </div>
            <div class="viewBtn">
                <div><a href="review.php">목록으로</a></div>
                <?php if($review['userid'] != $_SESSION['userid']){
                    } else{
                ?>
                <div>
                <a href="reviewUpdate.php?no=<?= $review['no']?>">수정</a>
                <a href="#" onclick="confirmDel('정말로 삭제하시겠습니까?')">삭제</a>
                </div>
                <?php } ?>
            </div>
        </div>
    </section>
    <footer></footer>
</body>
</html>

head 부분에 script를 추가해 삭제 버튼을 눌렀을 때, 확인 or 취소 버튼이 나오게했고

확인을 눌렀을 때는 삭제를, 취소버튼을 눌렀을 때는 뒤로가게 했습니다.

 

board_process.php에 delete 케이스를 만들어줍시다.

case 'delete':
            $no = $_GET['no'];

            $sql = $db -> prepare("DELETE FROM review WHERE no=:no");
            $sql -> bindParam("no",$no);
            $sql -> execute();

            header("location:review.php");
        break;

이제 작동하는지 확인해보겠습니다.

삭제 버튼을 누르면 위와 같이 확인 창이 나옵니다.

 

취소 버튼을 누르면

리뷰 목록으로 돌아옵니다.

 

확인 버튼을 누르면

글이 삭제 된 것을 확인할 수 있습니다.

 

 

 

이것으로 마치겠습니다.
# Visual Studio Code, Xampp, MySQL Workbench 환경에서 작성된 코드입니다.

'IT > PHP' 카테고리의 다른 글

PHP/Laravel(2) welcome.blade.php  (0) 2020.02.19
PHP/Laravel(1) 설치하기  (0) 2020.02.19
PHP(10) 이미지 업로드  (3) 2020.02.17
PHP(9) 리뷰 보기  (0) 2020.02.17
PHP(8) 리뷰 작성하기  (0) 2020.02.13

댓글