本文目录导读:

在 PHP 中实现“代码收藏”功能,通常有几种不同的理解方式,根据你的需求,我为你整理了最常见的三种场景及对应的实现方案:
在你的项目(Web应用)中,为用户提供“收藏”功能
这是最常见的业务需求,比如收藏文章、商品等,需要数据库支持。
数据库表设计
-- 收藏表 CREATE TABLE `favorites` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_id` int(11) NOT NULL COMMENT '用户ID', `target_type` varchar(20) NOT NULL COMMENT '类型:article/product', `target_id` int(11) NOT NULL COMMENT '目标ID', `created_at` timestamp DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `unique_fav` (`user_id`, `target_type`, `target_id`) -- 防止重复收藏 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
PHP 添加/取消收藏接口
<?php
// favorite.php
session_start();
require 'db.php'; // 数据库连接
$user_id = $_SESSION['user_id'];
$target_id = (int)$_POST['target_id'];
$target_type = $_POST['target_type'];
// 检查是否已收藏
$check = $pdo->prepare("SELECT id FROM favorites WHERE user_id = ? AND target_type = ? AND target_id = ?");
$check->execute([$user_id, $target_type, $target_id]);
if ($check->fetch()) {
// 已收藏:取消收藏
$delete = $pdo->prepare("DELETE FROM favorites WHERE user_id = ? AND target_type = ? AND target_id = ?");
$delete->execute([$user_id, $target_type, $target_id]);
echo json_encode(['status' => 'unfavorited']);
} else {
// 未收藏:添加收藏
$insert = $pdo->prepare("INSERT INTO favorites (user_id, target_type, target_id) VALUES (?, ?, ?)");
$insert->execute([$user_id, $target_type, $target_id]);
echo json_encode(['status' => 'favorited']);
}
?>
前端 AJAX 调用
// 前端按钮点击
document.querySelector('.fav-btn').addEventListener('click', function() {
fetch('favorite.php', {
method: 'POST',
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
body: 'target_id=123&target_type=article'
})
.then(res => res.json())
.then(data => {
// 根据 data.status 切换按钮状态
});
});
在本地代码中,将某段代码“收藏”到自己的小工具里
如果你是想写一个个人代码片段管理器,可以用 JSON 或 SQLite 存储。
PHP 代码片段管理器(SQLite版)
<?php
// code_saver.php
class CodeSaver {
private $db;
public function __construct() {
$this->db = new PDO('sqlite:code_snippets.db');
$this->db->exec("CREATE TABLE IF NOT EXISTS snippets (
id INTEGER PRIMARY KEY,
title TEXT,
code TEXT,
language TEXT,
created_at DATETIME
)");
}
// 保存代码片段
public function save($title, $code, $language) {
$stmt = $this->db->prepare("INSERT INTO snippets (title, code, language, created_at) VALUES (?,?,?,?)");
return $stmt->execute([$title, $code, $language, date('Y-m-d H:i:s')]);
}
// 获取所有收藏的代码
public function getAll() {
return $this->db->query("SELECT * FROM snippets ORDER BY created_at DESC")->fetchAll(PDO::FETCH_ASSOC);
}
}
// 使用示例
$saver = new CodeSaver();
$saver->save("PHP数据库连接", "mysqli_connect(...)", "php");
$saver->save("JavaScript弹窗", "alert('Hello')", "javascript");
print_r($saver->getAll());
?>
保存 PHP 文件本身(代码文件的备份)
如果你想把一段 PHP 代码保存为 .php 文件存到服务器上:
<?php // save_code_file.php $code = $_POST['code']; // 从表单或编辑器获取 $filename = 'saved_' . time() . '.php'; // 写入文件(确保目录有写权限) file_put_contents($filename, '<?php ' . $code . ' ?>'); echo "代码已保存为: " . $filename; ?>
总结建议
- 如果是 Web 应用功能:使用 场景一(数据库 + AJAX),这是最规范的方式。
- 如果是个人工具:使用 场景二(SQLite/JSON),无需额外安装数据库。
- 如果是简单文件备份:使用 场景三,一行代码搞定。
你可以根据你的具体需求选择适合的实现方式,如果还有其他细节问题(比如登录认证、防SQL注入等),欢迎继续追问!