<?php
// 配置数据库连接
$host = 'localhost';
$db = 'ad_database';
$user = 'root';
$pass = 'password';
$dsn = "mysql:host=$host;dbname=$db;charset=utf8";
// 创建 PDO 实例
try {
$pdo = new PDO($dsn, $user, $pass);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
echo '连接失败: ' . $e->getMessage();
exit;
}
// 处理广告点击
if (isset($_GET['ad_id']) && isset($_GET['user_id'])) {
$adId = (int)$_GET['ad_id'];
$userId = (int)$_GET['user_id'];
// 记录广告点击事件
$clickStmt = $pdo->prepare('
INSERT INTO ad_clicks (ad_id, user_id, clicked_at)
VALUES (:ad_id, :user_id, NOW())
');
$clickStmt->execute(['ad_id' => $adId, 'user_id' => $userId]);
// 获取广告目标 URL
$adStmt = $pdo->prepare('
SELECT url
FROM ads
WHERE id = :ad_id
');
$adStmt->execute(['ad_id' => $adId]);
$ad = $adStmt->fetch(PDO::FETCH_ASSOC);
if ($ad) {
// 重定向到广告目标 URL
header('Location: ' . $ad['url']);
exit;
} else {
echo '广告不存在。';
}
} else {
echo '无效的广告 ID 或用户 ID。';
}
?>
-
记录广告点击事件:当用户点击广告时,系统通过
ad_id
和user_id
参数记录点击信息。点击事件会被插入到ad_clicks
表中,包括广告 ID、用户 ID 和点击时间 (clicked_at
)。 -
获取广告目标 URL:根据
ad_id
从ads
表中检索广告的目标 URL。系统会将用户重定向到这个 URL,以确保用户可以访问广告的实际内容。 -
安全性和验证:代码中使用了参数化查询来防止 SQL 注入攻击,并且只有在存在有效广告 ID 和用户 ID 时才会进行记录和重定向。
数据库表结构:
-
ads
表:存储广告信息id
(INT, 主键)url
(VARCHAR)
-
ad_clicks
表:记录广告点击信息id
(INT, 主键)ad_id
(INT, 外键,指向ads
表)user_id
(INT)clicked_at
(DATETIME)