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

PHPz
풀어 주다: 2023-04-26 18:02:13
원래의
1460명이 탐색했습니다.

인터넷의 급속한 발전으로 인해 게시판은 많은 웹사이트에서 필수적인 부분이 되었습니다. 많은 게시판 중에서 답장 기능은 메시지 작성자가 웹 사이트 관리자와 상호 작용할 수 있게 하여 의사소통을 원활하게 하기 때문에 특히 중요합니다. 이번 글에서는 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿