使用PHP和MySQL数据库构建可跟踪链接


Building trackable links using PHP and a MySQL DB

我有一个电子邮件列表和与每个电子邮件相关的个性化PDF(一对一关系)。我还有一个托管PDF的服务器。我想使用我服务器上的文件链接向每个人发送他们的个性化PDF。当我向某人发送该链接时,我想跟踪他们是否下载了该文件。

这个download.php脚本(下面的完整代码)被推荐给,因为我可以将我的链接作为http://yourdomain.com/download.php?email={!email}包括在内,这样当它们被点击时,脚本会写入MySQL数据库,以跟踪点击链接的电子邮件地址,然后提供文件。

下载.php脚本

<?php
mysql_connect('localhost', 'username', 'password');
mysql_select_db('dbname');
$sql = "INSERT INTO downloads (email) VALUES ('" . mysql_real_escape_string($_GET['email']) . "')";
mysql_query($sql);
header("Content-type: application/pdf");
readfile("/path/to/thefile.pdf");
?>

我的问题是,代码readfile("/path/to/thefile.pdf");的最后一行看起来似乎需要这样写,即它包含单个文件的路径,这对我来说是不起作用的。我是否正确阅读了代码?如果是,有没有办法为我的目的修改它?

我希望我能正确理解你的问题。您必须在服务器上粘贴PDF的路径。例如。http://www.youdomain.com/pdfs/october.pdf

避免使用mysql函数并始终使用PDO。

这就是你在PDO 中的做法

$hostname = 'localhost';
$username = 'username';
$password = 'password';
$con = new PDO("mysql:host=$hostname;dbname=dbname", $username, $password);
$user_mail = $_GET['email'];
$sql = "INSERT INTO downloads (email) VALUES (:emailVal)";
$statement = $con_db->prepare($sql);
$statement->execute(array(':emailVal'=> $user_mail));
header("Content-type: application/pdf");
readfile("/path/to/thefile.pdf"); //paste to your PDF on your server