백엔드 개발 PHP 문제 PHP를 사용하여 게시판의 응답 기능을 구현하는 방법

PHP를 사용하여 게시판의 응답 기능을 구현하는 방법

Apr 26, 2023 pm 06:00 PM

인터넷의 급속한 발전으로 인해 게시판은 많은 웹사이트에서 필수적인 부분이 되었습니다. 많은 게시판 중에서 답장 기능은 메시지 작성자가 웹 사이트 관리자와 상호 작용할 수 있게 하여 의사소통을 원활하게 하기 때문에 특히 중요합니다. 이번 글에서는 php를 이용하여 게시판의 댓글 기능을 구현하는 방법을 소개하겠습니다.

1. 데이터베이스 설계

게시판 답글 기능을 구현하기 전에 먼저 메시지와 답글 내용을 저장할 데이터 테이블을 설계해야 합니다. 이 글에서는 MySQL 데이터베이스를 사용하여 메시지 테이블과 응답 테이블을 설계했습니다.

Message table (message)

+ idint(11)답글 IDmessage_id
Column name Data type Explanation
id int(11 ) 메시지 ID
username varchar(20) 댓글 작성자 이름
content varchar(255) 메시지 콘텐츠
created_ datetime 에 메시지 시간

int(11)

메시지 IDusernamevarchar(20)응답자 이름contentvarchar(255) 답글 내용created_atdatetime응답 시간updated_atdatetime수정 시간
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>留言板</title>
    <link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css">
    <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
    <script src="https://cdn.bootcss.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
</head>
<body>
    <div class="container">
        <h2>留言板</h2>
        <form class="form-horizontal" method="post" action="post_message.php">
            <div class="form-group">
                <label for="username" class="col-sm-2 control-label">姓名:</label>
                <div class="col-sm-10">
                    <input type="text" name="username" class="form-control" required>
                </div>
            </div>
            <div class="form-group">
                <label for="content" class="col-sm-2 control-label">留言内容:</label>
                <div class="col-sm-10">
                    <textarea name="content" class="form-control" rows="5" required></textarea>
                </div>
            </div>
            <div class="form-group">
                <div class="col-sm-offset-2 col-sm-10">
                    <button type="submit" class="btn btn-primary">提交</button>
                </div>
            </div>
        </form>
        <?php
            // 查询留言列表
            $sql = "SELECT * FROM message ORDER BY created_at DESC";
            $result = mysqli_query($conn, $sql);
            while ($row = mysqli_fetch_assoc($result)) {
        ?>
        <div class="panel panel-default">
            <div class="panel-heading">
                <?php echo $row[&#39;username&#39;]; ?>(<?php echo $row[&#39;created_at&#39;]; ?>)
            </div>
            <div class="panel-body">
                <?php echo $row[&#39;content&#39;]; ?>
            </div>
        </div>
        <?php
                // 查询回复列表
                $sql = "SELECT * FROM reply WHERE message_id = {$row[&#39;id&#39;]} ORDER BY created_at ASC";
                $result2 = mysqli_query($conn, $sql);
                while ($row2 = mysqli_fetch_assoc($result2)) {
        ?>
        <div class="panel panel-info">
            <div class="panel-heading">
                <?php echo $row2[&#39;username&#39;]; ?>(<?php echo $row2[&#39;created_at&#39;]; ?>)
            </div>
            <div class="panel-body">
                <?php echo $row2[&#39;content&#39;]; ?>
            </div>
        </div>
        <?php
                }
        ?>
        <form class="form-horizontal" method="post" action="post_reply.php">
            <div class="form-group">
                <div class="col-sm-offset-2 col-sm-10">
                    <input type="hidden" name="message_id" value="<?php echo $row[&#39;id&#39;]; ?>">
                    <input type="text" name="username" class="form-control" placeholder="回复者姓名" required>
                </div>
            </div>
            <div class="form-group">
                <div class="col-sm-offset-2 col-sm-10">
                    <textarea name="content" class="form-control" rows="3" placeholder="回复内容" required></textarea>
                </div>
            </div>
            <div class="form-group">
                <div class="col-sm-offset-2 col-sm-10">
                    <button type="submit" class="btn btn-default">回复</button>
                </div>
            </div>
        </form>
        <?php
            }
        ?>
    </div>
</body>
</html>
로그인 후 복사
위 코드에서 게시판 페이지는 두 부분으로 나누어져 있으며 상단은 메시지 상자입니다. 하단에는 메시지 목록과 답장 양식이 있습니다. 메시지 목록과 회신 양식은 모두 동적으로 생성됩니다. 각 메시지의 회신 양식에는 서버측 처리를 용이하게 하기 위해 숨겨진 message_id 필드가 있습니다.
<?php
// 建立数据库连接
$conn = new mysqli("localhost", "root", "password", "test");
if ($conn->connect_error) {
    die("数据库连接失败:" . $conn->connect_error);
}

// 定义Message类
class Message {
    public $id;
    public $username;
    public $content;
    public $created_at;
    public $updated_at;
    
    // 构造函数
    function __construct($id, $username, $content, $created_at, $updated_at) {
        $this->id = $id;
        $this->username = $username;
        $this->content = $content;
        $this->created_at = $created_at;
        $this->updated_at = $updated_at;
    }
    
    // 静态方法:获取留言列表
    static function get_list($conn) {
        $messages = array();
        $sql = "SELECT * FROM message ORDER BY created_at DESC";
        $result = mysqli_query($conn, $sql);
        while ($row = mysqli_fetch_assoc($result)) {
            $message = new Message($row['id'], $row['username'], $row['content'], $row['created_at'], $row['updated_at']);
            array_push($messages, $message);
        }
        return $messages;
    }
}

// 定义Reply类
class Reply {
    public $id;
    public $message_id;
    public $username;
    public $content;
    public $created_at;
    public $updated_at;
    
    // 构造函数
    function __construct($id, $message_id, $username, $content, $created_at, $updated_at) {
        $this->id = $id;
        $this->message_id = $message_id;
        $this->username = $username;
        $this->content = $content;
        $this->created_at = $created_at;
        $this->updated_at = $updated_at;
    }
    
    // 静态方法:根据留言ID获取回复列表
    static function get_list_by_message_id($conn, $message_id) {
        $replies = array();
        $sql = "SELECT * FROM reply WHERE message_id = {$message_id} ORDER BY created_at ASC";
        $result = mysqli_query($conn, $sql);
        while ($row = mysqli_fetch_assoc($result)) {
            $reply = new Reply($row['id'], $row['message_id'], $row['username'], $row['content'], $row['created_at'], $row['updated_at']);
            array_push($replies, $reply);
        }
        return $replies;
    }
}

// 处理留言提交
if ($_SERVER['REQUEST_METHOD'] == 'POST' && !empty($_POST['username']) && !empty($_POST['content'])) {
    $sql = "INSERT INTO message (username, content) VALUES ('{$_POST['username']}', '{$_POST['content']}')";
    mysqli_query($conn, $sql);
}

// 处理回复提交
if ($_SERVER['REQUEST_METHOD'] == 'POST' && !empty($_POST['message_id']) && !empty($_POST['username']) && !empty($_POST['content'])) {
    $sql = "INSERT INTO reply (message_id, username, content) VALUES ({$_POST['message_id']}, '{$_POST['username']}', '{$_POST['content']}')";
    mysqli_query($conn, $sql);
}

// 获取留言列表
$messages = Message::get_list($conn);
?>
로그인 후 복사
이제 PHP에서 게시판 답글 기능을 구현하는 모든 과정이 완료되었습니다. 위 코드의 설계 및 구현을 통해 게시판 응답 기능을 쉽게 구현할 수 있으며, 이는 사용자 경험을 향상시키고 웹사이트 관리를 용이하게 합니다.
메시지 테이블과 답장 간의 연관성 테이블은 message_id를 통해 달성됩니다. 즉, 응답은 특정 메시지에 해당합니다. 또한, 관리를 용이하게 하기 위해 각 메시지와 회신에 생성 시간과 수정 시간이라는 2개의 필드를 추가하여 향후 개발 과정에서 활용하게 됩니다. 2. 페이지 레이아웃 데이터베이스 디자인이 완료되면 다음 단계는 페이지 레이아웃입니다. 게시판의 경우 인터페이스가 단순하고 아름답고 사용하기 쉬운 것이 중요합니다. 이 글에서는 부트스트랩 프레임워크를 사용하여 게시판 페이지를 디자인합니다. 다음은 게시판 페이지의 코드입니다.
3. 백엔드 구현 페이지 레이아웃이 완료되면 다음 단계는 백엔드 구현입니다. 이 기사에서는 코드 확장 및 유지 관리를 용이하게 하기 위해 객체 지향 PHP 프로그래밍 방법을 채택했습니다. 다음은 PHP 코드입니다. 위 코드에는 메시지와 답글에 해당하는 Message 클래스와 Reply 클래스가 정의되어 있습니다. Message 클래스에서는 정적 메소드 get_list가 정의되어 Reply 클래스에서 메시지 목록을 얻고, 정적 메소드 get_list_by_message_id는 응답 목록을 얻기 위해 정의됩니다. 동시에 PHP에 내장된 $_POST 배열을 사용하여 양식 제출 데이터를 처리하고 메시지 및 응답 데이터가 해당 데이터 테이블에 삽입됩니다.

위 내용은 PHP를 사용하여 게시판의 응답 기능을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

PHP 8 JIT (정시) 편집 : 성능 향상 방법. PHP 8 JIT (정시) 편집 : 성능 향상 방법. Mar 25, 2025 am 10:37 AM

PHP 8의 JIT 컴파일은 자주 실행되는 코드를 컴퓨터 코드로 컴파일하여 성능을 향상시켜 계산이 많은 응용 프로그램에 도움이되고 실행 시간을 줄입니다.

PHP 보안 파일 업로드 : 파일 관련 취약점 방지. PHP 보안 파일 업로드 : 파일 관련 취약점 방지. Mar 26, 2025 pm 04:18 PM

이 기사는 코드 주입과 같은 취약점을 방지하기 위해 PHP 파일 업로드 보안에 대해 설명합니다. 파일 유형 유효성 검증, 보안 저장 및 오류 처리에 중점을 두어 응용 프로그램 보안을 향상시킵니다.

PHP 암호화 : 대칭 대 비대칭 암호화. PHP 암호화 : 대칭 대 비대칭 암호화. Mar 25, 2025 pm 03:12 PM

이 기사는 PHP의 대칭 및 비대칭 암호화에 대해 논의하여 적합성, 성능 및 보안 차이를 비교합니다. 대칭 암호화는 더 빠르고 벌크 데이터에 적합하지만 안전한 키 교환에는 비대칭이 사용됩니다.

OWASP Top 10 PHP : 일반적인 취약점을 설명하고 완화하십시오. OWASP Top 10 PHP : 일반적인 취약점을 설명하고 완화하십시오. Mar 26, 2025 pm 04:13 PM

이 기사는 PHP 및 완화 전략의 OWASP Top 10 취약점에 대해 설명합니다. 주요 문제에는 PHP 응용 프로그램을 모니터링하고 보호하기위한 권장 도구가 포함 된 주입, 인증 파손 및 XSS가 포함됩니다.

PHP 인증 & amp; 승인 : 보안 구현. PHP 인증 & amp; 승인 : 보안 구현. Mar 25, 2025 pm 03:06 PM

이 기사에서는 PHP에서 강력한 인증 및 승인을 구현하여 무단 액세스를 방지하고 모범 사례를 자세히 설명하고 보안 향상 도구를 권장합니다.

PHP를 사용하여 데이터베이스에서 데이터를 검색하는 방법은 무엇입니까? PHP를 사용하여 데이터베이스에서 데이터를 검색하는 방법은 무엇입니까? Mar 20, 2025 pm 04:57 PM

기사는 PHP, 커버 단계, 보안 측정, 최적화 기술 및 Solutions의 일반적인 오류를 사용하여 데이터베이스에서 데이터 검색에 대해 논의합니다. 문자 수 : 159

PHP API 요율 제한 : 구현 전략. PHP API 요율 제한 : 구현 전략. Mar 26, 2025 pm 04:16 PM

이 기사는 토큰 버킷 및 누출 된 버킷과 같은 알고리즘을 포함하여 PHP에서 API 요율 제한을 구현하고 Symfony/Rate-Limiter와 같은 라이브러리 사용 전략에 대해 설명합니다. 또한 모니터링, 동적 조정 요율 제한 및 손도 다룹니다.

PHP CSRF 보호 : CSRF 공격 방지 방법. PHP CSRF 보호 : CSRF 공격 방지 방법. Mar 25, 2025 pm 03:05 PM

이 기사는 CSRF 토큰, 동일한 사이트 쿠키 및 적절한 세션 관리를 포함하여 PHP의 CSRF 공격을 방지하는 전략에 대해 설명합니다.

See all articles