project

[웹게시판] (14) 게시글 수정 등록(modify_action.php)

cheda 2022. 1. 17. 17:47

게시글 수정내용 등록

modify_action.php 파일은 사용자가 입력한 게시글 수정한 내용을 board_db에 업데이트한다.

modify_action.php
view.php: 수정한 내용 반영

 

modify_action.php

<?php
    $connect = mysqli_connect("localhost", "board_user", "password", "board_db") or die ("connect fail");
    $number = $_POST[number];
    $title = $_POST[title];
    $content = $_POST[content];
    $query = "update board set title='$title', content='$content' where number=$number";
    $result = $connect->query($query);

    // ##UPDATE##
    $tmpfile = $_FILES['upfile']['tmp_name'];
    $f_name = iconv("UTF-8", "EUC-KR", $_FILES['upfile']['name']);

    if($f_name != '') {  // 파일이 업로드 되었을 경우

        $target_dir = "up/".$f_name; // 업로드한 파일이 이동될 수 있게 폴더 경로지정, $upfil_name변수로 업로드파일 이름을 가져온다.        

        // 업로드 금지 파일 식별: 파일 확장자가 html, htm, php, inc인 경우에 업로드 불가
        $file_text = explode(".", $f_name);
        $extension = $file_text[sizeof($fname)-1];
        /*
        if( !strcmp($extension, "html") ||
            !strcmp($extension, "htm") ||
            !strcmp($extension, "php") ||
            !strcmp($extension, "inc") )
        {
                $msg = "업로드가 금지된 파일입니다.";
        }
        */

        // 동일한 파일이 있는지 확인 (move_uploaded_file 함수는 동일한 이름의 파일이 있을 경우 덮어쓴다)
        if (file_exists($target_dir)) {
                $msg = "동일한 파일이 있습니다.";
        }

        // 지정된 디렉토리에 파일을 저장
        if (!move_uploaded_file($tmpfile, $target_dir)) {  // false일 경우
                $msg = "파일 저장 실패";
        }

        $connect->query("update board set file_dir_name='$target_dir', file_name='$f_name' where number='$number'");
    }
    // ##UPDATE## END


    if($result) {
?>
        <script>
            alert("수정되었습니다.");
            location.replace("./view.php?number=<?=$number?>");
        </script>
<?php    }
    else {
        echo "fail";
    }
?>

(1)  DB에 연결 / 사용자 입력값 변수에 저장

게시글을 저장하고 있는 board_db에 board_user 사용자로 연결한다.

POST 메소드를 통해 전달받은 수정할 게시글 number, 수정된 제목, 수정된 내용, 수정된 첨부파일을 각 변수에 저장한다.

PHP 함수, 변수
mysqli_connect() / $_POST
  • (생략: index.php에서 설명)

 

(2) DB에 수정된 내용 반영

MySQL 질의문
UPDATE board SET title='$title', content='$content' WHERE number=$number
  • update구문과 where 구문으로 데이터 내용을 수정한다.

 

PHP 함수, 변수
query()
  • (생략: index.php에서 설명)

 

(3) 파일을 첨부한 경우

$tmpfile 변수에 POST 메소드를 통해 전달받은 파일의 임시파일 이름을 저장한다.

$f_name변수에 UTF-8로 인코딩한 업로드 파일의 이름을 저장한다. 사용자가 파일을 첨부하지 않았다면 $f_name은 빈 값이 된다.

 

사용자가 첨부한 파일이 있는지 검사한 후, 있다면 파일이 저장될 경로를 $target_dir 변수에 저장하고, 업로드 금지 파일형식인지 또는 동일한 파일명을 가진 파일이 서버에 존재하는지 확인한 후 지정된 디렉토리에 파일을 저장한다.

PHP 함수, 변수
$_FILES  / explode() / file_exist() / move_uploaded_file()
  • (write.php에서 설명)

 

(4) 결과 알림 띄워주고 이전 페이지로 복귀

 


[ 참고한 블로그 ]

  1. [S_Writer의 IT NOTE] [PHP] 게시판 만들기(수정 및 삭제) #5