建立一个数据库来跟踪哪些用户点击了哪些链接?
Posted
技术标签:
【中文标题】建立一个数据库来跟踪哪些用户点击了哪些链接?【英文标题】:setting up a database for tracking which users have clicked which links? 【发布时间】:2012-04-29 06:46:05 【问题描述】:我将尝试详细说明我的问题。
我最近在我的大学获得了一个入门级兼职开发人员职位,以努力提高我的开发技能。虽然我过去使用过 mysql,但只是在一门课程中简要介绍了它,因为我主要是前端人员(html/CSS/JS)。
无论如何,雇用我的部门有一个专为即将入学的学生设计的网站,以帮助他们适应大学生活。它有教程和视频供他们观看等。为了访问该站点,他们必须登录到他们的大学帐户(使用 LDAP)。帐户名称的格式为 abc1234。
现在,我的问题是我需要为员工创建一种方法来跟踪新生观看了哪些教程/视频。他们希望我使用数据库来做到这一点。可能会有成千上万的学生,他们希望能够准确地看到哪些学生已经/没有点击每个链接/观看了每个视频。
我应该如何为此设置数据库?他们想要跟踪多个链接/教程/视频。如果有一种方法可以跟踪哪些用户观看了视频,则可以获得奖励积分,但不是必需的。
我相信我需要使用 php 来处理浏览器和数据库之间的交换,对吗?
感谢您提供任何帮助或提示。 :)
【问题讨论】:
你了解主键和外键的关系吗?如果不是,您需要从关系数据库教程开始 - phpknowhow.com/mysql/mysql-basics - 但简而言之,您最终会得到一个充满学生的表格和一个充满视频的表格。然后,您将拥有第三个表,该表创建学生和视频之间的关系,通常称为映射表,方法是将一个的主键链接到另一个的主键以及可能的日期字段和位字段(如果已完成)。跨度> 这远远超过了“前端设计师”的头脑。我们有一个由 3 人组成的团队,并分配了大约 4-6 周的时间来获得一个完整的跟踪系统,比如这个 wokring(我们跟踪电子邮件以及在什么时间从哪封电子邮件中点击了哪些链接,甚至之后它们去了哪里)你需要从一个通用处理程序来提供来自数据库的链接,以某种方式知道它是哪个学生并将其保存到另一个表中。您需要几个表和 sql 调用。 @RThomas:需要那么多表吗?我以为我可以用一张桌子做到这一点; *拥有和自动递增的 ID,*用户 ID(来自 LDAP,它们的结构都类似于 abc1234)*六列代表视频链接,然后每当用户单击链接时,检查他们的 ID 是否已经在表中。如果不是,请附加它。还将当前日期和时间附加到他们单击的链接中。这里需要主键/外键吗? 如果您可以保证只有六个视频,并且永远不会有更多(或更少)或其他报告、统计数据,您可能想要运行,而您不这样做'不在乎跟踪一个视频是否被多次观看......那么是的,你可以做一个表格 - 它基本上是一个电子表格。 @RThomas 出于好奇,添加更多链接会产生什么并发症?我不只是创建另一个列来代表新链接吗?它不需要填充任何数据,因为一旦用户单击新链接,它就会被填充。我对数据库不是很熟悉,但我不明白这会引起怎样的担忧? 【参考方案1】:您可以简单地制作一个 PHP 脚本,为它们检索请求的链接,同时向 MySQL 添加一个值。
如果我要这样做,我可能会这样做:
<a href="getResource.php?res=video1.mpg&type=video">Video 1</a>
在 PHP 中,我只需从会话中获取资源、类型和用户 ID,将它们放入数据库,然后检索他们正在寻找的资源。要跟踪他们是否全程观看了视频,您可以使用 javascript 来观察播放器即将结束的事件,然后只需使用没有滑动条的皮肤。
【讨论】:
你好,这正是我想做的。如何从会话中检索用户 ID?我可以弄清楚其余的,但那部分我被难住了。在他们使用 LDAP 登录后,我如何检索他们的凭据以存储在我的数据库中? 我大概有 5 年没有对 LDAP 做过任何事情了。我仔细阅读了它的 php 手册,并假设您有 this 代码。您需要启动一个会话,并从登录脚本的 POST 中检索用户名和密码。if ($ldapbind) $_SESSION['userid'] = $ldapusername; header("Location: http://yourserver.com/page.php"); else echo "login failed";
然后,您的脚本只需从 $_SESSION
获取用户 ID,并使用它来更新您的数据库。如果您需要更多帮助,请告诉我。
会话存储是否只适用于单个页面?我已经设置了一个登录页面,并且已经使与 LDAP 的连接正常工作。我开始了一个会话并设置了会话变量。然后我将用户重定向到“教程”页面。当我尝试访问此处存储的会话变量时,它们未设置。如何使会话变量在域上持久化?
您需要在每个页面上使用session_start();
。在<?php
之后声明它
由于您使用 LDAP 来授权您的用户,因此只需要数据库来跟踪链接点击。您可以通过多种方式执行此操作,最简单的可能是最好的。一个以 userID 作为主键的数据库,然后是每个链接的列,每个链接都有一个简单的布尔值 true 或 false(1 或 0)字段,将默认值设置为 0,然后我编写脚本来查找用户,如果他们不存在,创建一行,并添加他们观看了他们观看的任何视频。【参考方案2】:
例如,您需要一个表格“users: id, name, etc...”和一个表格“clicks: user_id, url”。
要跟踪链接点击,您可以执行以下操作:
<a hreF="log_click.php?url=<?php echo urlencode("some_url?some=param&etc=anything"); ?>">
log_click.php
<?php
$url = $_GET['url'];
$user = /* ie. $_SESSION['user_id'] */
/* insert to database */
header('Location: '. $url); // maybe need urldecode($url) here
exit;
?>
【讨论】:
您好,感谢您的回复;我不清楚的部分是我需要编写的 PHP 以从 LDAP 获取用户 ID。是 $_SESSION['user_id'] 吗? ldap 信息不会自动显示在会话变量中。 php中有ldap_*
方法【参考方案3】:
有趣的项目。您应该从当前访问的页面中提取用户,并将其存储在每个用户的访问页面日志中(在数据库中)。
【讨论】:
以上是关于建立一个数据库来跟踪哪些用户点击了哪些链接?的主要内容,如果未能解决你的问题,请参考以下文章