php实现观看记录
PHP实现观看记录功能
在网站或应用中实现观看记录功能,通常需要记录用户浏览过的内容,并在需要时展示。以下是实现方法:
数据库设计 创建一张表存储观看记录,字段可包括:记录ID、用户ID、内容ID、观看时间等。示例SQL:
CREATE TABLE viewing_history (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
content_id INT NOT NULL,
viewed_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id),
FOREIGN KEY (content_id) REFERENCES contents(id)
);
记录观看行为 当用户访问内容页面时,插入一条记录:

// 连接数据库
$pdo = new PDO('mysql:host=localhost;dbname=your_db', 'username', 'password');
// 获取用户ID和内容ID
$userId = $_SESSION['user_id'];
$contentId = $_GET['content_id']; // 从URL参数获取
// 插入观看记录
$stmt = $pdo->prepare("INSERT INTO viewing_history (user_id, content_id) VALUES (?, ?)");
$stmt->execute([$userId, $contentId]);
查询观看记录 获取用户的观看历史并按时间倒序排列:
$stmt = $pdo->prepare("SELECT c.* FROM contents c
JOIN viewing_history vh ON c.id = vh.content_id
WHERE vh.user_id = ?
ORDER BY vh.viewed_at DESC
LIMIT 10");
$stmt->execute([$userId]);
$history = $stmt->fetchAll(PDO::FETCH_ASSOC);
显示观看记录 在页面上循环输出观看记录:

foreach ($history as $item) {
echo '<div class="history-item">';
echo '<h3>' . htmlspecialchars($item['title']) . '</h3>';
echo '<p>观看时间: ' . $item['viewed_at'] . '</p>';
echo '</div>';
}
防止重复记录 可添加检查避免同一内容重复记录:
$stmt = $pdo->prepare("SELECT id FROM viewing_history
WHERE user_id = ? AND content_id = ?
ORDER BY viewed_at DESC LIMIT 1");
$stmt->execute([$userId, $contentId]);
$existing = $stmt->fetch();
if (!$existing) {
// 插入新记录
$insertStmt = $pdo->prepare("INSERT INTO viewing_history (user_id, content_id) VALUES (?, ?)");
$insertStmt->execute([$userId, $contentId]);
} else {
// 更新已有记录的时间
$updateStmt = $pdo->prepare("UPDATE viewing_history SET viewed_at = CURRENT_TIMESTAMP WHERE id = ?");
$updateStmt->execute([$existing['id']]);
}
注意事项
- 确保用户认证系统正常工作,防止未授权访问
- 对用户输入进行验证和过滤,防止SQL注入
- 考虑添加分页功能处理大量历史记录
- 可设置自动清理机制,删除过期的历史记录






