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 : |
<!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['username']; ?>(<?php echo $row['created_at']; ?>)
</div>
<div class="panel-body">
<?php echo $row['content']; ?>
</div>
</div>
<?php
// 查询回复列表
$sql = "SELECT * FROM reply WHERE message_id = {$row['id']} 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['username']; ?>(<?php echo $row2['created_at']; ?>)
</div>
<div class="panel-body">
<?php echo $row2['content']; ?>
</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['id']; ?>">
<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.
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 : |
<?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);
?>
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 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.