如何使用PHP获取UTM?

4

我对UTM(Urchin跟踪模块)很陌生,我想获取用户从何处点击链接的UTM参数(如Facebook,Google,Twitter),以及用户使用相同UTM来源点击链接的次数,并将其保存到MySQL数据库中。

我有一个PHP片段,但是UTM参数没有被获取和保存在数据库中。

如何解决这个问题?

if(isset($_SERVER['HTTP_REFERER'])){
 $utm_source = isset($_GET['utm_source']) ? $_GET['utm_source'] : '';
 $utm_medium = isset($_GET['utm_medium']) ? $_GET['utm_medium'] : '';
 $utm_campaign = isset($_GET['utm_campaign']) ? $_GET['utm_campaign'] : '';
 $utm_term = isset($_GET['utm_term']) ? $_GET['utm_term'] : '';

echo $_SERVER['HTTP_REFERER'];

$sql = "INSERT INTO utm_param(utm_source,utm_medium,utm_campaign)
        VALUES('".$conn->real_escape_string($utm_source)."',
               '".$conn->real_escape_string($utm_medium)."',
               '".$conn->real_escape_string($utm_campaign)."')";
}

utm_param 数据库表结构

描述 utm_param;


UTM还是UTC(坐标或时间)? - ScaisEdge
UTM(Urchin跟踪模块),我想要追踪用户从哪里来,当他们点击特定的URL时。 - User014019
它们通常通过Url传输(即GET而不是POST)。此外,还有SQL注入。 - Eike Pierstorff
@EikePierstorff,我现在将$_POST更改为$_GET,如何保存UTM参数(例如http://example.com/?utm_source=facebook&utm_medium=social&utm_campaign=test)? - User014019
1个回答

6
在我们开始担心如何获取UTM属性的值之前,您需要关注一个安全问题。您目前正在采用未经过滤(不安全的)用户输入(通过$_POST['var'])并直接放入数据库查询中,这是一种不安全的做法,容易遭受SQL注入攻击(例如,恶意用户可以发送一个特别制作的字符串,使他们能够对您的数据库进行任意操作)。
请阅读此Stack Overflow问题了解如何避免PHP中的SQL注入。
通常,跟踪用户来源的标准utm参数会成为查询字符串的一部分,例如: http://yoursite.com?utm_source=google&utm_campaign=campaign_name 除非您正在执行非标准操作,否则这将是向您的服务器发出GET请求(而不是POST),因此您的变量将通过$_GET超级全局变量可用。例如$_GET['utm_source']$_GET['utm_campaign']
查看您的表模式,您还可能需要将auto_increment添加到ID列中,以便在添加新行时自动获取值。
ALTER TABLE `utm_param` 
CHANGE COLUMN `id` `id` INT(100) NOT NULL AUTO_INCREMENT;

假设这些值都已设置(例如,浏览器已发送引用者值以及查询字符串中的utm_x参数),那么应该可以工作。您还需要一个$result = $conn->query($sql);,我假设您在上面详细说明的代码之后的某个地方已经有了它。 - Matt Renner
是的,我给每个utm参数设置了一些虚拟值,但是当我检查数据库时,utm的值没有保存。 - User014019
好的 - 我建议在查询之前暂时使用 print_r($var) 打印您的 $utm_ 变量,以确保它们已设置,如果已设置,则检查 $result = $conn->query($sql); 的值以查看查询是否实际起作用。据我所知,成功时 $result 将为 true。 - Matt Renner
当我尝试使用print_r打印时,utm_variables的值被正确地显示。 - User014019
很棒,那么在这种情况下,你的问题要么出在数据库模式(表和列的结构)上,要么出在查询上。你能否更新你的问题,使用DESCRIBE utm_param输出来展示表结构(假设你正在使用MySQL)? - Matt Renner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接