본문 바로가기
PHP로 웹사이트 만들기

게시판 글 보기 페이지: PHP와 MySQL로 게시글 상세보기 구현하기

by blogfine 2025. 2. 13.

게시판 사이트에서 사용자가 게시글을 클릭하면 해당 게시글의 내용을 자세히 볼 수 있는 상세보기 페이지로 이동합니다. 이 페이지는 사용자가 게시글을 읽는 데 중요한 역할을 하며, 게시글의 제목, 내용, 작성자, 작성일 등 여러 정보를 표시합니다. 이번 글에서는 PHP와 MySQL을 사용하여 게시글 상세보기 페이지를 구현하는 방법을 설명하겠습니다.

게시글 상세보기 페이지의 필요성

게시판에서 각 게시글의 제목을 클릭하면 게시글의 세부 내용을 확인할 수 있는 페이지로 이동하는 기능은 사용자 경험을 높이는 중요한 요소입니다. 게시글 목록에서는 제목만 표시되고, 상세보기 페이지에서 해당 게시글의 모든 정보를 제공해야 사용자가 더 나은 정보를 얻을 수 있습니다. 게시글의 작성일, 작성자, 내용 등을 보여주는 것은 웹사이트의 유용성을 높이고 사용자 편의성을 강화합니다.

게시글 상세보기 페이지 구현하기

게시글 상세보기 페이지를 구현하려면 크게 두 가지 작업이 필요합니다.

  1. 게시글의 고유 ID를 URL로 전달받아 해당 게시글을 조회하는 SQL 쿼리 작성
  2. 게시글의 세부 정보를 화면에 출력하는 PHP 코드 작성

이제 각각의 작업을 단계별로 설명하겠습니다.

1. 게시글 ID를 URL로 전달받기

게시판에서 게시글을 클릭하면 해당 게시글의 고유 ID를 URL로 전달해야 합니다. 일반적으로 게시글 ID를 URL 파라미터로 전달하고, 이를 PHP에서 받아서 해당 게시글의 데이터를 조회합니다. 예를 들어, 게시글 목록에서 각 게시글의 제목에 링크를 걸어주고, 이 링크를 클릭하면 상세보기 페이지로 이동하도록 할 수 있습니다.

<?php
// 게시글 목록에서 제목에 링크 추가
$query = "SELECT post_id, title FROM posts ORDER BY created_at DESC";
$result = $conn->query($query);

while ($row = $result->fetch_assoc()) {
    echo "<a href='view_post.php?id=" . $row['post_id'] . "'>" . $row['title'] . "</a><br>";
}
?>

위 코드는 게시글 목록을 출력하면서 각 게시글의 제목을 클릭하면 해당 게시글의 ID를 URL 파라미터로 전달하는 링크를 생성합니다. 예를 들어, `view_post.php?id=1`와 같은 URL로 이동하면 게시글 ID가 1인 게시글의 상세정보를 조회할 수 있습니다.

2. 게시글 상세보기 페이지 구현하기

이제 `view_post.php` 파일을 생성하고, URL에서 게시글 ID를 받아 해당 게시글을 데이터베이스에서 조회하여 출력하는 작업을 구현해야 합니다. 아래는 PHP 코드 예시입니다.

<?php
// 데이터베이스 연결
$conn = new mysqli("localhost", "username", "password", "database");

// URL에서 게시글 ID 받기
$post_id = isset($_GET['id']) ? $_GET['id'] : 0;

// 게시글 데이터 조회 쿼리
$query = "SELECT * FROM posts WHERE post_id = $post_id";
$result = $conn->query($query);

// 게시글이 존재하는지 확인
if ($result->num_rows > 0) {
    $row = $result->fetch_assoc();
    
    // 게시글 내용 출력
    echo "<h2>" . $row['title'] . "</h2>";
    echo "<p><b>작성자:</b> " . $row['author'] . "</p>";
    echo "<p><b>작성일:</b> " . $row['created_at'] . "</p>";
    echo "<div>" . nl2br($row['content']) . "</div>";
} else {
    echo "게시글을 찾을 수 없습니다.";
}

// 연결 종료
$conn->close();
?>

위 코드는 `$_GET['id']`로 URL에서 게시글의 고유 ID를 받아, 해당 ID에 맞는 게시글을 MySQL에서 조회하여 상세 내용을 화면에 출력하는 코드입니다. `nl2br()` 함수를 사용하여 게시글 내용에서 줄바꿈을 HTML `
` 태그로 변환하여 출력합니다. 게시글이 존재하지 않는 경우에는 "게시글을 찾을 수 없습니다."라는 메시지를 출력합니다.

게시글 내용 출력 포맷

게시글 내용은 단순한 텍스트로 저장되기 때문에 HTML 태그를 포함할 수 없습니다. 이를 해결하기 위해 `` 태그나 `` 태그 같은 HTML 태그가 포함된 내용을 그대로 출력하는 기능을 추가할 수도 있지만, 보안을 위해 사용자 입력이 HTML 태그를 포함하지 않도록 필터링하는 것이 중요합니다.

만약 사용자가 작성한 게시글 내용에 HTML 태그를 포함할 수 있도록 허용하려면, PHP의 htmlspecialchars() 함수를 사용하여 태그를 안전하게 처리할 수 있습니다.

echo "<div>" . htmlspecialchars($row['content']) . "</div>";

위 코드는 HTML 태그를 출력하지 않고 텍스트로만 출력하여 보안상의 문제를 방지할 수 있습니다.

3. 게시글 상세보기 페이지에서 추가적인 기능

게시글 상세보기 페이지에서 더 많은 기능을 추가할 수 있습니다. 예를 들어, 댓글 기능을 추가하여 사용자가 해당 게시글에 대해 의견을 남길 수 있도록 하거나, 게시글 수정 및 삭제 기능을 추가할 수 있습니다.

3.1. 댓글 기능 추가

댓글 기능을 추가하려면, 댓글을 저장할 수 있는 별도의 테이블이 필요합니다. 아래는 댓글 테이블 구조 예시입니다.

CREATE TABLE comments (
    comment_id INT AUTO_INCREMENT PRIMARY KEY,
    post_id INT,
    author VARCHAR(100),
    content TEXT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (post_id) REFERENCES posts(post_id)
);

댓글을 추가하려면 `post_id`를 기준으로 댓글을 저장하고, 게시글 상세보기 페이지에서 해당 게시글의 댓글을 불러와서 표시합니다. 아래는 댓글을 표시하는 예시입니다.

// 댓글 조회 쿼리
$comment_query = "SELECT * FROM comments WHERE post_id = $post_id ORDER BY created_at DESC";
$comment_result = $conn->query($comment_query);

// 댓글 출력
while ($comment = $comment_result->fetch_assoc()) {
    echo "<p><b>" . $comment['author'] . "</b> (" . $comment['created_at'] . ")</p>";
    echo "<p>" . nl2br($comment['content']) . "</p>";
}

3.2. 게시글 수정 및 삭제 기능

게시글 수정과 삭제 기능을 추가하면 게시글을 관리하기 더 편리합니다. 게시글 작성자는 자신이 작성한 게시글을 수정하거나 삭제할 수 있어야 합니다. 이를 위해 게시글 수정과 삭제 버튼을 추가하고, 각 버튼을 클릭하면 수정 폼이나 삭제 확인 페이지로 이동하도록 구현할 수 있습니다.

// 게시글 수정 링크
echo "<a href='edit_post.php?id=" . $row['post_id'] . "'>게시글 수정</a>";

// 게시글 삭제 링크
echo "<a href='delete_post.php?id=" . $row['post_id'] . "'>게시글 삭제</a>";

위 코드는 게시글 상세보기 페이지에서 수정과 삭제 링크를 추가하여 게시글을 관리할 수 있도록 하는 예시입니다. 수정 및 삭제 작업은 별도의 페이지에서 처리해야 하며, 이를 통해 게시글 관리 기능을 확장할 수 있습니다.

결론

게시판 글 보기 페이지는 사용자에게 게시글의 세부 정보를 제공하는 중요한 페이지입니다. PHP와 MySQL을 사용하여 게시글의 ID를 URL로 전달받고, 해당 ID에 맞는 게시글을 조회하여 상세 정보를 출력하는 방법을 소개했습니다. 또한, 게시글에 댓글을 추가하거나 게시글 수정 및 삭제 기능을 구현하는 방법에 대해서도 설명했습니다. 이와 같은 기능을 추가하여 게시판의 유용성을 높이고, 사용자 경험을 개선할 수 있습니다.

이 HTML 코드에는 게시글 상세보기 기능을 구현하는 방법을 단계별로 설명하며, 게시글을 조회하고 출력하는 기본적인 PHP 코드와 함께 댓글 기능 및 수정/삭제 기능도 다루고 있습니다. 이를 통해 게시판을 보다 완성도 높은 시스템으로 만들 수 있습니다.