---//Spis treści//---
1. Stworzenie odpowiednich tabel w bazie danych.
2. Skrypt dodający logi do bazy danych.
3. Skrypt wyświetlający statystyki.
4. Skrypt, który musisz wstawić na początku dokumentu.
---// //---
---1. Stworzenie odpowiednich tabel w bazie danych.---
Aby stworzyć odpowiednie tabele w bazie danych MySQL trzeba w phpMyAdmin (lub monitorze MySQL) wpisać poniższy kod:
Kod:
CREATE TABLE `st_stats` (
`stat_id` mediumint(8) unsigned NOT NULL auto_increment,
`ip_id` mediumint(9) NOT NULL default '0',
`referer_id` mediumint(9) NOT NULL default '0',
`agent_id` mediumint(9) NOT NULL default '0',
`date` datetime NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (`stat_id`),
UNIQUE KEY `stat_id` (`stat_id`)
) TYPE=MyISAM;
CREATE TABLE `st_referers` (
`referer_id` mediumint(8) unsigned NOT NULL auto_increment,
`referer` varchar(100) NOT NULL default '',
`how` mediumint(9) NOT NULL default '0',
PRIMARY KEY (`referer_id`),
UNIQUE KEY `referer_id` (`referer_id`)
) TYPE=MyISAM;
CREATE TABLE `st_ips` (
`ip_id` mediumint(8) unsigned NOT NULL auto_increment,
`ip` varchar(15) NOT NULL default '',
`host` varchar(100) NOT NULL default '',
`how` mediumint(9) NOT NULL default '0',
PRIMARY KEY (`ip_id`),
UNIQUE KEY `ip_id` (`ip_id`)
) TYPE=MyISAM;
CREATE TABLE `st_agents` (
`agent_id` mediumint(8) unsigned NOT NULL auto_increment,
`agent` varchar(100) NOT NULL default '',
`how` int(11) NOT NULL default '0',
PRIMARY KEY (`agent_id`)
) TYPE=MyISAM;
---2. Skrypt dodający logi do bazy danych.---
Skrypt dodający logi do bazy danych ma postać taką:
Kod:
<?php
// połącz się z bazą danych (DB_HOST - host, DB_USER - użytkownik, DB_PASSWORD - haslo)
@mysql_connect ('DB_HOST', 'DB_USER', 'DB_PASSWORD') OR die ('Nie mogłem połączyć się z MySQL-em: ' . mysql_error());
// wybierz bazę danych (DB_NAME - baza danych)
@mysql_select_db ('DB_NAME') OR die ('Nie udało mi się wybrać bazy danych: ' . mysql_error());
// pobieranie danych
$ip = $_SERVER["REMOTE_ADDR"];
$host = gethostbyaddr(getenv('remote_addr'));
$referer = $_SERVER['HTTP_REFERER'];
$agent = $_SERVER['HTTP_USER_AGENT'];
// w miejsca twoj.host i twoje.ip wpisz Twoj host i Twoje ip, aby skrypt nie zliczal wlasnych odwiedzin
if ($host != 'twoj.host' && $ip != 'twoje.ip')
{
// sprawdza czy strona byla juz odwiedzona dzisiaj
if($visited != 1)
{
// zmienna $agent
$result = mysql_query("select how from st_agents where agent='$agent';");
$found = mysql_num_rows($result);
if ($found == 1)
{
$row = mysql_fetch_array($result);
$row[0]++;
mysql_query("update st_agents set how='$row[0]' where agent='$agent';");
}
else
{
mysql_query("insert into st_agents (agent_id, agent, how) values ('', '$agent', '1');");
}
$result = mysql_query("select agent_id from st_agents where agent='$agent';");
$row = mysql_fetch_array($result);
$agent_id = $row[0];
// zmienna $referer
if (eregi('sm00f.boo.pl', $referer) || empty($referer))
{
$referer = 'brak';
}
$referer = htmlspecialchars($referer);
$result = mysql_query("select how from st_referers where referer='$referer';");
$found = mysql_num_rows($result);
if ($found == 1)
{
$row = mysql_fetch_array($result);
$row[0]++;
mysql_query("update st_referers set how='$row[0]' where referer='$referer';");
}
else
{
mysql_query("insert into st_referers (referer_id, referer, how) values ('', '$referer', '1');");
}
$result = mysql_query("select referer_id from st_referers where referer='$referer';");
$row = mysql_fetch_array($result);
$referer_id = $row[0];
// ustawia zmienne $ip_id i $how
$result = mysql_query("select how from st_ips where ip='$ip' and host='$host';");
$found = mysql_num_rows($result);
if ($found == 1)
{
$row = mysql_fetch_array($result);
$row[0]++;
mysql_query("update st_ips set how='$row[0]' where ip='$ip' and host='$host';");
}
else
{
mysql_query("insert into st_ips (ip_id, ip, host, how) values ('', '$ip', '$host', '1')");
}
$result = mysql_query("select ip_id, how from st_ips where ip='$ip' and host='$host';");
$row = mysql_fetch_array($result);
$ip_id = $row[0];
$how = $row[1];
// dodaj wszystko do statystyk
mysql_query("insert into st_stats (stat_id, ip_id, referer_id, agent_id, date) values ('', '$ip_id', '$referer_id', '$agent_id', now())");
// koniec sprawdzenia czy strona byla juz odwiedzona
}
// pobierz ilosc odwiedzin
$result = mysql_query("select how from st_ips where ip='$ip' and host='$host';");
$row = mysql_fetch_array($result);
$how = $row[0];
// jesli to Ty
}
else
{
$how = 'brak';
}
// pobierz ilosc wszystkich odwiedzin
$result = mysql_query("select stat_id from st_stats order by 'st_stats', 'stat_id' desc limit 0,1;");
$row = mysql_fetch_array($result);
$all_visit = $row[0];
// pobierz dzisiejsza ilosc wizyt
$day = date('jnY');
$result = mysql_query("select date_format(date, '%e') from st_stats where date_format(date, '%e%c%Y')='$day';");
$dzisiaj = mysql_num_rows($result);
// pobierz wczorajsza ilosc odwiedzin
$day = date('j');
$month = date('n');
$year = date('Y');
$dateunix = mktime('', '', '', $month, $day, $year);
$dateunix = floor($dateunix / (60*60*24));
$dateunix--;
$result = mysql_query("select floor((unix_timestamp(date)/(60*60*24))) from st_stats where floor((unix_timestamp(date)/(60*60*24)))='$dateunix';");
$wczoraj = mysql_num_rows($result);
// wyswietl wyniki
echo '
Wszystkie: <b>'.$all_visit.'</b><br />
Dzisiaj: <b>'.$dzisiaj.'</b><br />
Wczoraj: <b>'.$wczoraj.'</b><br />
Twoje: <b>'.$how.'</b><br />
';
// zakończ połączenie z bazą danych
mysql_close();
?>
---3. Skrypt wyświetlający statystyki.---
A teraz zajmiemy się skryptem wyświetlającym statystyki.
Kod:
<br /><div class="tytul_duzy">Statystyka</div>
<?php
// jeśli hasło jest poprawne (wynosi "tajne_haslo") oraz jest wciśnięty przycisk
if (isset($_POST['submit']) || $_POST['passwd'] == 'tajne_haslo') {
// połącz się z bazą danych (DB_HOST - host, DB_USER - użytkownik, DB_PASSWORD - haslo)
@mysql_connect ('DB_HOST', 'DB_USER', 'DB_PASSWORD') OR die ('Nie mogłem połączyć się z MySQL-em: ' . mysql_error());
// wybierz bazę danych (DB_NAME - baza danych)
@mysql_select_db ('DB_NAME') OR die ('Nie udało mi się wybrać bazy danych: ' . mysql_error());
?>
<br />
<div class="tytul_maly">Ostatnie 30 wizyt:</div>
<br />
<?php
$query ="
select st_stats.stat_id, st_ips.ip, st_ips.host, st_stats.date
from st_ips, st_stats
where st_ips.ip_id=st_stats.ip_id
order by 'st_stats', 'date' desc limit 0,30
;";
$result = mysql_query($query);
echo '
<table width="100%" border="0" cellspacing="0">
<tr>
<td class="tytul_maly">L.P.</td>
<td class="tytul_maly">IP</td>
<td class="tytul_maly">Host</td>
<td class="tytul_maly">Data</td>
</tr>
';
while ($row = mysql_fetch_array($result)) {
echo"
<tr class=\"stats_dane\">
<td>$row[0]</td>
<td>$row[1]</td>
<td>$row[2]</td>
<td>$row[3]</td>
</tr>
";
}
echo "</table><br />";
?>
<div class="tytul_maly">Najczęstsze 30 hostów i IP:</div>
<br />
<?php
$query ="
select st_ips.ip, st_ips.host, st_ips.how
from st_ips
order by 'st_ips', 'how' desc limit 0,30
;";
$result = mysql_query($query);
echo '
<table width="100%" border="0" cellspacing="0">
<tr>
<td class="tytul_maly">IP</td>
<td class="tytul_maly">Host</td>
<td class="tytul_maly">Ile?</td>
</tr>
';
while ($row = mysql_fetch_array($result)) {
echo"
<tr class=\"stats_dane\">
<td>$row[0]</td>
<td>$row[1]</td>
<td>$row[2]</td>
</tr>
";
}
echo '</table><br />';
?>
<div class="tytul_maly">Najczęstsze 30 przegl±darek:</div>
<br />
<?php
$query ="
select st_agents.agent, st_agents.how
from st_agents
order by 'st_agents', 'how' desc limit 0,30
;";
$result = mysql_query($query);
echo '
<table width="100%" border="0" cellspacing="0">
<tr>
<td class="tytul_maly">Agent</td>
<td class="tytul_maly">Ile?</td>
</tr>
';
while ($row = mysql_fetch_array($result)) {
echo"
<tr class=\"stats_dane\">
<td>$row[0]</td>
<td>$row[1]</td>
</tr>
";
}
echo '</table><br />';
?>
<div class="tytul_maly">Najwięcej wej¶ć z tych 30 adresów:</div>
<br />
<?php
$query ="
select st_referers.referer, st_referers.how
from st_referers
where referer not like 'brak'
order by 'st_referers', 'how' desc limit 0,30
;";
$result = mysql_query($query);
echo '
<table width="100%" border="0" cellspacing="0">
<tr>
<td class="tytul_maly">Referer</td>
<td class="tytul_maly">Ile?</td>
</tr>
';
while ($row = mysql_fetch_array($result)) {
// stworz krotsze anchory
$short = $row[0];
$short = str_replace('http://www.', '', $short);
$short = str_replace('http://', '', $short);
if (strlen($short) > 60) {
$ile = 60 - $short;
$short = substr_replace($short, '...', $ile);
}
echo"
<tr class=\"stats_dane\">
<td><a href=\"$row[0]\" target=\"_blank\">$short</a></td>
<td>$row[1]</td>
</tr>
";
}
echo '</table><br />';
?>
<div class="tytul_maly">Ostatnie 30 wizyt z tych adresów:</div>
<br />
<?php
$query ="
select st_stats.stat_id, st_referers.referer
from st_stats, st_referers
where st_referers.referer_id=st_stats.referer_id
and st_referers.referer not like 'brak'
order by 'st_stats', 'stat_id' desc limit 0,30
;";
$result = mysql_query($query);
echo '
<table width="100%" border="0" cellspacing="0">
<tr>
<td class="tytul_maly">L.P.</td>
<td class="tytul_maly">Referer</td>
</tr>
';
while ($row = mysql_fetch_array($result)) {
// stworz krotsze anchory
$short = $row[1];
$short = str_replace('http://www.', '', $short);
$short = str_replace('http://', '', $short);
if (strlen($short) > 60) {
$ile = 60 - $short;
$short = substr_replace($short, '...', $ile);
}
echo"
<tr class=\"stats_dane\">
<td>$row[0]</td>
<td><a href=\"$row[1]\" target=\"_blank\">$short</a></td>
</tr>
";
}
echo '</table>';
?>
<?php
// zamknij połączenie z bazą danych
mysql_close();
// jeśli przycisk nie jest wciśnięty lub hasło jest niepoprawne
} else {
?>
</td>
</tr>
<tr>
<td>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<table width="100%" border="0" cellspacing="0" cellpadding="1">
<tr class="tabe_gl">
<td>
Wpisz haslo :)
</td>
</tr>
<tr class="tabe_op">
<td>
<input type="password" maxlength="20" name="passwd" size="20" />
</td>
</tr>
</table>
</form>
</td>
</tr>
<?php
}
?>
W arkuszu css dołączonym do strony ustawcie sobie odpowiednie style do klas "stats_dane", "tytul_maly" i "tytul_duzy"
--- 4. Skrypt, który musisz wstawić na początku dokumentu. ---
Uwaga! Przed znacznikiem <?php nie może być nawet spacji wolnego miejsca.
Kod:
<?php
// wyslij ciasteczko
setcookie("visited", "1", time()+3600*24);
?>
Jeśi wykonaliście wszystko poprawnie na waszych stronach powinny się zainstalować piękne statystyki ;]. Zalecam stworzenie własnej strony, a następnie icludowanie plików statystyk do szablonów. Miłej zabawy! W razie problemów proszę o kontakt mailowy.
----------------------------------------
Autor: Sm00f, e-mail:
sm00f@sm00f.boo.pl
Strona www:
http://sm00f.boo.pl/
Artykułu NIE wolno publikować bez zgody autora!