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;
数据库连接配置
创建config.php文件存放数据库连接信息:
<?php
define('DB_HOST', 'localhost');
define('DB_USER', 'root');
define('DB_PASS', 'password');
define('DB_NAME', 'wishwall');
?>
核心功能实现
提交愿望功能 创建submit.php处理表单提交:

require 'config.php';
if($_SERVER['REQUEST_METHOD'] == 'POST'){
$content = htmlspecialchars($_POST['content']);
$username = htmlspecialchars($_POST['username']);
$color = $_POST['color'];
$ip = $_SERVER['REMOTE_ADDR'];
$conn = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
$stmt = $conn->prepare("INSERT INTO wishes(content, username, color, ip) VALUES(?, ?, ?, ?)");
$stmt->bind_param("ssss", $content, $username, $color, $ip);
$stmt->execute();
header("Location: index.php");
}
显示愿望功能 创建index.php显示所有愿望:
require 'config.php';
$conn = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
$result = $conn->query("SELECT * FROM wishes ORDER BY time DESC");
while($row = $result->fetch_assoc()){
echo '<div class="wish" style="background:'.$row['color'].'">';
echo '<p>'.$row['content'].'</p>';
echo '<span>'.$row['username'].' '.$row['time'].'</span>';
echo '</div>';
}
前端界面设计
HTML结构

<!DOCTYPE html>
<html>
<head>
<title>许愿墙</title>
<style>
.wish {
width: 200px;
padding: 15px;
margin: 10px;
float: left;
border-radius: 5px;
box-shadow: 2px 2px 5px #888;
}
</style>
</head>
<body>
<form action="submit.php" method="post">
<textarea name="content" required></textarea>
<input type="text" name="username" placeholder="你的名字" required>
<select name="color">
<option value="#FFCCCC">粉色</option>
<option value="#CCFFCC">绿色</option>
<option value="#CCCCFF">蓝色</option>
</select>
<button type="submit">许愿</button>
</form>
<div id="wishwall">
<?php include 'index.php'; ?>
</div>
</body>
</html>
安全增强措施
添加防XSS和SQL注入防护:
// 对所有用户输入进行过滤
function clean_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
// 使用预处理语句防止SQL注入
$stmt = $conn->prepare("INSERT INTO wishes VALUES(NULL, ?, ?, ?, NOW(), ?)");
$stmt->bind_param("ssss", $content, $username, $color, $ip);
分页功能实现
修改index.php添加分页支持:
$per_page = 10;
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$start = ($page-1) * $per_page;
$total = $conn->query("SELECT COUNT(*) FROM wishes")->fetch_row()[0];
$pages = ceil($total / $per_page);
$result = $conn->query("SELECT * FROM wishes ORDER BY time DESC LIMIT $start, $per_page");
// 显示分页链接
for($i=1; $i<=$pages; $i++){
echo '<a href="?page='.$i.'">'.$i.'</a> ';
}
完整项目结构
/wishwall
├── config.php # 数据库配置
├── index.php # 显示愿望
├── submit.php # 处理提交
├── style.css # 样式文件
└── install.sql # 数据库初始化脚本
该实现包含完整的许愿墙功能,包括愿望提交、显示、分页和安全防护措施。可根据需要进一步扩展功能,如愿望审核、点赞评论等。






