我有一个简短的url脚本,我想为它添加链接命中功能。
当有人访问由脚本生成的链接时,点击量会在数据库中更新。
我制作了一个mysql表,其中包含以下字段:
id, shortened_url, url, timestamp, hits.
`id` int(11) NOT NULL auto_increment,
`shortened_url` varchar(10) NOT NULL,
`url` varchar(255) NOT NULL,
`hits` int(11) NOT NULL,
`timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP,
感谢您的帮助。
我想,如果你真的想在数据库中更新它,而不是使用像谷歌应用程序这样的解决方案,你可以执行以下操作。
$(document).ready(function(){
$("a .scriptGenerated").bind('click', function(e){
e.preventDefault();
var postUrl = 'some page on your site to post to';
var shortUrl = $(this).attr('shorturl'); ///replace short url with whatever that means
var url = $(this).attr('href');
var time = new Date();
var data = {"shorturl":shorturl, "url" : url, "time" : time};
$.post({null, postUrl, data, success:function(result){window.location = url;}});
});
});
我认为这其中有一些错误,但其想法是它可以阻止具有"scriptGenerated"类的锚点执行,从中提取数据(锚点DOM元素),并将其发布到应用程序中的某个页面,在那里您可以从POST中获取数据。如果成功,它将重定向到相应的页面。也许我误解了你的意图。
在您的短URL重定向页面上,执行以下查询:
SELECT url from [tablename] WHERE shortened_url=[short_url]
UPDATE [table_name] SET hits=hits+1 WHERE shortened_url=[short_url]
#redirect to url retrieved from first query
如果您愿意,可以使用shortened_url
作为表的唯一标识符(因为根据定义,每个短URL都必须是唯一的)。在这种情况下,不需要数字id
。
试试这个:
$shortened_url = mysql_real_escape_string($shortened_url);
mysql_query("UPDATE [tablename] SET hits=hits+1 WHERE
shortened_url='$shortened_url'");
$query = mysql_query("SELECT * FROM [tablename] WHERE
shortened_url='$shortened_url' LIMIT 1", $db);
echo mysql_errno($link) . ": " . mysql_error($link);
$row = mysql_fetch_row($query);
if (!empty($row)) {
header("HTTP/1.1 301 Moved Permanently");
header("Location: " . $row[2]);
}