php实现书签功能
实现书签功能的基本思路
书签功能通常需要存储用户收藏的网页链接、标题等信息,并提供添加、删除、查看等操作。PHP结合MySQL数据库是常见的实现方式。
数据库设计
创建一个简单的书签表结构:
CREATE TABLE bookmarks (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
title VARCHAR(255) NOT NULL,
url VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id)
);
添加书签功能
创建表单页面用于提交新书签:
<form action="add_bookmark.php" method="post">
<input type="text" name="title" placeholder="书签标题" required>
<input type="url" name="url" placeholder="URL" required>
<button type="submit">添加书签</button>
</form>
处理添加操作的PHP脚本:

<?php
session_start();
require 'db_connection.php';
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$title = $_POST['title'];
$url = $_POST['url'];
$user_id = $_SESSION['user_id'];
$stmt = $pdo->prepare("INSERT INTO bookmarks (user_id, title, url) VALUES (?, ?, ?)");
$stmt->execute([$user_id, $title, $url]);
header("Location: bookmarks.php");
exit;
}
?>
显示书签列表
查询并显示用户的所有书签:
<?php
session_start();
require 'db_connection.php';
$user_id = $_SESSION['user_id'];
$stmt = $pdo->prepare("SELECT * FROM bookmarks WHERE user_id = ? ORDER BY created_at DESC");
$stmt->execute([$user_id]);
$bookmarks = $stmt->fetchAll();
?>
<ul>
<?php foreach ($bookmarks as $bookmark): ?>
<li>
<a href="<?= htmlspecialchars($bookmark['url']) ?>" target="_blank">
<?= htmlspecialchars($bookmark['title']) ?>
</a>
<a href="delete_bookmark.php?id=<?= $bookmark['id'] ?>">删除</a>
</li>
<?php endforeach; ?>
</ul>
删除书签功能
实现删除书签的PHP脚本:
<?php
session_start();
require 'db_connection.php';
if (isset($_GET['id'])) {
$id = $_GET['id'];
$user_id = $_SESSION['user_id'];
$stmt = $pdo->prepare("DELETE FROM bookmarks WHERE id = ? AND user_id = ?");
$stmt->execute([$id, $user_id]);
header("Location: bookmarks.php");
exit;
}
?>
安全注意事项
对所有用户输入进行验证和过滤:

$url = filter_var($_POST['url'], FILTER_VALIDATE_URL);
if ($url === false) {
// 处理无效URL
}
使用预处理语句防止SQL注入,对输出内容使用htmlspecialchars()防止XSS攻击。
扩展功能建议
添加分类标签功能:
ALTER TABLE bookmarks ADD COLUMN tags VARCHAR(255);
实现搜索功能:
$search = '%' . $_GET['q'] . '%';
$stmt = $pdo->prepare("SELECT * FROM bookmarks WHERE user_id = ? AND (title LIKE ? OR url LIKE ?)");
$stmt->execute([$user_id, $search, $search]);
添加书签导入/导出功能,支持常见格式如HTML书签文件。






