PHP: strefaphp.net
PHP: strefaphp.net



 
Czy odwiedziłeś już te strony? -
dodał: Vengeance

Opis artykułu dodano: 30-01-2005 22:22
Artykuł opisuje jak stworzyć prostą statystykę odwiedzin opartą o bazę MySQL.
dodał: sm00f | autor: sm00f | czytano: 18858 razy

Inne materiały do artykułu

Prosta statystyka odwiedzin w MySQL
---//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&#177;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&#182;ć 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!
PHP: strefaphp.net
wyślij email informacje forum download skrypty katalog kursy porady artykuły home współpraca reklama kontakt