如何计算横幅展示次数和点击次数

时间:2012-01-31 23:26:52

标签: php mysql impressions

我们有一个小的PHP脚本,在我们的网站上显示随机广告。横幅是从我们指定的任何位置提供的。

我真正想知道的是,或者指出正确的方向是,我们能否以某种方式整理每个横幅获得的展示次数以及该横幅上的点击次数。

我确信这可以在php中完成,并存储在db中。只是没有线索。我在Google上搜索过,似乎我能找到的所有东西都可以追溯到2002年和2003年。大声笑。

这是我们的剧本:

<?php
$Img1 = "path to image folder/banner.png";
$Alt1 = "alt text for banner";
$Url1 = "http://www.externaldomain.com";

$Img2 ="path to image folder/banner.png";
$Alt2 = "alt text for banner";
$Url2 = "http://www.externaldomain.com";

$Img3 ="path to image folder/banner.png";
$Alt3 = "alt text for banner";
$Url3 = "http://www.externaldomain.com";

$Img4 ="path to image folder/banner.png";
$Alt4 = "alt text for banner";
$Url4 = "http://www.externaldomain.com";

$Img5 ="path to image folder/banner.png";
$Alt5 = "alt text for banner";
$Url5 = "http://www.externaldomain.com";

$num = rand (1,5);

$Image = ${'Img'.$num};
$Alt = ${'Alt' .$num};
$URL = ${'Url'.$num};

Print "<a href=\"".$URL."\"><img src=\"".$Image."\" alt=\"".$Alt."\" /</a>"; ?>

启动上述代码(我们触发包含请求)

<?php include ("../adserver/thescriptabove.php"); ?>

任何帮助表示赞赏

5 个答案:

答案 0 :(得分:13)

我看到你已经选择了一个答案,所以我不确定你是否已经完成了这一切,但我正在为你写一个小教程。终于完成了,希望它仍然可以帮助你。

您的方法似乎适用于投放横幅广告,但如果您要进入数据库并跟踪点击次数/展示次数,我建议您全力以赴。因此,您也可以将横幅广告属性存储在数据库中。我将继续前进,并假设您的服务器/ Web主机允许一些免费的MySql数据库。

您需要做的是创建数据库,以及数据库的用户/管理员。然后,您将使用MySql管理器访问数据库,大多数Web主机提供phpMyAdmin。进入数据库后,您需要设置table来记录数据。

以下是我希望您进行设置的方法:

|Table Name: Banners      |
|-------------------------|
|Field:    | Type:        |
|-------------------------|
|ID        | int(5)       | The Primary Key and Autoincrement attributes should be set on the ID field as well
|Image     | varchar(100) |
|Url       | varchar(100) |
|Caption   | varchar(100) |
|Views     | int(10)      |
|Clicks    | int(10)      |

现在你已经完成了数据库,这里有一个难点,即PHP。我已经为你做了很多,但它没有经过测试,所以我肯定会有bug,你必须要解决。但它应该指向正确的方向,并帮助你学习。

<?PHP

// First of all, we need to connect to the MySql server
// For more info, check out: http://php.net/manual/en/function.mysql-select-db.php
$conn = mysql_connect("localhost", "username", "password");
if(!$conn){
    die('Could not connect to the MySql Server ' . mysql_error());
}

// Now that we've connected to the MySql sever, we need to select the database
// More info can be found on the same link as above
$db_selected = mysql_select_db('my_database', $conn);
if(!$db_selected) {
    die ('Could not select the MySql Database: ' . mysql_error());
}

// Now we need to check the URL parameters to see, if we came to this page normally or because a banner was clicked
// If normally, we serve a random banner and increment the Views field in the database
// Otherwise, we increment the Clicks field and direct the user to the banner's URL


if(!isset($_GET['Clicked'])){
    // if the Clicked parameter is not set, we came to the page normally

    // Let's select a random banner from the database
    $result = mysql_query("SELECT * FROM banners ORDER BY RAND() LIMIT 1") or die(mysql_error());
    $row = mysql_fetch_array(result);   

    // Now let's increment the Views field for the banner we selected
    mysql_query("UPDATE banners SET Views = Views + 1 WHERE ID = '" . $row['ID'] . "'") or die(mysql_error());

    // let's set the URL to this same page but with the Clicked parameter set
    $url = "banner_server.php?Clicked=" . $row['ID'];

    // Last but not least, we have to output the banner HTML
    // Notice, I set the caption on both the 'alt' and 'title' attributes of the 'img' tag,
    // that's because IE shows the value of the 'alt' tag when an image is hovered,
    // whereas Firefox shows the value of the 'title' tag, just thought you might want that!
    echo "<a href=\"" . $url . "\"><img src=\"" . $row['Image'] . "\" alt=\"" . $row['Caption'] . "\" title=\"" . $row['Caption'] . "\" /></a>";

}else{
    // Otherwise, increment the Clicks field and redirect

    // First, let's get the ID of the banner that was clicked from the Clicked parameter
    $id = (int)$_GET['Clicked'];

    // now let's increment the Clicks field for the banner
    mysql_query("UPDATE banners SET Clicks = Clicks + 1 WHERE ID = '" . $id . "'") or die(mysql_error());

    // now let's select the banner from the database so we can redirect to the URL that's associated with it
    $result = mysql_query("SELECT * FROM banners WHERE ID = '" . $id . "'") or die(mysql_error());
    $row = mysql_fetch_array(result);

    // redirect to the URL
    header("location: " . $row['Url']);
}


// Close the MySql connection
mysql_close($conn);

?>

祝你好运

答案 1 :(得分:6)

为什么不让谷歌分析为你做这件事?单击链接时触发事件并让谷歌捕获它?

onclick="_gaq.push(['_trackEvent', 'Event Name', 'click', 'Button title/name']);"

答案 2 :(得分:1)

您可以将$num存储在数据库中,非常容易获得您的展示次数。点击需要客户端操作。最简单的方法是调用一个javascript函数,该函数在通过AJAX点击横幅时计算:

print "<a href=\"".$URL."\" onclick=\"countClick($num);\"><img src=\"".$Image."\" alt=\"".$Alt."\" /</a>";

然后让你的javascript函数(countClick())执行AJAX,告诉服务器点击横幅。

另一种方法是拥有一个passthru页面:mysite.com/linkout.php?q=www.google.com然后让linkout.php计数链接并更新数据库,然后将它们重定向到URL中传递的变量。

答案 3 :(得分:1)

这是我的2美分,假设您在我们的网站上有分析:

输出链接时使用以下代码:

<a class="ad" href="http://thecatisginger.com/" target="_blank" onclick="ga('send', 'event', 'Block-3-Ads', 'Click', 'The-Cat-Is-Ginger-Ad');"><img src="http://citybymouth.com/wp-content/uploads/2015/02/TCIG-Advert.jpg" onload="ga('send', 'event', 'Block-3-Ads', 'Impression', 'The-Cat-Is-Ginger-Ad', {'nonInteraction': 1});" /></a>

解释:

<a class="ad" href="http://thecatisginger.com/" target="_blank"

经典链接href链接与课程&#39; ad&#39;,链接到网站,目标在新标签页中打开。容易。

onclick="ga('send', 'event', 'Block-3-Ads', 'Click', 'The-Cat-Is-Ginger-Ad');">

这是较新的&nbsp; analytics.js&#39;谷歌事件跟踪,onclick事件代码,基本上说,嘿,你已经点击了这个链接,所以&#39;发送&#39;这个&#39;事件&#39;我的分析&#39;活动&#39; (可在&#34;实时&gt;事件&#34;或&#34;行为&gt;事件&#34;)下查看。 &#34;嵌段-3-广告&#34;在我的网站上我个人知道的区域是我放置广告的区域,特别是它的右侧边栏区域,但它可以是你想要的任何东西,所以你可以把它作为一个广泛的类别类型的东西,就像一个盒子,你将拥有它您要跟踪的不同链接。 &#34;单击&#34;只是您想要跟踪的事件类型,可以是任何事物。 &#34;的-CAT-IS-姜广告&#34;是我要跟踪的具体广告,并提供有关的信息。

<img src="http://citybymouth.com/wp-content/uploads/2015/02/TCIG-Advert.jpg" 

然后你有一个带有src的img。容易。

onload="ga('send', 'event', 'Block-3-Ads', 'Impression', 'The-Cat-Is-Ginger-Ad', {'nonInteraction': 1});" />

然后你有一个onload事件,在加载图像时会触发,它说,&#39;发送&#39;此活动&#39;将其归类为&#39; Block-3-Ads&#39;事件,基本上图像加载在点击之前被计为“印象”,但不是因为这个小的“onload”&#39;在加载时调用,不是点击,而是加载/展示,再次,特别是加载的广告是“猫是生姜广告”,最后,通过了&#39;非互动&#39;参数为1,这只是告诉谷歌你正在跟踪一个非互动事件。

它非常自我解释,所以我可能输入太多。

警告:这不完美,因为页面可能会加载,广告可能位于视口下方,用户看不到,仍然会得到一个不准确的展示,所以接下来我会当用户实际滚动到广告本身并查看它时,只会尝试触发一次展示代码,而不是在每次页面加载该图片时触发它。

答案 4 :(得分:0)

感谢@Saad Imran提供的代码,也非常感谢问题发帖人

如果有人需要它,请稍后在php 7中更新代码

注意:同一数据库表,然后将此代码存储在banner.php文件中

<?php
    // to only count views

    // select a random banner from the database to show
    $rows = $db->QueryFetchArrayAll("SELECT * FROM banners ORDER BY RAND() LIMIT 1");
foreach ($rows as $row) {

    // Now let's increment the Views field for the banner we selected

    $url = "/banner.php?clicked=" . $row['ID'];

    echo "<a href=\"" . $url . "\"><img src=\"" . $row['Image'] . "\" alt=\"" . $row['Caption'] . "\" title=\"" . $row['Caption'] . "\" /></a>";
}
    $db->Query("UPDATE banners SET Views = '".round($row['Views'] + 1)."' WHERE id = '" . $row['ID'] . "'");

// to count clicks need an if statement 
if(isset($_GET['clicked'])){
        $db->Query("UPDATE banners SET Clicks = '".round($row['Clicks'] + 1)."' WHERE id = '" . $row['ID'] . "'");

header("location: " . $row['Url']);


}
?>

祝大家好运:)