留言板实现php
留言板实现(PHP+MySQL)
所需组件
- PHP运行环境(如Apache/Nginx+PHP)
- MySQL数据库
- HTML表单界面
数据库创建
创建名为messages的表:
CREATE TABLE messages (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
email VARCHAR(100),
content TEXT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
HTML表单(index.html)
<form action="submit.php" method="post">
<input type="text" name="name" placeholder="姓名" required>
<input type="email" name="email" placeholder="邮箱">
<textarea name="content" placeholder="留言内容" required></textarea>
<button type="submit">提交</button>
</form>
提交处理(submit.php)
<?php
$conn = new mysqli('localhost', 'username', 'password', 'database_name');
if ($conn->connect_error) die("连接失败: " . $conn->connect_error);
$name = $_POST['name'];
$email = $_POST['email'];
$content = $_POST['content'];
$stmt = $conn->prepare("INSERT INTO messages (name, email, content) VALUES (?, ?, ?)");
$stmt->bind_param("sss", $name, $email, $content);
$stmt->execute();
header("Location: view.php");
?>
留言展示(view.php)

<?php
$conn = new mysqli('localhost', 'username', 'password', 'database_name');
$result = $conn->query("SELECT * FROM messages ORDER BY created_at DESC");
while($row = $result->fetch_assoc()) {
echo "<div class='message'>";
echo "<h3>{$row['name']}</h3>";
echo "<p>{$row['content']}</p>";
echo "<small>{$row['created_at']}</small>";
echo "</div>";
}
$conn->close();
?>
安全增强措施
防SQL注入
使用预处理语句(如示例中的prepare和bind_param)
XSS防护
输出时使用htmlspecialchars:
echo htmlspecialchars($row['content'], ENT_QUOTES);
数据验证

if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
die("邮箱格式无效");
}
功能扩展建议
分页显示
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$limit = 5;
$offset = ($page - 1) * $limit;
$sql = "SELECT * FROM messages LIMIT $offset, $limit";
回复功能
数据库添加parent_id字段,建立层级关系
用户认证
添加users表,实现登录系统:
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(30) NOT NULL,
password VARCHAR(255) NOT NULL
);
文件上传 添加附件字段处理:
if ($_FILES['attachment']['error'] === UPLOAD_ERR_OK) {
move_uploaded_file($_FILES['attachment']['tmp_name'], 'uploads/'.basename($_FILES['attachment']['name']));
}






