您好,并提前感谢您提出的任何建议。
我想要完成的任务:当用户点击链接时,我想添加自动增量ID,点击数据库的URL和时间戳,然后将它们发送到URL链接登录页面。
我遇到的问题:点击链接时,URL未添加到数据库,重定向也失败。
以下是我正在处理的代码:
ad_click_tracking.php
<?php
include ("admin/includes/connect.php");
mysql_select_db("$database") or die(mysql_error());
//Collecting the destination URL from the clicked link
$redirect = mysql_real_escape_string($_GET['page']);
//Insert destination URL and time stamp into MySQL
$page_insert = mysql_query("INSERT INTO ad_click_tracking (`url`, `date`) VALUES ('$redirect', now())") or die(mysql_error());
//Redirecting user to the clicked URL
header("Location: $redirect");
//Debugging to see if we collected the URL
echo "Redirect URL: $redirect";
?>
header.php (包含要跟踪的链接 - 第一个链接是内部第二个链接是外部的)
<a href="http://recyclingkansascity.com/ad_click_tracking.php?page="index.php" target="_blank"><img src="/images/header_banner/recycling_kansas_city_header.png" width="620px" height="340px" alt="Recycling Banner" title="Recycling Kansas City"></a></li>
<a href="http://recyclingkansascity.com/ad_click_tracking.php?page="http://paws4autism.org" target="_blank"><img src="/images/header_banner/funny_bunny_5k_autism_egg_hunt.png" width="620px" height="340px" alt="Paws 4 Autism" title="Paws 4 Autism Easter Event"></a></li>
当我点击内部或外部链接时,浏览器会将URL显示为recyclingkansascity.com/ad_click_tracking.php?page=然后当我检查数据库时,ID已自动递增并且插入了时间戳,但URL是空值。出于某种原因($ _GET ['page'])似乎没有抓住页面URL,我还没有弄清楚为什么。我阅读了相关的“类似问题”,但未能找到答案。
答案 0 :(得分:0)
创建链接的更好方法是使用PHP代码:
$url = 'http://paws4autism.org';
echo '<a href="http://recyclingkansascity.com/ad_click_tracking.php?page='
. htmlspecialchars(urlencode($url)) . '" target="_blank">...</a>';
这会将url作为查询字符串转义。如果不这样做,它可能会或可能不会工作,但这是正确的方法。例如,http://paws4autism.org
将成为http%3A%2F%2Fpaws4autism.org
。如果你想知道双重转义,这里有一点分解:
$url = 'http://paws4autism.org';
// escape query string when constructing url:
// (this would be necessary even if you weren't rendering it as a link in html)
$href = 'http://recyclingkansascity.com/ad_click_tracking.php?page=' . urlencode($url);
// escape for html rendering:
echo '<a href="' . htmlspecialchars($href) . '">...</a>';
在ad_click_tracking.php中,您应该在继续之前检查是否设置了$_GET['page']
。此外,重定向到页面参数的MySQL转义版本也没有意义。所以,而不是:
$redirect = mysql_real_escape_string($_GET['page']);
// (...insert with $redirect...)
header("Location: $redirect");
我会这样做:
if (!isset($_GET['page'])) {
// this is a little bit more informative than just dying
header($_SERVER['SERVER_PROTOCOL'] . ' 400 Bad Request');
die('No page specified');
}
$redirect = $_GET['page'];
$s_redirect = mysql_real_escape_string($redirect);
// (...insert with $s_redirect...)
header("Location: $redirect");
最后,PHP的普通mysql库并不是真的值得推荐使用。 Mysqli(使用几乎相同的语法)或PDO是首选。见这里:MySQL vs MySQLi when using PHP
哦,至于进行HTTP重定向的安全性,请参阅此页面(我建议阅读所有答案)。唯一真正的问题与网络钓鱼诈骗有关。您无法提供用户通常无法访问的文件。 php security for location header injection via $_GET