PHP statistieken
Dit is het PHP statistieken programma wat PHPhulp ook gebruikt. Ik denk, ik deel het nu gewoon. Zelf heb ik het verwerkt in een class. Het voorbeeld klopt uiteraard niet. Omdat de pagina te lang is heb ik twee gedeeltes in elkaar gephotoshoped. Vandaar dat de totalen niet kloppen ^^ Je moet de volgende stappen volgen: Allereerst zorg je dat je een database connectie hebt, wat me logisch lijkt.. 1. Kopieƫr de onderstaande SQL codes en voeg ze toe in je MySQL database. Zorg er echter voor dat je: http://www.jouwebsite.nl/images/icons/ vervangt met jouw domeinnaam! 2. Sla de bestanden op met de namen die hier genoemd worden 3. Include het bestand reg_stats.php op iedere pagina 4. Sla het zip bestand op met de zoekmachine en browser icons: stats_icons.rar 5. Sla de icons op in: /images/icons/ (dit kun je in het script aanpassen indien je een ander path hebt voor je icons) 6. Ga naar het bestand show_stats.php en bekijk je statistieken De statistieken zijn op het moment enkel per dag te bekijken. Maand overzicht e.d. moet er nog in gemaakt worden.. Have fun!
[b]show_stats.php[/b]
[code]<?
//--- check for posted date
if (!$_POST['dag'])
$datum = date("d.m.Y");
else
$datum = $_POST['dag'] . "." . $_POST['maand'] . "." . $_POST['jaar'];
//--- show date selection form
echo "<form method=\"POST\" action=\"" . $_SERVER['PHP_SELF'] . "\">";
echo "<b>Selecteer een datum</b><br />";
// dag
echo "<select name=\"dag\">";
for ($i = 1; $i <= 31; $i++)
{
if ($i < 10)
$num = "0" . $i;
else
$num = $i;
unset($selected);
if ($num == $_POST['dag'])
{
$selected = "selected";
$select = 1;
}
elseif ($num == date('d') && !$select)
$selected = "selected";
echo "<option value=\"" . $num . "\" $selected>" . $num . "</option>";
}
echo "</select> . ";
// maand
echo "<select name=\"maand\">";
for ($i = 1; $i <= 12; $i++)
{
if ($i < 10)
$num = "0" . $i;
else
$num = $i;
unset($selected);
if ($num == $_POST['maand'])
{
$selected = "selected";
$select = 1;
}
elseif ($num == date('m') && !$select)
$selected = "selected";
echo "<option value=\"" . $num . "\" $selected>" . $num . "</option>";
}
echo "</select> . ";
// jaar
echo "<select name=\"jaar\">";
for ($i = date('Y'); $i >= date('Y')-3; $i--)
{
unset($selected);
if ($num == $_POST['jaar'])
{
$selected = "selected";
$select = 1;
}
elseif ($num == date('Y') && !$select)
$selected = "selected";
echo "<option value=\"" . $i . "\" $selected>" . $i . "</option>";
}
echo "</select> <input type=\"submit\" value=\"Toon statistieken\" name=\"submit\"><p>";
//--- receive statics from database
$sql = "SELECT uniek,views,refs FROM php_statics WHERE datum = '" . $datum . "'";
$res = mysql_query($sql);
//--- check if static results are available
if (mysql_num_rows($res) >= 1)
{
//--- unset browser_id cuz it's getting used by register of statics
unset($browser_id);
unset($browser_ids);
unset($browser);
//--- put received data in array
$row = mysql_fetch_array($res);
//--- explode referers
$refs = explode(",", $row['refs']);
//--- check for totals
$max = $row['views'];
$views = ceil($row['views'] / ($row['views'] / 400));
$uniek = ceil($row['uniek'] / ($row['views'] / 400));
$verwijzingen = ceil(count($refs) / ($row['views'] / 400));
$browser_types = ceil(count($browser) / ($row['views'] / 400));
//--- print statics
echo "<p>De volgende statistieken zijn bekend:</p>";
//--- uniek
echo "<p><b>Uniek</b><br />";
echo "<img src=\"/images/icons/balk.gif\" height=\"13\" width=\"" . $uniek . "\" alt=\"" . $row['uniek'] . " unieke bezoeken\"> ";
echo $row['uniek'] . "</p>";
//--- views
echo "<p><b>Views</b><br />";
echo "<img src=\"/images/icons/balk.gif\" height=\"13\" width=\"" . $views . "\" alt=\"" . $row['views'] . " totale bezoeken\"> ";
echo $row['views'] . "</p>";
//--- get referers
echo "<p><b>Verwijzingen</b><br />";
echo "<img src=\"/images/icons/balk.gif\" height=\"13\" width=\"" . $verwijzingen . "\" alt=\"" . count($refs) . " totale bezoeken\"> ";
echo count($refs) . "</p>";
echo "<h3 class=\"reactions\"><span class=\"smalln\">Links naar deze website</span></h3>";
echo "<table border=\"0\" cellspacing=\"1\" cellpadding=\"5\" width=\"492\">";
echo "<tr class=\"grey_bg\"><td colspan=\"2\" width=\"392\"><b>Verwijzende websites</b></td><td width=\"50\"><b>Aantal</b></td><td width=\"50\"><b>Icon</b></td></tr>";
//----
// zoekmachines & verwijzende pagina's
//---
//--- get all search engines from database
$ssql = "SELECT browser,browser_icon FROM php_statics_browsers WHERE search_engine = 1";
$sres = mysql_query($ssql);
for ($i = 0; $srow = mysql_fetch_array($sres); $i++)
{
$engines[$i] = $srow['browser'];
$engine_icons[$i] = $srow['browser_icon'];
}
$res = $refs;
sort($res);
reset($res);
//--- set search engines and other linking websites
for ($i = 0; $i < count($res); $i++)
{
$url = $res[$i];
$parseurl = parse_url($url); // normaal parse_url($res[$i]);
$url_slizes = explode(".", $parseurl['host']);
$domain_nr = count($url_slizes) - 2;
$domainname = $url_slizes[$domain_nr];
if (array_search(ucfirst($domainname), $engines) && $search_engine != ucfirst($domainname))
{
if (!$k)
$k = 1;
else
$k++;
$searched_key = array_search(ucfirst($domainname), $engines);
$search_engine = $engines[$searched_key];
$set_engine[$k] = $engines[$searched_key];
$set_icon[$k] = $engine_icons[$searched_key];
$set_count[$k] = 1;
}
elseif (array_search(ucfirst($domainname), $engines))
{
$set_count[$k]++;
}
else
{
$linkname = $res[$i];
if (!$link || $link != $res[$i])
{
if (!$l)
$l = 1;
else
$l++;
$link = $res[$i];
$set_link[$linkname] = 1;
}
else
$set_link[$linkname]++;
}
}
arsort($set_link);
reset($set_link);
unset($aantal);
//--- show linking websites
foreach ($set_link as $link => $count)
{
if (strlen($link) >= 40)
$urladdr = substr($link, 0, 40) . "..";
else
$urladdr = $link;
echo "<tr class=\"grey_bg\"><td width=\"92\"> </td><td width=\"300\"><a href=\"" . $link . "\" target=\"_blank\" title=\"" . $link . "\">" . $urladdr . "</a></td><td width=\"50\">" . $count . "</td><td width=\"50\"> </td></tr>";
$aantal = $aantal + $count;
}
echo "<tr class=\"grey_bg\"><td><b>Totaal</b></td><td><b>" . count($set_link) . "</b></td><td><b>" . $aantal . "</b></td><td> </td></tr>";
echo "<tr class=\"grey_bg\"><td colspan=\"4\"> </td></tr>";
unset($k);
//--- show linking search engines
for ($i = 1; $i <= count($set_engine); $i++)
{
$naam = $set_engine[$i];
$count = $set_count[$i];
$zoekmachine_pic[$naam] = $set_icon[$i];
if (!$zoekmachine[$naam])
$zoekmachine[$naam] = $count;
else
$zoekmachine[$naam] = $zoekmachine[$naam] + $count;
}
arsort($zoekmachine);
unset($aantal);
echo "<tr class=\"grey_bg\"><td colspan=\"2\" width=\"390\"><b>Verwijzende zoekmachines</b></td><td width=\"50\"><b>Aantal</b></td><td width=\"50\"><b>Icon</b></td></tr>";
foreach ($zoekmachine as $naam => $count)
{
if ($zoekmachine_pic[$naam])
$icon = "<img src=\"" . $zoekmachine_pic[$naam] . "\" alt=\"\" />";
else
$icon = " ";
echo "<tr class=\"grey_bg\"><td width=\"92\"> </td><td width=\"300\">" . $naam . "</td><td width=\"50\">" . $count . "</td><td width=\"50\">" . $icon . "</td></tr>";
$aantal = $aantal + $count;
}
echo "<tr class=\"grey_bg\"><td><b>Totaal</b></td><td><b>" . count($zoekmachine) . "</b></td><td><b>" . $aantal . "</b></td><td> </td></tr>";
echo "</table>";
echo "</p>";
//--- browsers
$bsql = "SELECT browser_ids FROM php_statics_agents WHERE datum = '" . $datum . "'";
$bres = mysql_query($bsql);
if (mysql_num_rows($bres) >= 1)
{
$browser_ids = explode(",", mysql_result($bres, 0));
sort($browser_ids);
reset($browser_ids);
$res = array_count_values($browser_ids);
arsort($res);
}
echo "<h3 class=\"reactions\"><span class=\"smalln\">Verschillende browsers</span></h3>";
echo "<table border=\"0\" cellspacing=\"1\" cellpadding=\"5\" width=\"492\">";
echo "<tr class=\"grey_bg\"><td colspan=\"2\" width=\"392\"><b>Gebruikte browsers</b></td><td width=\"50\"><b>Aantal</b></td><td width=\"50\"><b>Icon</b></td></tr>";
//--- loop trough $res browsers
foreach ($res as $browserid => $count)
{
//--- get browser name (by browser id)
$bsql = "SELECT browser,search_engine,browser_icon FROM php_statics_browsers WHERE id = '" . $browserid . "'";
$bres = mysql_query($bsql);
//--- check if browser was found in database or if the browser is 'unknown'
if (@mysql_num_rows($bres) >= 1)
$browser_name = mysql_result($bres, 0);
else
$browser_name = "unknown";
//--- check if user agent was search engine
unset($zoek);
if (@mysql_result($bres, 0, 1) && !$zoek)
$zoek = "(zoekmachine)";
echo "<tr class=\"grey_bg\"><td width=\"92\"> </td><td width=\"300\">";
//--- check if icon exists
unset($icon);
if (@mysql_result($bres, 0, 2))
$icon = "<img src=\"" . mysql_result($bres, 0, 2) . "\" alt=\"\">";
else
$icon = " ";
//--- print that sjit
echo $browser_name . " " . $zoek . "</td><td width=\"50\">" . $count . "</td><td width=\"50\">" . $icon . "</td>";
echo "</tr>";
$aantal = $aantal + $count;
}
//--- print totals
echo "<tr class=\"grey_bg\"><td><b>Totaal</b></td><td><b>" . count($res) . "</b></td><td><b>" . $aantal . "</b></td><td> </td></tr>";
echo "</table>";
}
else
{
echo "<p>Er zijn geen statistieken bekend voor " . $datum . "</p>";
}
?>[/code]
[b]reg_stats.php[/b]
[code]<?
//--- statics stuff
$this_domain = "http://www.jouwebsite.nl"; // using for own referers
$ssql = "SELECT ips FROM php_statics WHERE datum = '" . date('d.m.Y') . "'";
$sres = mysql_query($ssql);
//--- statics exist!
if (mysql_num_rows($sres) >= 1)
{
//--- get each ip addr
$ips = explode(",", mysql_result($sres, 0));
//--- check for ip match
unset($not_uniek);
for ($i = 0; $i < count($ips); $i++)
{
if ($_SERVER['REMOTE_ADDR'] == $ips[$i])
{
$not_uniek = 1;
$i = count($ips) + 5;
}
}
//------------------------//
// \\ start browser // \\ //
//------------------------//
//--- set browser, but only if the IP address is not registered yet!
if (!$not_uniek)
{
//--- get all browsers
$bsql = "SELECT id,browser FROM php_statics_browsers ORDER BY browser";
$bres = mysql_query($bsql);
if (mysql_num_rows($bres) >= 1)
{
for ($i = 0; $brow = mysql_fetch_array($bres); $i++)
{
$browser_id[$i] = $brow['id'];
$browser[$i] = $brow['browser'];
}
}
//--- get user agent
$user_agent = $_SERVER['HTTP_USER_AGENT'];
//--- check for browser match
$bsql = "SELECT id FROM php_statics_agents WHERE datum = '" . date('d.m.Y') . "'";
$bres = mysql_query($bsql);
if (mysql_num_rows($bres) >= 1)
{
//--- match it
for ($i = 0; $i < count($browser); $i++)
{
if (strstr($user_agent, $browser[$i]) && $browser[$i] && $user_agent)
{
$bsql = "UPDATE php_statics_agents SET browser_ids = CONCAT(browser_ids, '," . $browser_id[$i] . "') WHERE datum = '" . date('d.m.Y') . "'";
mysql_query($bsql);
$i = count($browser) + 1;
$match = 1;
}
}
//--- no match => unknown
if (!$match)
{
$bsql = "UPDATE php_statics_agents SET browser_id = CONCAT(browser_ids, ',unknown') WHERE datum = '" . date('d.m.Y') . "'";
mysql_query($bsql);
}
}
//--- nothing in db of this date yet, attempt to create one
else
{
for ($i = 0; $i < count($browser); $i++)
{
if (strstr($user_agent, $browser[$i]) && $user_agent && $browser[$i])
{
$bsql = "INSERT INTO php_statics_agents SET id = '', browser_ids = '" . $browser_id[$i] . "', datum = '" . date('d.m.Y') . "'";
mysql_query($bsql);
$i = count($browser) + 1;
}
}
}
}
//----------------------//
// \\ end browser // \\ //
//----------------------//
//--- make sure it's not a referer of its own
if (substr($_SERVER['HTTP_REFERER'], 0, 21) == $this_domain)
$not_referer = 1;
$ssql = "UPDATE php_statics SET ";
//--- update statics with referer (if $not_referer & $not_uniek are empty)
if (!$not_referer && !$not_uniek)
{
$ssql .= " uniek = uniek+1, ";
if ($_SERVER['HTTP_REFERER'])
$ssql .= "refs = CONCAT(refs, '," . $_SERVER['HTTP_REFERER'] . "'), ";
$ssql .= "ips = CONCAT(ips, '," . $_SERVER['REMOTE_ADDR'] . "'), ";
}
//--- only update the ip addresses
elseif (!$not_uniek)
$ssql .= "uniek = uniek+1, ";
//--- only update the referers
elseif (!$not_referer && $_SERVER['HTTP_REFERER'] && !$not_uniek)
$ssql .= "refs = CONCAT(refs, '," . $_SERVER['HTTP_REFERER'] . "'), ";
//--- always count views with 1
$ssql .= "views = views+1 WHERE datum = '" . date("d.m.Y") . "'";
$rres = mysql_query($ssql);
}
//--- no statics exist for this day! make them!
else
{
$ssql = "INSERT INTO php_statics ";
$ssql .= "SET id = '', ";
$ssql .= "uniek = 1, ";
$ssql .= "views = 1, ";
//--- if a referer's been set and it's not it's own, set it
if ($_SERVER['HTTP_REFERER'] && substr($_SERVER['HTTP_REFERER'], 0, 21) != $this_domain)
$ssql .= "refs = '" . $_SERVER['HTTP_REFERER'] . "', ";
//--- if no referer make first 'fake' referer 'X' (for first,)
else
$ssql .= "refs = 'X', ";
//--- set ip address and date
$ssql .= "ips = '" . $_SERVER['REMOTE_ADDR'] . "', ";
$ssql .= "datum = '" . date("d.m.Y") . "'";
$rres = mysql_query($ssql);
}
?>[/code]
Reacties
0