PHP로 간단한 방명록을 만드는 소스를 제공해드리겠습니다. 이 소스는 사용자가 글을 남기고, 글을 DB에 저장한 후, 저장된 글을 불러오는 방식입니다. MySQL을 사용하여 데이터를 관리하는 예시를 들어보겠습니다.
### 1. **데이터베이스 준비**
먼저 MySQL에 방명록 테이블을 생성합니다. `guestbook`이라는 데이터베이스를 생성하고, 그 안에 `messages` 테이블을 만듭니다.
```sql
CREATE DATABASE guestbook;
USE guestbook;
CREATE TABLE messages (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
message TEXT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
```
### 2. **방명록 작성 페이지 (form.php)**
이 페이지에서는 사용자가 이름과 메시지를 입력할 수 있는 폼을 작성합니다.
```php
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>방명록</title>
</head>
<body>
<h2>방명록에 글 남기기</h2>
<form action="submit.php" method="POST">
<label for="name">이름:</label><br>
<input type="text" id="name" name="name" required><br><br>
<label for="message">메시지:</label><br>
<textarea id="message" name="message" required></textarea><br><br>
<input type="submit" value="제출">
</form>
<hr>
<h2>방명록 글 목록</h2>
<?php
// 방명록 글 목록 출력 (submit.php 파일에서 데이터를 가져옴)
include 'list.php';
?>
</body>
</html>
```
### 3. **글 제출 처리 페이지 (submit.php)**
사용자가 입력한 이름과 메시지를 데이터베이스에 저장하는 페이지입니다.
```php
<?php
$host = 'localhost';
$user = 'root';
$password = ''; // DB 비밀번호
$dbname = 'guestbook';
$conn = new mysqli($host, $user, $password, $dbname);
// 연결 오류 체크
if ($conn->connect_error) {
die("연결 실패: " . $conn->connect_error);
}
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$name = $_POST['name'];
$message = $_POST['message'];
$sql = "INSERT INTO messages (name, message) VALUES ('$name', '$message')";
if ($conn->query($sql) === TRUE) {
echo "새 메시지가 방명록에 추가되었습니다!";
} else {
echo "오류: " . $sql . "<br>" . $conn->error;
}
}
$conn->close();
header('Location: form.php'); // 제출 후 방명록 페이지로 리디렉션
exit;
?>
```
### 4. **글 목록 출력 페이지 (list.php)**
방명록에 저장된 메시지를 불러와서 출력하는 페이지입니다.
```php
<?php
$host = 'localhost';
$user = 'root';
$password = ''; // DB 비밀번호
$dbname = 'guestbook';
$conn = new mysqli($host, $user, $password, $dbname);
// 연결 오류 체크
if ($conn->connect_error) {
die("연결 실패: " . $conn->connect_error);
}
$sql = "SELECT * FROM messages ORDER BY created_at DESC";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo "<p><strong>" . htmlspecialchars($row['name']) . "</strong> (" . $row['created_at'] . ")<br>" . nl2br(htmlspecialchars($row['message'])) . "</p><hr>";
}
} else {
echo "아직 방명록에 남긴 글이 없습니다.";
}
$conn->close();
?>
```
### 5. **방명록 사용 예시**
- `form.php` 파일에서 이름과 메시지를 입력하고 제출하면, `submit.php`가 해당 데이터를 `messages` 테이블에 저장합니다.
- 저장된 메시지는 `list.php`에서 불러와 방명록에 출력됩니다.
### 보안 사항:
- **SQL 인젝션**을 방지하기 위해 **prepared statements**를 사용하는 것이 좋습니다. 현재 코드에서는 SQL 인젝션 취약점이 있을 수 있습니다.
- **XSS(Cross-site Scripting)**를 방지하기 위해 `htmlspecialchars()`를 사용하여 출력할 때 HTML 태그가 실행되지 않도록 처리합니다.
### 6. **결과**
사용자가 글을 남기면, 방명록에 저장된 메시지들이 출력되고, 그 이후에도 추가된 글들이 계속 보입니다. 이 코드를 기반으로 추가적인 기능(예: 댓글 기능, 관리자 모드 등)을 더 추가할 수 있습니다.