Maison  >  Article  >  développement back-end  >  Comment utiliser PHP pour implémenter la fonction de réponse du forum

Comment utiliser PHP pour implémenter la fonction de réponse du forum

PHPz
PHPzoriginal
2023-04-26 18:00:561381parcourir

Avec le développement rapide d'Internet, les forums de discussion sont devenus un élément essentiel de nombreux sites Web. Parmi de nombreux forums de discussion, la fonction de réponse est particulièrement importante car elle permet aux rédacteurs de messages d'interagir avec les administrateurs de sites Web, rendant ainsi la communication plus fluide. Cet article explique comment utiliser PHP pour implémenter la fonction de réponse du forum.

1. Conception de la base de données

Avant de mettre en œuvre la fonction de réponse du forum, vous devez d'abord concevoir une table de données pour stocker le contenu du message et de la réponse. Cet article utilise la base de données MySQL. Voici la conception de la table des messages et de la table des réponses :

Table des messages (message)

+ idint(11)ID de réponsemessage_id
Nom de la colonne Type de données Explication
id int(11) ID du message
nom d'utilisateur varchar(20) Nom du commentateur
contenu varchar(255) Contenu du message
created_at datetime heure du message

int(11)

ID du messagenom d'utilisateurvarchar(20)Nom du répondeurcontentvarchar(255) Reply contentcreated_atdatetimereply timeupdated_atdatetimemodification time
<!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>
Dans le code ci-dessus, la page du babillard électronique est divisée en deux parties, la partie supérieure est la boîte de message, et la partie inférieure est la liste des messages et le formulaire de réponse. La liste des messages et le formulaire de réponse sont générés dynamiquement. Le formulaire de réponse de chaque message comporte un champ message_id masqué pour faciliter le traitement côté serveur.
<?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);
?>
À ce stade, l'ensemble du processus d'implémentation de la fonction de réponse du forum en PHP est terminé. Grâce à la conception et à la mise en œuvre du code ci-dessus, nous pouvons facilement implémenter la fonction de réponse au forum, ce qui améliore l'expérience utilisateur et facilite la gestion du site Web.
L'association entre la table des messages et la réponse La table est obtenue via message_id, c'est-à-dire qu'une certaine réponse correspond à un certain message de. De plus, afin de faciliter la gestion, deux champs, heure de création et heure de modification, sont ajoutés à chaque message et réponse, qui seront utilisés dans le processus de développement ultérieur. 2. Mise en page Une fois la conception de la base de données terminée, l'étape suivante est la mise en page. Pour les forums de discussion, il est important que l’interface soit simple, belle et facile à utiliser. Cet article utilise le framework Bootstrap pour concevoir la page du babillard électronique. Voici le code de la page du babillard électronique :
3. Implémentation back-end Une fois la mise en page terminée, l'étape suivante est l'implémentation back-end. Dans cet article, la méthode de programmation PHP orientée objet est adoptée pour faciliter l'expansion et la maintenance du code. Voici le code PHP : Dans le code ci-dessus, la classe Message et la classe Reply sont définies, correspondant aux messages et aux réponses. Dans la classe Message, la méthode statique get_list est définie pour obtenir la liste des messages ; dans la classe Reply, la méthode statique get_list_by_message_id est définie pour obtenir la liste des réponses. Dans le même temps, le tableau $_POST intégré de PHP est utilisé pour traiter les données de soumission du formulaire, et les données de message et de réponse sont insérées dans la table de données correspondante.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn