PHP打造诗词网站:从零到上线全攻略

创建一个诗词歌赋网站的步骤(使用PHP)

PHP是一种服务器端编程语言,非常适合构建动态网站如诗词歌赋站点。整个流程包括数据库设计、后端PHP脚本和前端HTML/CSS集成。以下我将一步步指导您实现一个基本的诗词网站,结构清晰且真实可靠。

1. 需求分析与规划
  • 网站核心功能:
    • 展示诗词内容(标题、正文、作者)。
    • 提供分类浏览(如按朝代或类型)。
    • 支持搜索功能。
    • 允许用户添加或修改诗词(可选)。
  • 技术选型:PHP(处理后端)、MySQL(存储数据)、HTML/CSS(前端)。我将使用PDO扩展连接数据库以提高安全性。
2. 数据库设计

使用MySQL数据库存储诗词和作者信息。先创建两个表:

  • poems表:存储诗词信息,字段包括id(主键),title, content, author_id(外键),dynasty(朝代)。
  • authors表:存储作者信息,字段包括id(主键),name, birth_year

建表SQL示例(在MySQL中执行):

sql 复制代码
CREATE TABLE authors (
  id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(255) NOT NULL,
  birth_year INT
);

CREATE TABLE poems (
  id INT AUTO_INCREMENT PRIMARY KEY,
  title VARCHAR(255) NOT NULL,
  content TEXT NOT NULL,
  author_id INT,
  dynasty VARCHAR(50),
  FOREIGN KEY (author_id) REFERENCES authors(id)
);
3. PHP后端开发

使用PHP连接数据库并处理数据。下面是一个基础脚本:

  • 连接数据库 :创建db.php文件来管理数据库连接(使用PDO防治SQL注入)。
php 复制代码
<?php
// db.php:数据库配置文件
$host = 'localhost';
$dbname = 'poetry_site';
$username = 'your_username'; // 替换为您的数据库用户名
$password = 'your_password'; // 替换为您的数据库密码

try {
    $pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8", $username, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    die("数据库连接失败: " . $e->getMessage());
}
?>
  • 查询并展示诗词 :创建index.php文件作为首页,列出所有诗词。
php 复制代码
<?php
require 'db.php'; // 引入数据库连接

try {
    $stmt = $pdo->query("SELECT poems.title, poems.content, authors.name AS author_name, poems.dynasty 
                         FROM poems 
                         INNER JOIN authors ON poems.author_id = authors.id");
    $poems = $stmt->fetchAll(PDO::FETCH_ASSOC);
} catch (PDOException $e) {
    die("查询失败: " . $e->getMessage());
}
?>

<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <title>诗词歌赋网站</title>
    <style>
        body { font-family: Arial, sans-serif; }
        .poem { margin: 20px; padding: 10px; border: 1px solid #ccc; }
    </style>
</head>
<body>
    <h1>诗词大全</h1>
    <?php foreach ($poems as $poem): ?>
        <div class="poem">
            <h2><?php echo htmlspecialchars($poem['title']); ?></h2>
            <p>作者:<?php echo htmlspecialchars($poem['author_name']); ?></p>
            <p>朝代:<?php echo htmlspecialchars($poem['dynasty']); ?></p>
            <pre><?php echo htmlspecialchars($poem['content']); ?></pre>
        </div>
    <?php endforeach; ?>
</body>
</html>

这个脚本会从数据库获取诗词数据并通过HTML输出。

4. 添加搜索功能

扩展index.php,实现按标题或作者搜索。使用PHP处理表单提交。

php 复制代码
<!-- 在index.php中添加搜索表单 -->
<form method="GET" action="">
    <input type="text" name="search" placeholder="搜索诗词标题或作者">
    <button type="submit">搜索</button>
</form>

<?php
// PHP部分:处理搜索请求
if ($_SERVER["REQUEST_METHOD"] == "GET" && isset($_GET['search'])) {
    $searchTerm = $_GET['search'];
    $searchQuery = "%$searchTerm%";
    try {
        $stmt = $pdo->prepare("SELECT poems.title, poems.content, authors.name AS author_name, poems.dynasty 
                               FROM poems 
                               INNER JOIN authors ON poems.author_id = authors.id 
                               WHERE poems.title LIKE ? OR authors.name LIKE ?");
        $stmt->execute([$searchQuery, $searchQuery]);
        $poems = $stmt->fetchAll(PDO::FETCH_ASSOC);
    } catch (PDOException $e) {
        die("搜索失败: " . $e->getMessage());
    }
}
// 下方输出部分保持不变(如代码块上方)
?>

这里使用预处理语句防治SQL注入。

5. 添加新诗词功能

创建add_poem.php文件允许管理员添加诗词。

html 复制代码
<!DOCTYPE html>
<html>
<head>
    <title>添加诗词</title>
</head>
<body>
    <form method="POST" action="process_add.php">
        标题:<input type="text" name="title" required><br>
        内容:<textarea name="content" required></textarea><br>
        作者姓名:<input type="text" name="author_name" required><br>
        朝代:<input type="text" name="dynasty" required><br>
        <button type="submit">提交</button>
    </form>
</body>
</html>

然后创建process_add.php处理提交。

php 复制代码
<?php
require 'db.php';

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $title = $_POST['title'];
    $content = $_POST['content'];
    $authorName = $_POST['author'];
    $dynasty = $_POST['dynasty'];

    try {
        // 先检查或添加作者
        $stmt = $pdo->prepare("INSERT INTO authors (name) VALUES (:name) ON DUPLICATE KEY UPDATE name=name");
        $stmt->bindParam(':name', $authorName);
        $stmt->execute();

        // 获取作者ID
        $authorStmt = $pdo->query("SELECT id FROM authors WHERE name = '$authorName'");
        $authorId = $authorStmt->fetchColumn();

        // 插入诗词
        $insertPoem = $pdo->prepare("INSERT INTO poems (title, content, author_id, dynasty) VALUES (:title, :content, :author_id, :dynasty)");
        $insertPoem->execute([
            ':title' => $title,
            ':content' => $content,
            ':author_id' => $authorId,
            ':dynasty' => $dynasty
        ]);
        header("Location: index.php?success=1"); // 重定向回首页
    } catch (PDOException $e) {
        die("添加失败: " . $e->getMessage());
    }
}
?>
6. 优化与安全提示
  • 安全性 :始终使用PDO预处理语句防治SQL注入(如上面代码中出现的bindParamprepare)。对用户输入进行验证和过滤,例如htmlspecialchars()转义HTML特殊字符。
  • 性能 :添加索引到常用字段(如poems.titleauthors.name),并使用缓存策略(如Redis存储热门诗词)。
  • 扩展功能
    • 添加用户注册/登录系统。
    • 应用分词库(如jieba-php)改进搜索准确度。假设处理相关性计算时,可以使用模糊匹配逻辑如距离函数。

您可以通过公式估算相关性分值,例如在搜索中用查准率: 查询涉及的文本搜索可用文本匹配算法,如余弦相似度: \\text{相似度} = \\frac{\\mathbf{A} \\cdot \\mathbf{B}}{\|\\mathbf{A}\| \|\\mathbf{B}\|}

7. 部署网站
  • 步骤:测试代码(使用XAMPP或本地服务),上传到服务器(如Apache + PHP环境),配置域名。
  • 真实建议:使用开源PHP框架(如Laravel)简化开发,提高代码可维护性。

以上是构建一个基础诗词歌赋网站的完整指南。您可以根据需求添加更多功能。如果您有具体问题(如实现特定算法),欢迎进一步详述!