PHP + MySQL 게시판 제작 - 게시글 작성 (+파일 업로드)

2026. 2. 16. 16:32·모의해킹

게시판을 보려면 게시글이 있어야지!

결과

이름은 세션값으로 끌고온다!!

제목하고 내용, 첨부파일이 있다면 첨부파일까지 다 DB로 넘기기

 

그 전에 파일 업로드를 위한 테이블 먼저 생성

CREATE TABLE file_upload (
file_id VARCHAR(255) PRIMARY KEY,
file_name VARCHAR(255) NOT NULL,
file_save VARCHAR(255) NOT NULL,
up_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP);

file id는

게시물 작성할때 다른 파일을 중복된 이름으로 저장하면

기존에 저장돼있던 파일 위에 덮어씌워지기때문에 그런 오류를 방지하기 위해

랜덤값으로 이름을 저장하는데 그 이름을 저장하기 위한 컬럼이구

 

file name은

작성자가 게시할때 올린 첨부파일명을 저장하기 위한 컬럼

 

file save는 파일이 저장되는 경로명을 저장하기 위한 컬럼이다!

 

 

[ write.php ]

<?php
include 'lib.php';
?>

<!DOCTYPE html>
<html>
	<head>
		<meta charset='UTF-8'>
		<title>글쓰기</title>
	</head>
	
	<body>
		<form name="board" method="POST" action="writeok.php" enctype="multipart/form-data">
		<table border=1>
		<tbody>
			<tr>
				<td>이름</td>
				<td>
					<?php 
						echo $_SESSION['name'];
					?>
				</td>
			</tr>
			<?php
			if ($_SESSION['name'] == '관리자') { ?>
			<tr>
				<td>구분</td>
				<td>
					<select name="type">
						<option value="notice">공지사항</option>
						<option value="content">일반글</option>
					</select>
				</td>
			</tr>
			<?php } else {} ?>
			<tr>
				<td>제목</td>
				<td><input type="text" name="title" style="width:700px"></td>
			</tr>
			<tr>
				<td>내용</td>
				<td><textarea name="content" style="width:700px; height: 500px;"></textarea></td>
			</tr>
			<tr>
				<td>파일</td>
				<td><input type="file" name="upload_file"></td>
			</tr>
		</tbody>
		</table><br>
		<input type="submit" value="저장하기">
		</form>
	</body>
</html>

 아 그리고

작성자가 '관리자'일 때는

공지사항으로 작성할건지, 일반글로 작성할건지 선택하는 것두 있슨..

 

요로케요

(이건 관리자일때만 뜸)

암튼 이렇게 글을 작성하면 

이 글을 DB로 넘겨줘야겠죵

 

[ writeok.php ]

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<?php
include 'lib.php';
	
	$title = $_POST['title'];
	$content = $_POST['content'];
	$day = date("Y.m.d");
	$name = $_SESSION['name'];
	$type = isset($_POST['type']) ? $_POST['type'] : 'content';
	$notice = ($type == 'notice') ? 1 : 0;
	$file_id = NULL;

	if ($_FILES['upload_file'] != NULL ){
		$tmp_name = $_FILES['upload_file']['tmp_name'];
		$filename = $_FILES['upload_file']['name'];
		$error = $_FILES['upload_file']['error'];
		
		if ($error == 0) {
			
			$e = substr($filename, strrpos($filename, '.') + 1);
			$file_id = md5(uniqid(rand(), true));
			$path = $file_id.'.'.$e;
			
			$folder = "./uploads/$path";
			move_uploaded_file($tmp_name, $folder);
			
			mysqli_query($conn, 
			"INSERT INTO file_upload (file_id, file_name, file_save, up_time, notice) VALUES ('$file_id', '$filename', '$path', now(), '$notice');");
	}}
	
	$q = "INSERT INTO board (name, title, content, day, count, file_id, notice) VALUES ('$name', '$title', '$content', '$day', 0, '$file_id', '$notice')";		
	$result = mysqli_query($conn, $q);
	
	if ($result) {
		echo "<script>alert('글 작성 성공!'); window.location.href='board.php';</script>";
		} else {
		echo "글 작성 오류: ".mysqli_error($conn);
		}
		
	mysqli_close($conn);
?>
</body>
</html>

이게 진짜 어려웠는데

계속 맞게 한거같은데 저장되는 파일명이 $filename 으로 되는거임

보니까

$folder = './uploads/$path';

로 해서.. 안되는거였당

싱글쿼터는 변수 해석 안하고 문자열 그대로 출력하고,

더블쿼터는 변수를 해석해서 변수 치환을 해준다고함

큰따옴표로 바꿔주니까 파일 다운로드할때 파일명이 정상적으로 들어왔다

 

글고 아무리 공지사항으로 글을 작성해도 content로 넘어가!!!!!!!!!!!!

알고보니 그 전에는 if문으로
file이 있으면..~ "INSERT INTO 어쩌구" else 

또 if 써서 공지사항이면~ "INSERT INTO 어쩌구...."

이렇게했더니 코드가 자꾸 꼬여서 file있을때의 sql 쿼리에는 notice 컬럼 안넣구

또 공지사항이 아닐때의 쿼리에도 notice 컬럼 빼먹고 이런식으로 복잡해져버려서ㅜㅜ

 

지피티의 도움을 받아서 삼항연산자 썼더니 코드도 간단해지구,,, 그랬어요

 

따봉 지피티야 고맙다~

'모의해킹' 카테고리의 다른 글

PHP + MySQL 게시판 제작 - 파일 다운로드  (0) 2026.02.16
PHP + MySQL 게시판 제작 - 게시글 조회  (0) 2026.02.16
PHP + MySQL 게시판 제작 - 게시판 검색 기능  (0) 2026.02.16
PHP + MySQL 게시판 제작 - 게시판 리스트  (0) 2026.02.16
PHP + MySQL 게시판 제작 - 로그인 & 로그아웃  (0) 2026.02.16
'모의해킹' 카테고리의 다른 글
  • PHP + MySQL 게시판 제작 - 파일 다운로드
  • PHP + MySQL 게시판 제작 - 게시글 조회
  • PHP + MySQL 게시판 제작 - 게시판 검색 기능
  • PHP + MySQL 게시판 제작 - 게시판 리스트
songtoy
songtoy
  • songtoy
    ㅎㅇ
    songtoy
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 모의해킹
  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
songtoy
PHP + MySQL 게시판 제작 - 게시글 작성 (+파일 업로드)
상단으로

티스토리툴바