ホームページ バックエンド開発 PHPの問題 phpを使って掲示板の返信機能を実装する方法

phpを使って掲示板の返信機能を実装する方法

Apr 26, 2023 pm 06:00 PM

インターネットの急速な発展に伴い、掲示板は多くの Web サイトにとって不可欠な部分となっています。数ある掲示板の中でも返信機能は、メッセージ作成者とWebサイト管理者とのやり取りを可能にし、コミュニケーションをよりスムーズにするため、特に重要です。この記事ではphpを使って掲示板の返信機能を実装する方法を紹介します。

1. データベース設計

掲示板返信機能を実装する前に、まずメッセージと返信内容を格納するデータテーブルを設計する必要があります。この記事では MySQL データベースを使用します。メッセージ テーブルと応答テーブルの設計は次のとおりです:

メッセージ テーブル (メッセージ)

##idint(11)メッセージIDusernamevarchar(20)コメント投稿者の名前contentcreated_at updated_at返信テーブル (返信)
カラム名 データ型 説明
# #varchar( 255) メッセージの内容
datetime メッセージ時刻
datetime 変更時刻

#列名##idint(11)返信 IDmessage_idint(11)メッセージ IDユーザー名varchar(20)返信者名contentvarchar(255)返信内容created_atdatetime返信時間updated_atdatetime変更時刻メッセージ テーブルと応答テーブル間の関連付けは、message_id によって実現されます。つまり、特定の応答は特定のメッセージに対応します。さらに、管理を容易にするために、各メッセージと返信に作成時刻と変更時刻の 2 つのフィールドが追加され、後の開発プロセスで使用されます。
データ型 説明
2. ページ レイアウト

データベースの設計が完了したら、次のステップはページ レイアウトです。掲示板の場合、インターフェイスがシンプルで美しく、使いやすいことが重要です。この記事では、Bootstrap フレームワークを使用してメッセージ ボード ページをデザインします。メッセージ ボード ページのコードは次のとおりです:

<!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>
ログイン後にコピー
上記のコードでは、メッセージ ボード ページは 2 つの部分に分かれており、上の部分はメッセージボックス、下部がメッセージ一覧と返信フォームです。メッセージ リストと返信フォームは両方とも動的に生成され、各メッセージの返信フォームにはサーバー側の処理を容易にする非表示の message_id フィールドがあります。

3. バックエンドの実装

ページ レイアウトが完了したら、次のステップはバックエンドの実装です。この記事では、コードの拡張と保守を容易にするために、オブジェクト指向 PHP プログラミング手法が採用されています。以下は PHP コードです。

<?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);
?>
ログイン後にコピー
上記のコードでは、メッセージと返信に対応する Message クラスと Reply クラスが定義されています。 Message クラスでは、メッセージ リストを取得するための静的メソッド get_list が定義され、Reply クラスでは、応答リストを取得するための静的メソッド get_list_by_message_id が定義されています。同時に、PHP の組み込み $_POST 配列を使用してフォーム送信データが処理され、メッセージと返信のデータが対応するデータ テーブルに挿入されます。

この時点で、PHP で掲示板への返信機能を実装するプロセス全体が完了しました。上記のコードを設計して実装することで、掲示板への返信機能を簡単に実装でき、ユーザー エクスペリエンスが向上し、Web サイトの管理が容易になります。

以上がphpを使って掲示板の返信機能を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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ヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHPアレイの重複排除のためのベストプラクティスは何ですか PHPアレイの重複排除のためのベストプラクティスは何ですか Mar 03, 2025 pm 04:41 PM

PHPアレイの重複排除のためのベストプラクティスは何ですか

PHPアレイの重複排除は、キー名の一意性を利用できますか? PHPアレイの重複排除は、キー名の一意性を利用できますか? Mar 03, 2025 pm 04:51 PM

PHPアレイの重複排除は、キー名の一意性を利用できますか?

PHPアレイの重複排除は、パフォーマンスの損失について考慮する必要がありますか? PHPアレイの重複排除は、パフォーマンスの損失について考慮する必要がありますか? Mar 03, 2025 pm 04:47 PM

PHPアレイの重複排除は、パフォーマンスの損失について考慮する必要がありますか?

最新のPHPコーディング基準とベストプラクティスは何ですか? 最新のPHPコーディング基準とベストプラクティスは何ですか? Mar 10, 2025 pm 06:16 PM

最新のPHPコーディング基準とベストプラクティスは何ですか?

PHPアレイの重複排除のための最適化手法は何ですか PHPアレイの重複排除のための最適化手法は何ですか Mar 03, 2025 pm 04:50 PM

PHPアレイの重複排除のための最適化手法は何ですか

PHPにメッセージキュー(rabbitmq、redis)を実装する方法は? PHPにメッセージキュー(rabbitmq、redis)を実装する方法は? Mar 10, 2025 pm 06:15 PM

PHPにメッセージキュー(rabbitmq、redis)を実装する方法は?

PHP拡張機能とPECLを使用するにはどうすればよいですか? PHP拡張機能とPECLを使用するにはどうすればよいですか? Mar 10, 2025 pm 06:12 PM

PHP拡張機能とPECLを使用するにはどうすればよいですか?

リフレクションを使用してPHPコードを分析および操作する方法は? リフレクションを使用してPHPコードを分析および操作する方法は? Mar 10, 2025 pm 06:12 PM

リフレクションを使用してPHPコードを分析および操作する方法は?

See all articles