Visualizzare il percorso completo degli utenti nel sito
Questo script in php/mysql è nato per uso personale, ma visto che mi è stato chiestoe che ho letto su un forum che qualcuno non sapeva come fare lo posto.
Il suo funzionamento è semplicissimo, infatti è veramente scarno! I dati prodotti sono visualizzati senza grafica come l’elenco di tutte le pagine viste, una dopo l’altra ordinate così:
- Giorno ora ingresso, refer, pagina entrata (per ogni singola visita)
- Giorno ora visualizzazione, pagina successiva
- Giorno ora visualizzazione, pagina successiva
in fondo presenta un riepilogo del numero di visite e pagine viste, quante da google e quante da alcuni altri motori e un riepilogo del periodo di riferimento con Giorno: visite, pagineviste | Giorno: visite, paginevista….
Questo è il codice per il database:
potete copiarlo e incollarlo sul vosto database manager (phpmyadmin per esempio)
CREATE TABLE sito_hits (
id int(11) NOT NULL auto_increment,
visit int(11) NOT NULL default ‘0′,
`data` int(11) NOT NULL default ‘0′,
page varchar(250) NOT NULL default ”,
PRIMARY KEY (id)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
# ——————————————————–
#
# Struttura della tabella `sito_visits`
#
CREATE TABLE sito_visits (
id int(11) NOT NULL auto_increment,
ip varchar(250) NOT NULL default ”,
giorno int(11) NOT NULL default ‘0′,
`time` int(11) NOT NULL default ‘0′,
refer varchar(255) NOT NULL default ”,
PRIMARY KEY (id)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Questo è il codice di vedi-stats.php, che servirà a visualizzare le statistiche:
modificare i parametri di connessione al database, qui sulla seconda riga
<table><?
$link = mysql_connect("DATABASE-HOST", "DATABASE-USER", "DATABASE-PASS");
mysql_select_db("DATABASE-NAME", $link);
$time = mktime();
$time -= 172800;
$query = mysql_query("select sito_visits.ip, sito_visits.giorno, sito_visits.refer, sito_hits.page, sito_hits.time from sito_visits right join sito_hits on sito_visits.id = sito_hits.visit where sito_visits.time>’$time’ order by sito_visits.time DESC");
$current = 0; $visits = 0; $hits = 0; $google = 0; $alice = 0; $arianna = 0; $day = 0;
$v= array();
$h = array();
while($array = mysql_fetch_assoc($query)) {
if($day != $array[giorno]) { print("<tr><td colspan=’4′><hr></td></Tr>"); $day = $array[giorno]; } else { $day = $array[giorno]; }
if($current == $array[ip]) {
$i = $array[time];
$h[$i] = 1;
$hits++;
?>
<tr>
<td><font size=’-1′><?= date("d.m.Y", $array[giorno]); ?></td>
<td><font size=’-1′><?= date("G:i:s", $array[time]); ?></td>
<td><font size=’-1′><?= $array[page] ?></td>
<td><font size=’-1′><?= $array[ip] ?></td>
</tr>
<?
} else {
$current = $array[ip];
$visits++; $hits++;
$i = $array[time];
$v[$i] = 1;
if($array[refer] != ""
{
if(eregi(’google’, $array[refer])) $google++;
if(eregi(’alice.it’, $array[refer])) $alice++;
if(eregi(’arianna.libero.it’, $array[refer])) $arianna++;
}
?>
<tr>
<td><?= date("d.m.Y", $array[giorno]); ?></td>
<td><?= date("G:i:s", $array[time]); ?></td>
<td><?= substr($array[refer], 0, 115) ?></td>
<td><?= $array[page] ?></td>
</tr>
<?
} }
?>
</table>
<?
unset($query, $array);
$query = mysql_query("select sito_visits.ip, sito_visits.refer, sito_hits.time from sito_visits right join sito_hits on sito_visits.id = sito_hits.visit where sito_hits.time<=’$time’ order by sito_visits.time DESC");
while($array = mysql_fetch_assoc($query)) {
if($current == $array[ip]) {
$i = $array[time];
$h[$i] = 1;
$hits++;
} else {
$current = $array[ip];
$visits++; $hits++;
$i = $array[time];
$v[$i] = 1;
if($array[refer] != ""
{
if(eregi(’google’, $array[refer])) $google++;
if(eregi(’alice.it’, $array[refer])) $alice++;
if(eregi(’arianna.libero.it’, $array[refer])) $arianna++;
}
} }
$tempo = mktime()-1171407600;
$giorni = $tempo / 86400;
$visora = $visits / $giorni;
$gooora = $google / $giorni;
$aliora = $alice / $giorni;
$ariora = $arianna / $giorni;
$hitora = $hits / $giorni;
$giorno = number_format($giorni, ‘0′);
?>
<table cellpadding=’5′>
<caption>14 febbraio <?= number_format($giorni, ‘2′, ‘,’,”) ?></caption>
<tr><td><b>Visits</td><td><?= $visits ?></td><td align=’right’><?= number_format($visora, ‘2′, ‘,’,”) ?></td></tr>
<tr><td><b>Google</td><td><?= $google ?></td><td align=’right’><?= number_format($gooora, ‘2′, ‘,’,”) ?></td></tr>
<tr><td><b>Alice</td><td><?= $alice ?></td><td align=’right’><?= number_format($aliora, ‘2′, ‘,’,”) ?></td></tr>
<tr><td><b>Arianna</td><td><?= $arianna ?></td><td align=’right’><?= number_format($ariora, ‘2′, ‘,’,”) ?></td></tr>
<tr><td><b>Hits</td><td><?= $hits ?></td><td align=’right’><?= number_format($hitora, ‘2′, ‘,’,”) ?></td></tr></table><br><br>
<?
$da = 1171407600;
$a = mktime();
$n = 0;
for($time = $da; $time <= $a; $time += 86400) {
$n++;
$aparz = $time + 86400;
print(" | <b>$n</b>:");
$query = mysql_query("select count(id) from visits where time<=’$aparz’ and time>’$time’");
$dvisits = mysql_result($query, 0);
$query = mysql_query("select count(id) from hits where time<=’$aparz’ and time>’$time’");
$dhits = mysql_result($query, 0);
print("$dvisits , $dhits");
}
Questo è il codice da inserire in stats.php, che andrà inclusa in ogni pagina che volete monitorare:
$link = mysql_connect("DATABASE-HOST","DATABASE-USER","DATABASE-PASS"
or die("1");
mysql_select_db("DATABASE-NAME", $link) or die("2");
$time = mktime();
$g = date("d", $time);
$m = date("m", $time);
$a = date("Y", $time);
$giorno = mktime(0,0,0,$m,$g,$a);
$ip = $_SERVER['REMOTE_ADDR'];
$page = $_SERVER['PHP_SELF'];
$query = mysql_query("select id from sito_visits where ip=’$ip’ and giorno=’$giorno’");
if(mysql_num_rows($query) > 0) {
$id = mysql_result($query, 0);
mysql_query("insert into sito_hits values(”,’$id’,'$time’,'$page’)"); } else {
$refer = $_SERVER['HTTP_REFERER'];
$refer = substr($refer, 7);
mysql_query("insert into sito_visits values(”,’$ip’,'$giorno’,'$time’,'$refer’)");
$id = mysql_insert_id();
mysql_query("insert into sito_hits values(”,’$id’,'$time’,'$page’)"); }