php实现许愿墙完整版
以下是PHP实现许愿墙的完整版方案,包含核心功能模块和代码示例:
数据库设计
创建MySQL表存储许愿数据:
CREATE TABLE `wishes` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`content` varchar(255) NOT NULL,
`username` varchar(50) NOT NULL,
`color` varchar(20) NOT NULL,
`time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`ip` varchar(20) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
前端页面布局
基础HTML结构包含表单和展示区:
<div class="wish-container">
<form method="post" action="post_wish.php">
<textarea name="content" placeholder="写下你的愿望..."></textarea>
<input type="text" name="username" placeholder="你的昵称">
<select name="color">
<option value="yellow">黄色</option>
<option value="blue">蓝色</option>
<option value="pink">粉色</option>
</select>
<button type="submit">许愿</button>
</form>
<div class="wish-wall">
<?php include 'get_wishes.php'; ?>
</div>
</div>
后端处理逻辑
接收表单提交的post_wish.php:
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
require 'db_connect.php';
$content = htmlspecialchars($_POST['content']);
$username = htmlspecialchars($_POST['username']);
$color = $_POST['color'];
$ip = $_SERVER['REMOTE_ADDR'];
$stmt = $pdo->prepare("INSERT INTO wishes (content, username, color, ip) VALUES (?, ?, ?, ?)");
$stmt->execute([$content, $username, $color, $ip]);
header("Location: index.php");
exit;
}
?>
数据展示处理
get_wishes.php查询并显示愿望:
<?php
require 'db_connect.php';
$stmt = $pdo->query("SELECT * FROM wishes ORDER BY time DESC");
while ($row = $stmt->fetch()) {
echo '<div class="wish-item" style="background:'.$row['color'].'">';
echo '<p>'.$row['content'].'</p>';
echo '<span>'.$row['username'].' • '.$row['time'].'</span>';
echo '</div>';
}
?>
数据库连接配置
db_connect.php配置文件:
<?php
$host = 'localhost';
$db = 'wishwall';
$user = 'root';
$pass = '';
$charset = 'utf8mb4';
$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
];
try {
$pdo = new PDO($dsn, $user, $pass, $options);
} catch (\PDOException $e) {
throw new \PDOException($e->getMessage(), (int)$e->getCode());
}
?>
样式美化
基础CSS样式示例:
.wish-container {
max-width: 800px;
margin: 0 auto;
padding: 20px;
}
.wish-wall {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
gap: 15px;
margin-top: 30px;
}
.wish-item {
padding: 15px;
border-radius: 8px;
box-shadow: 0 2px 5px rgba(0,0,0,0.1);
}
.wish-item p {
margin: 0 0 10px 0;
word-break: break-word;
}
.wish-item span {
font-size: 12px;
color: #666;
}
安全增强措施
添加防XSS和基础防护:
// 在post_wish.php开头添加
session_start();
if (empty($_POST['content']) || strlen($_POST['content']) > 255) {
$_SESSION['error'] = '愿望内容不能为空或超过255字';
header("Location: index.php");
exit;
}
// 添加频率限制
$stmt = $pdo->prepare("SELECT COUNT(*) FROM wishes WHERE ip = ? AND time > DATE_SUB(NOW(), INTERVAL 1 HOUR)");
$stmt->execute([$_SERVER['REMOTE_ADDR']]);
if ($stmt->fetchColumn() > 5) {
$_SESSION['error'] = '操作过于频繁,请稍后再试';
header("Location: index.php");
exit;
}
扩展功能建议
- 增加AJAX无刷新提交
- 添加图片上传功能
- 实现愿望点赞系统
- 开发后台审核功能
- 添加分页加载机制
完整项目应包含错误处理、输入验证和日志记录等功能模块,以上代码提供了基础实现框架。实际部署时需要根据服务器环境调整数据库连接参数和安全配置。







