【问题标题】:How to get the UTM using PHP?如何使用 PHP 获取 UTM?
【发布时间】:2017-02-19 16:06:19
【问题描述】:

我是 UTM(Urchin 跟踪模块)的新手,我想获取用户单击链接的 UTM 参数(例如 facebook、google、twitter)以及用户单击具有相同 utm 源的链接的次数并保存到mysql数据库中。

我有一个 PHP sn-p,但 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 db表结构

【问题讨论】:

  • UTM 或 UTC(坐标或时间)?
  • UTM(Urchin 跟踪模块)我想跟踪用户点击特定 URL 时的来源
  • 它们通常通过 Url 传输(即 GET 而不是 POST)。还有,SQL 注入。
  • @EikePierstorff 我现在把$_POST 改成了$_GET,如何保存utm 参数(例如example.com/…)?

标签: php google-analytics utm


【解决方案1】:

在我们担心获取 UTM 属性的值之前,您有一个需要注意的安全问题。您目前正在获取未经处理(不安全)的用户输入(通过$_POST['var'])并将其直接放入数据库查询中,这是一种允许 SQL 注入的不安全做法(例如,恶意用户可以向您发送一个特制的字符串,该字符串给出他们能够对您的数据库做任何他们喜欢做的事情)。

请阅读this Stack Overflow question,了解如何避免 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);,我假设您在上面详述的代码之后的某个位置。
  • 是的,我在每个 utm 参数中设置了一些虚拟值,但是当我检查数据库时,utm 的值没有保存
  • 好的 - 所以我建议您在进行查询之前暂时 print_r($var)ing 你的 $utm_ 变量以确保它们已设置,如果它们已设置,则检查 $result = $conn->query($sql); 的值以查看如果查询确实有效。 AFAIK $result 将在成功时为真
  • 当我尝试print_r时,utm_variables的值显示正确
  • 酷,所以在这种情况下,您的问题要么与数据库架构(表和列的结构)有关,要么与查询有关。您能否使用DESCRIBE utm_param 的输出更新您的问题以显示表结构(假设您使用的是 MySQL?
猜你喜欢
  • 2017-02-13
  • 2020-05-03
  • 2017-04-01
  • 2013-08-16
  • 1970-01-01
  • 2019-11-04
  • 1970-01-01
  • 1970-01-01
  • 2018-10-06
相关资源
最近更新 更多