L'idea di creare questa pillolina me l'ha data Bobo88 in questa discussione
http:[COLOR=orange]//forum.html.it/f...hreadid=738831
Per poter creare un sistema che ci conta quante persone sono on-line sul nostro sito
Sfruttiamo php+mysql facendo dei controlli su un campo.
Incominciamo a creare un tabella
Nome tabella:line
1° Campo id: tipo intero extra(auto_increment primaria)
2° Campo ip: tipo varchar max caratteri=15 ; inseriremo gli ip degli utenti
3° Campo entrata: tipo intero; inseriremo il timestamp
4° Campo pagina: tipo varchar max caratteri=255
Questo è l'sql per creare la tabella:
codice:
CREATE TABLE `line` (
`id` INT NOT NULL AUTO_INCREMENT ,
`ip` VARCHAR( 15 ) NOT NULL ,
`entrata` INT NOT NULL ,
`pagina` VARCHAR( 255 ) NOT NULL ,
PRIMARY KEY ( `id` )
);
Ora creiamo lo script in 2 file uno conterra le variabili per la configurazione l'altro conterra lo script:
Primo file "configurazione" nome=conf.php
codice:
<?
//Host del database
$db_host="localhost";
//Nome utente per connettersi al database
$db_user="root";
//Password per connettersi al database
$db_pass="monaco";
//Nome del database
$db_name="utenti";
//Tempo massimo di inattività del visitatore in secondi
$timeout=360;//360 corrisponde a 5 minuti
//I dati sottostanti non si devono modificare
//Mi connetto al database
$db=mysql_connect($db_host,$db_user,$db_pass);
//seleziono il database
mysql_select_db($db_name,$db);
?>
Secondo file "il cuore dello script" nome=utenti_on_line.php
codice:
<?
//includo il file conf.php
include"./conf.php";
//Imposto la variabile $ip uguale all'ip del visitatore
$ip=$_SERVER['REMOTE_ADDR'];
//Imposto la variabile $tempo uguale al timestamp
$tempo=time();
//Imposto la variabile $pagina uguale all'url della pagina che si sta visitando
$pagina=$_SERVER['REQUEST_URI'];
//Faccio una query che mi conta quanti record ci sono nella tabella con il campo ip uguale all'ip del visitatore
$query="SELECT COUNT(\"id\") AS tot From line WHERE ip=\"$ip\"";
[COLOR=orange]//applico la query..
$result=mysql_query($query,$db);
//imposto la variabile $tot uguale al risultato che mi da la query
$tot=mysql_result($result,0,"tot");
//faccio un controllo per vedere se l'ip è già presente nella tabella se è presente faccio una query che aggiorna il campo entrata e il campo pagina
//se invece l'ip non esiste nella tabella faccio una query che inserisce tutti i dati nella tabella
$query=($tot>0)?"UPDATE line SET entrata = \"$tempo\", pagina=\"$pagina\" WHERE ip=\"$ip\" LIMIT 1":"INSERT INTO line (ip,entrata,pagina) VALUES (\"$ip\",\"$tempo\",\"$pagina\")";
//applico la query
mysql_query($query,$db);
//imposto $tempo_min uguale al valore minimo consentito
$tempo_min=$tempo-$timeout;
//Creo una query che cancella tutte le righe dove il valore del campo entrata è minore di $tempo_min
$query="DELETE FROM line WHERE entrata<$tempo_min";
//applico la query
mysql_query($query,$db);
//inizio punto 1
//Inizio del conteggio degli utenti on-line
//faccio una query che mi restituisce il numero delle diverse combinazioni del campo ip
$query="SELECT COUNT(DISTINCT ip) AS utenti From line WHERE 1";
//applico la query
$result=mysql_query($query,$db);
//metto nella variabile $online il risultato che mi da la query che corrisponde al numero di utenti in linea
$online=mysql_result($result,0,"utenti");
//Fine del conteggio degli utenti on-line
//fine punto 1
echo $online
?>
Secondo me in molti vi state chiedendo "Ma perchè a cosa c' è sevito il campo pagine se nei risultati non compare?"
Ho creato il campo pagine nel caso volete visualizzare anche la posizione degli utenti se lo volete basta modificare lo script nella parte compresa fra i commenti "//inizio punto 1" e "//fine punto 1".
Non l'ho fatto perchè lo sconsiglio per motivi di protezione e di privacy degli utenti(Se volete vi spiego)
Un'ultima cosa la dico per evitare brutti commenti
La funzione COUNT(DISTINCT ip)
Molti diranno che è inutile usare la funzione distinct perchè comunque lo script non permette inserimenti di nuove righe con lo stesso ip
ma l'ho messa perchè se lo script si vuole modificare per esempio se si vuole vedere quali pagine ha visitato il singolo utente questa funzione è indispensabile.