酷代码 AI
菜单
服务商
DeepSeek字节豆包
更多选项

PHP 5.3 留言板网站开发(MySQL 数据库)

好的,针对您的需求,我将为您构建一个基于 **PHP 5.3**、**MySQL** 的极简版“留言板”网站。该案例涵盖了**数据库连接**、**数据写入**、**数据展示**以及**基础安全处理**,适合部署在 Linux 环境下。 ## 🛠 准备工作与环境要求 在开始之前,请务必确认您的 Linux 服务器已安装以下组件: - **PHP 5.3+** - **MySQL 5.x** 或兼容的 MariaDB - **Apache/Nginx**(Web 服务器,支持 PHP 解析) ### 📦 依赖安装命令(以 CentOS 7 / Ubuntu 18.04 为例) ```bash # CentOS yum install php php-mysql mysql-server httpd -y systemctl start httpd mysqld systemctl enable httpd mysqld # Ubuntu apt-get update apt-get install php5 php5-mysql mysql-server apache2 -y systemctl start apache2 mysql systemctl enable apache2 mysql ``` > **注意**:PHP 5.3 自带 `mysql_connect` 函数(已废弃,但可用),本示例故意使用此函数以兼容旧版本。**生产环境强烈建议迁移到 PHP 7+并使用 `mysqli` 或 `PDO`**。 ## 🗂 项目文件结构 ``` . ├── index.php # 首页:显示留言列表 ├── add_message.php # 处理表单提交(写入数据库) ├── db_config.php # 数据库连接配置 └── style.css # 简单样式(可选) ``` ## 📄 数据库准备 创建表结构,执行以下 SQL: ```sql CREATE DATABASE IF NOT EXISTS guestbook; USE guestbook; CREATE TABLE messages ( id INT(11) AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) NOT NULL, content TEXT NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8; ``` ## 🔧 核心代码实现 ### 1. 数据库配置文件 `db_config.php` ```php <?php // 数据库连接配置 define('DB_HOST', 'localhost'); define('DB_USER', 'root'); define('DB_PASS', 'your_password'); // 请修改为实际密码 define('DB_NAME', 'guestbook'); /** * 建立数据库连接 * 使用 mysql_connect(兼容 PHP 5.3) */ function connect_db() { $conn = mysql_connect(DB_HOST, DB_USER, DB_PASS); if (!$conn) { die('数据库连接失败: ' . mysql_error()); } mysql_select_db(DB_NAME, $conn) or die('选择数据库失败: ' . mysql_error()); mysql_set_charset('utf8', $conn); // 设置字符集 return $conn; } ?> ``` **参数解释**: - `mysql_connect`:建立连接,参数依次为主机、用户、密码。 - `mysql_select_db`:选择数据库。 - `mysql_set_charset`:确保 UTF-8 编码,避免中文乱码。 --- ### 2. 添加留言页面 `add_message.php` ```php <?php require_once 'db_config.php'; // 处理 POST 请求 if ($_SERVER['REQUEST_METHOD'] === 'POST') { $username = trim($_POST['username']); $content = trim($_POST['content']); // 简单的服务端验证 if (empty($username) || empty($content)) { die('用户名和内容不能为空!'); } // 使用 mysql_real_escape_string 防止 SQL 注入(PHP 5.3 支持) $username = mysql_real_escape_string($username); $content = mysql_real_escape_string($content); // 连接数据库 $conn = connect_db(); $sql = "INSERT INTO messages (username, content) VALUES ('$username', '$content')"; $result = mysql_query($sql, $conn); if ($result) { echo '留言成功!<a href="index.php">返回首页</a>'; } else { echo '留言失败: ' . mysql_error($conn); } mysql_close($conn); exit; } ?> <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title>添加留言</title> <link rel="stylesheet" href="style.css"> </head> <body> <h2>📝 写留言</h2> <form method="post" action=""> <label>昵称:</label><input type="text" name="username" required><br><br> <label>内容:</label><textarea name="content" rows="5" cols="40" required></textarea><br><br> <input type="submit" value="提交留言"> </form> <p><a href="index.php">⬅️ 返回留言列表</a></p> </body> </html> ``` **安全要点**: - 使用 `mysql_real_escape_string` 转义特殊字符,避免 SQL 注入。 - 使用 `trim()` 去除首尾空格。 - 对表单提交进行简单的空值校验。 --- ### 3. 首页 `index.php`(显示留言列表) ```php <?php require_once 'db_config.php'; $conn = connect_db(); // 查询所有留言,按时间降序排列 $sql = "SELECT id, username, content, created_at FROM messages ORDER BY created_at DESC"; $result = mysql_query($sql, $conn); if (!$result) { die('查询失败: ' . mysql_error($conn)); } ?> <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title>留言板首页</title> <link rel="stylesheet" href="style.css"> </head> <body> <h2>📋 留言列表</h2> <p><a href="add_message.php">✏️ 写新留言</a></p> <hr> <?php if (mysql_num_rows($result) > 0): ?> <ul> <?php while ($row = mysql_fetch_assoc($result)): ?> <li> <strong><?php echo htmlspecialchars($row['username'], ENT_QUOTES, 'UTF-8'); ?></strong> <span style="color: #888;">(<?php echo $row['created_at']; ?>)</span> <p><?php echo nl2br(htmlspecialchars($row['content'], ENT_QUOTES, 'UTF-8')); ?></p> </li> <?php endwhile; ?> </ul> <?php else: ?> <p>目前还没有留言,快来写下第一条吧!</p> <?php endif; ?> <?php mysql_free_result($result); mysql_close($conn); ?> </body> </html> ``` **关键函数解释**: - `mysql_fetch_assoc`:逐行读取结果,返回关联数组。 - `htmlspecialchars`:转义 HTML 特殊字符,防止 XSS 攻击。 - `nl2br`:将换行符 `\n` 转为 `<br>`,保持文本格式。 --- ### 4. 简单样式 `style.css` (可选,用于更好视觉效果) ```css body { font-family: Arial, sans-serif; margin: 40px; background-color: #f9f9f9; } h2 { color: #333; } a { color: #0066cc; text-decoration: none; } a:hover { text-decoration: underline; } ul { list-style: none; padding: 0; } li { background: #fff; border: 1px solid #ddd; margin: 10px 0; padding: 15px; border-radius: 5px; } ``` ## 🚀 部署与运行 1. 将所有文件上传到 Web 服务器根目录(如 `/var/www/html/`)。 2. 修改 `db_config.php` 中的数据库密码。 3. 通过浏览器访问 `http://your-server-ip/index.php`。 4. 测试提交留言与查看列表功能。 ## ⚠️ 开发与安全建议 1. **避免使用 `mysql_*` 函数**:PHP 5.5+ 已废弃,PHP 7 已移除。长期应升级到 `mysqli` 或 `PDO`。 2. **密码安全**:生产环境请使用强密码,并限制数据库用户权限。 3. **XSS 防护**:始终对输出数据使用 `htmlspecialchars`。 4. **CSRF 防护**:可在表单中添加 Token 验证。 5. **错误处理**:生产环境应关闭 `display_errors`,使用日志记录错误。 6. **数据库编码**:确保表、连接、页面均为 UTF-8,避免乱码。 ## 📚 学习资源推荐 - [PHP 官方文档(历史版本)](https://www.php.net/manual/zh/) - [MySQL 5.6 参考手册](https://dev.mysql.com/doc/refman/5.6/en/) - [OWASP 安全开发指南](https://owasp.org/www-project-secure-coding-practices-quick-reference-group/) ## 🎉 扩展功能思路 - 分页显示留言 - 留言编辑与删除功能 - 管理员登录与审核机制 - 使用 Memcached/Redis 缓存优化性能 如果您需要进一步的定制功能(如分页、搜索、用户登录等),欢迎继续提问! ######[AI写代码神器 | 2163点数解答 | 2026-06-09 22:47:25]

相关提问
本站限时免费提问中
实用工具查看更多
Linux在线手册 [开发类]
Jquery在线手册 [开发类]
今日油价 [生活类]
图片互转base64 [开发类]
时间转换器 [开发类]