본문 바로가기
따라 공부하기/PHP게시판 따라하기

[PHP+MySQL]게시판 만들기 9 - 파일 업로드

by DawIT 2020. 12. 8.
320x100

이 글은 이곳을 참고하여 쓰여졌습니다.

 

오늘은 파일 업로드 기능을 구현해보려고 한다.

 

먼저 board 테이블에 file칼럼을 추가해준다.

 

 

속성은 NOT NULL 이 들어가 있다.

 

그리고 write.php를 수정해준다.

 

 

write.php에서 수정해줄 곳은 크게 두 군데이다. 일단 enctype에 multipart/form-data를 줌으로써 기존 post방식보다 더 큰 용량을 전송할 수 있다고 한다. 그리고 in_file div를 새로 추가해 준다.

 

write_ok.php는 더 많은 수정이 필요하다.

 

<?php

include $_SERVER['DOCUMENT_ROOT']."/BBS/db.php";
$date = date('Y-m-d');
$userpw = password_hash($_POST['pw'], PASSWORD_DEFAULT);
if(isset($_POST['lockpost'])){
	$lo_post = '1';
}else{
	$lo_post = '0';
}

$tmpfile =  $_FILES['b_file']['tmp_name'];
$o_name = $_FILES['b_file']['name'];
$filename = iconv("UTF-8", "EUC-KR",$_FILES['b_file']['name']);
$folder = "../../upload/".$filename;
move_uploaded_file($tmpfile,$folder);

$sql = query("insert into board(name,pw,title,content,date,lock_post,file) 
values('".$_POST['name']."','".$userpw."','".$_POST['title']."','".$_POST['content']."','".$date."','".$lo_post."','".$o_name."')");
?>

<script type="text/javascript">alert("글쓰기 완료되었습니다.");</script>
<meta http-equiv="refresh" content="0 url=/BBS/" />

 

$tmpfile 과 $o_name 변수에 각각 임시 파일명과 원래 파일명을 저장하고, iconv함수를 사용하여 한글 파일명이라도 깨지지 않도록 보호해준다. 그리고 $folder 변수에 경로에 주의하면서 $filename변수를 넣어주면 된다.

 

 

read.php에도 user_info 태그 아래의 적당한 곳에 파일 다운로드를 위한 코드를 작성해준다.

 

이렇게 하고 게시판을 새로고침 하고 새로운 글을 작성한다.

 

 

내용을 대충 작성하고 테스트용 이미지 파일을 하나 업로드 한뒤에 글을 작성한다.

 

 

그러면 글을 작성 완료하는 순간 지정한 upload 폴더에 업로드한 SQL Query.png 파일이 업로드된다.

 

 

이제 게시판의 해당 글로 돌아가서 파일명을 클릭하면 정상적으로 파일이 다운로드 된다.

 

다음에는 새글 알림 기능을 추가해 봐야겠다.

댓글