php聪明的学习者

时间:2010-04-16 16:31:51

标签: php mysql ajax

是否有可能创建一个可以计算重定向的html或php页面?

我的意思是,假设您有一个带有链接的页面。我希望页面计算每个ip地址或用户名点击链接的次数。计数将报告到日志文件或文本文档中。

3 个答案:

答案 0 :(得分:0)

您可以使用某些网络统计软件,例如Piwik

您还可以附加链接以便捕获外链。我已经包含了一些基本代码。

<a href="http://sitedomain.com/question/{url}">Link to be counted</a>

然后,如果您使用类似CodeIgniter的框架,请将此添加到您的控制器。如果您愿意,add_outlink将选择一个数据库并添加一个带有IP地址,链接和日期戳的行。

function question($url)
{
    $this->add_outlink($url);

    header("Location: ".$url);
}

答案 1 :(得分:0)

*。 PHP解决方案。创建一个将生成链接的函数:

function getCounterLink($url)
{
   if (urlLocal($url)) // no need to count the click
      return $url;
   return 'http://mysite.com/counter.php?url='.urlencode($url);
}

使用此功能在模板中添加链接:

<a href="<?php echo getCounterLink($url) ?>">Link</a>

然后创建counter.php,注册点击并将用户重定向到感兴趣的网址。

*。 JavaScript解决方案。如果您使用的是Ajax,则可以使用JQuery并为每个链接添加onclick事件。单击链接时,javascript会对服务器上的计数器进行ajax调用。当您拥有许多模板并且不想全部修改它们时,可以将此变体视为一种解决方法。

答案 2 :(得分:0)

首先制作一个sql表来记录;

CREATE TABLE `link_counter` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `link` text COLLATE utf8_general_ci NOT NULL,
  `ip` text COLLATE utf8_general_ci NOT NULL,
  `times` int(11) NOT NULL DEFAULT '1',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;

比你必须知道用php代码学习ip地址并制作一个全局变量ip;

    if (!empty($_SERVER['HTTP_CLIENT_IP']))   
        {
          $ip=$_SERVER['HTTP_CLIENT_IP'];
        }
        else if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) 
        {
          $ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
        }
        else
        {
          $ip=$_SERVER['REMOTE_ADDR'];
        }
echo '<script type="text/javascript">
var ip='.$ip.';
</script>';

而不是制作剧本;

<script type="text/javascript">
function record(link) 
{ //jquery
    $.post("record.php",{ link: link , ip: ip});    //post link to record.php
    location.href=link;                             //go to link    
}
</script>

比制作这样的链接;

<a href="#" onclick="record('http://www.google.com')">GOOGLE</a>

和最后一次制作了record.php;

$link=$_POST['link'];
$cip=$_POST['ip'];
if ($link!='' && $cip!='') 
{
  $sorgu="select count(id),times,id from link_counter where link=".$link." and ip=".$cip;
  $what=mysql_query($sorgu);
  while ($isit=mysql_fetch_array($what)) 
  {
  $recorded=$isit['count(id)'];
  $id=$isit['id'];;
          if ($recorded>0) 
          {
          $times= $isit['times'];
          }
          else 
          {
          $times=0;
          }
  }
$add_times=$times+1;
    if ($recorded>0)
    {
    $add="update link_counter set times='".$add_times."' where id='".$id."'";
    $add_action=mysql_query($add);
    }
    else 
    {
    $add="insert into link_counter times='".$add_times."' , link='".$link."' , ip='".$cip."'";
    $add_action=mysql_query($add);
    }
}