먼저 게시판의 글을 보이려면 글쓰는 것을 만들었다.(wirte.php, write_ok.php)
<!-- write.php -->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title> 글쓰기 </title>
<style>
button{
background-color: black;
color: white;
}
table {
border-collapse: collapse;
border-spacing: 1px;
border: 1px solid #fff;
}
th {
border-top: solid 3px #7c7c7c;
border-bottom: solid 1px #a0a0a0;
font-weight: bolder;
padding: 10px;
}
td {
padding: 10px;
border-bottom: solid 2px #a0a0a0;
}
</style>
</head>
<body>
<h1 align=center> 글쓰기 </h1>
<hr/>
<form method = "POST" action="write_ok.php">
<table>
<tr>
<td>제목 : </td>
<td><input type = text name = title size =90 placeholder="제목을 입력하시오"required></td>
</tr>
<tr>
<td>내용 : </td>
<td><textarea name = content cols=85 row=15 plcaeholder="내용을 입력하시오"required></textarea></td>
</tr>
<tr>
<td>파일업로드 : </td>
<td><input type= file name=file> </td>
</tr>
</table>
<br>
<button type="submit" align=center> 작성 </button>
</form>
</body>
</html>
<!-- write_ok -->
<?php
session_start();
include('db.php');
if (!isset($_SESSION['username'])) {
echo "<script>alert('로그인 후 이용해주세요.'); location.href='login.php';</script>";
exit();
}
$useranme = $_SESSION['username'];
$title = $_POST['title'];
$content = $_POST['content'];
$file_name = null;
if (empty($title) || empty($content)) {
echo "<script>alert('제목과 내용을 모두 입력해주세요.'); history.back();</script>";
exit();
}
if (isset($_FILES['file']) && $_FILES['file']['error'] === UPLOAD_ERR_OK) {
$upload_dir = 'uploads/';
if (!is_dir($upload_dir)) {
mkdir($upload_dir, 0777, true);
}
$file_tmp = $_FILES['file']['tmp_name'];
$file_name = basename($_FILES['file']['name']);
$file_path = $upload_dir . $file_name;
if (!move_uploaded_file($file_tmp, $file_path)) {
echo "<script>alert('파일 업로드 중 오류가 발생했습니다.'); history.back();</script>";
exit();
}
}
$stmt = $db->prepare("INSERT INTO posts (username, title, content, file_name, created) VALUES (?, ?, ?, ?, NOW())");
if ($stmt->execute([$username, $title, $content, $file_name,])) {
echo "<script>alert('글 작성이 완료되었습니다.'); location.href='index.php';</script>";
} else {
echo "<script>alert('글 작성 중 오류가 발생했습니다. 다시 시도해주세요.'); history.back();</script>";
}
?>
wirte.php는 로그인과 메인화면에 썻던 코드를 비슷하게 만들었으며 write_ok.php도 또한 파일 업로드에 관한 코드는 뺴고는 ok.php와 비슷한 원리로 생각하면서 작성하였다.
파일업로드는 따로 파일을 넣는 디렉토리를 만들어서 보관하는 형식으로 했다.
글을 쓰면 다음과 같이 생성된 것을 확인할 수 있다.
이제 글은 쓴것을 보는 파일을 만들어보자(view.php)
<?php
session_start();
include('db.php');
$post_id = $_GET['id'];
if (!$post_id) {
echo "<script>alert('잘못된 접근입니다.'); location.href='index.php';</script>";
exit();
}
$stmt = $db->prepare("SELECT * FROM posts WHERE id = ?");
$stmt->execute([$post_id]);
$post = $stmt->fetch();
if (!$post) {
echo "<script>alert('존재하지 않는 게시글입니다.'); location.href='index.php';</script>";
exit();
}
?>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<title>게시글 보기</title>
<style>
body {
font-family: Arial, sans-serif;
margin: 20px;
}
.container {
width: 80%;
margin: auto;
border: 1px solid #ddd;
padding: 20px;
border-radius: 5px;
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
}
.title {
font-size: 24px;
font-weight: bold;
margin-bottom: 20px;
}
.meta {
font-size: 14px;
color: #888;
margin-bottom: 20px;
}
.content {
font-size: 16px;
line-height: 1.6;
}
.file {
margin-top: 20px;
}
a {
color: black;
text-decoration: none;
}
a:hover {
text-decoration: underline;
}
button {
color: white;
background: black;
}
</style>
</head>
<body>
<div class="container">
<div class="title"><?php echo ($post['title']) ?></div>
<div class="meta">
작성자: <?php echo ($post['username']) ?>
작성일: <?php echo ($post['created']) ?>
</div>
<div class="content"><?php echo nl2br($post['content']) ?></div>
<div style="margin-top: 20px;">
<a href="index.php">목록으로</a>
<?php
if($post['username'] == $_SESSION['username']) { ?>
<button onclick="location.href='modify.php?id=<?php echo $post['id']; ?>'"> 수정</button></li>
<button onclick="location.href='delete.php?id=<?php echo $post['id']; ?>'"> 삭제</button></li>
<?php } ?>
</div>
</div>
</body>
</html>
글 보는 것은 결국 앞에 배워가면서 썼던 것을 재활용하는 느낌으로 작성하였다.
이제 글을 보면서 수정, 삭제하는 파일도 만들어보겠다.(modify.php, update.php, delete.php)
< !-- modify.php -->
<?php
include 'db.php';
$post_id = $_GET['id'];
if (!$post_id) {
echo "<script>alert('잘못된 접근입니다.'); location.href='index.php';</script>";
}
$stmt = $db->prepare("SELECT * FROM posts WHERE id = ?");
$stmt->execute([$post_id]);
$post = $stmt->fetch();
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title> 게시판 수정 </title>
</head>
<body>
<h1>게시글 수정</h1>
<form method="POST" action="update.php">
<input type="hidden" name="id" value="<?= $post['id'] ?>">
<p>
제목: <input type="text" name="title" value="<?php echo ($post['title']) ?>" required>
</p>
<p>
내용: <textarea name="content" cols="80" rows="10" required><?php echo ($post['content']) ?></textarea>
</p>
<p>
파일 변경: <input type="file" name="file">
</p>
<button type="submit">수정</button>
</form>
</body>
</html>
<!-- update.php -->
<?php
include('db.php');
$post_id = $_POST['id'];
$title = $_POST['title'];
$content = $_POST['content'];
if (!$post_id || empty($title) || empty($content)) {
echo "<script>alert('빈칸을 채워주세요.'); location.href='modify.php?id=$post_id';</script>";
exit();
}
$stmt = $db->prepare("UPDATE posts SET title = ?, content = ? WHERE id = ?");
$stmt->execute([$title, $content, $post_id]);
echo "<script>alert('수정되었습니다.'); location.href='view.php?id=$post_id';</script>";
?>
<!-- delete.php -->
<?php
include('db.php');
$post_id = $_GET['id'];
if (!$post_id) {
echo "<script>alert('잘못된 접근입니다.'); location.href='index.php';</script>";
}
$stmt = $db->prepare("DELETE FROM posts WHERE id = ?");
$stmt->execute([$post_id]);
echo "<script>alert('삭제되었습니다.'); location.href='index.php';</script>";
?>
'web hacking(Knockon Bootcamp)' 카테고리의 다른 글
[3주차 TIL] KnockOn Bootcamp 게시판 만들기(메인화면, 회원가입, 로그인) (0) | 2024.12.23 |
---|---|
[2주차 TIL] KnockOn Bootcamp PHP (0) | 2024.12.16 |
[2주차 TIL] KnockOn Bootcamp MYSQL (0) | 2024.12.16 |
[2주차 TIL] KnockOn Bootcamp Apache (0) | 2024.12.15 |
[2주차 TIL] KnockOn Bootcamp JavaScript (0) | 2024.12.13 |