Contatore visite per ogni pagina con MYSQL - PHP

Alessandro Le Mura

Utente Attivo
28 Apr 2013
74
0
0
www.glaucusgames.com
PHP:
 <?php
// identificativo numerico della pagina
$pagina = 1;

// connessione db mysql
mysql_connect("");
mysql_select_db("") or die("Impossibile selezionare il database.");

// numero di visite attuali
$res = mysql_query("UPDATE contatore SET visite = visite + 1 WHERE pagina = $pagina"); 

// visualizzazione numero visite
$res = mysql_query("SELECT visite FROM contatore WHERE pagina = $pagina");
$visite = mysql_fetch_assoc($res);
echo "La pagina è stata visitata ".$visite['visite']." volte"; 

mysql_close()
?>

Questo contatore e sembra funzionare perfettamente, solo che vorrei un contatore per visite uniche, per IP, cosa devo aggiungere o modificare? Oppure anke a tempo col timestamp andrebbe bene, tipo ogni 24 ore
 
Ultima modifica di un moderatore:

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
148
63
PR
www.borgo-italia.it
ciao
ti conviene per IP, devi però modificare la tabella
vedi
https://www.mrw.it/mysql/meno-query-grazie-insert-on-duplicate-key-update_7436.html
e fare come da schema che segue
PHP:
<?php
$ip=$_SERVER['HTTP_REFERER'];
$pagina = 1;
//dati di connessione
$res=mysql_query("INSERT INTO contatore VALUES('$ip', 1, '$pagina ') ON DUPLICATE KEY UPDATE visite = visite + 1");//non ho messo il tempo
$res = mysql_query("SELECT SUM(visite) FROM contatore WHERE pagina = $pagina");
//eccetera...
?>

poi se vuoi un consiglio:usa google analitycs ti da molte altre indicazioni
 

Alessandro Le Mura

Utente Attivo
28 Apr 2013
74
0
0
www.glaucusgames.com
si già lo uso google analytics, è ke mi serve contare le visite praticamente di ogni pagina x i giocatori, e pubblicare il numero delle visite di ogni gioco in una classifica in homepage, è già tutto realizzato però come contatore php - txt, ed è alquanto instabile, cmq ok ora provo grazie
 

Alessandro Le Mura

Utente Attivo
28 Apr 2013
74
0
0
www.glaucusgames.com
chiedo scusa per i post consecutivi, non ho trovato un tasto per modificare il messaggio, in pratica se dovrei contare le visite in ogni pagina dovrei creare una tabella per ogni pagina? per esempio gioco 1 databasecontatore tabella 1, gioco 2 databasecontatore tabella 2, gioco 3 databasecontatore tabella 3. E' fattibile come cosa o è una follia poichè viene architettata male e rallenterebbe?
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
148
63
PR
www.borgo-italia.it
ciao
il codice google sta nell'head di ogni pagina che vuoi monitorare
se vuoi avere pag per pag ribadisco usa google analitycs, creandoti il tuo account, a titolo di esempio vedrai visite, visitatori unici, visite per pag, unici per pag, tempo di permanenza sul sito e sulla pagina, da dove vengono i visitatori e molte altre cose
 

Alessandro Le Mura

Utente Attivo
28 Apr 2013
74
0
0
www.glaucusgames.com
si ma poi mi serve creare una classifica php che mette al primo posto la pagina con 100 visualizzazione, al secondo la pagina con 68 visualizzazioni al terzo la pagina con 41 visualizzazioni..
E poi mi serve in ogni pagina il numero di visite uniche stampato a video x gli utenti..
Capito?
 

Longo8

Utente Attivo
28 Mar 2011
1.694
0
36
Ti stavo suggerendo anche io analytics (ovviamente) ma vedendo il tuo bisogno credo sia meglio fare (a mano) un contatore pagina per pagina ma che distingua gli ip almeno altrimenti ogni volta che uno aggiorna la pagina si aggiorna il contatore.
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
148
63
PR
www.borgo-italia.it
ciao
intanto dai un occhio a questo schema per monitorare le visite
PHP:
<?php
$ip=$_SERVER['HTTP_REFERER'];
$pagina_num = 1;
$pagina=$_SERVER['PHP_SELF'];//potrebbe farti comodo per sapere il nome della pagina es gioco_primo.php
$ora=time();//leggo il mometo della visita quindi
//dati di connessione
$query_1=mysql_query("SELECT * FROM contatore WHERE pagina_num=$pagina_num AND ip='$ip'");
if(mysql_num_rows($query_1)== 0){//non ci sono record per qull'ip e quella pagina
	$query_2=mysql_query("INSERT INTO contatore(pagina, pagina_num,ip, visite, tempo) SET('$pagina',$pagina_num,'$ip', 1, $ora)");
}else{//il record esiste
	$riga=mysql_fetch_array($query_1);
	//verifico l'intervallo di tempo tra l'ultima visita e l'attuale
	//e lo trasformo in ore
	$intervallo=($ora-$riga['tempo'])/3600;
	//verifico che siano passate almeno 24 ore dall'ultima visita (ma a te decidere il tempo)
	if($intervallo > 24){
		//sono passate più di 24 ore quindi uppo le visite e il tempo, altrimenti non faccio nulla
		$query_3=mysql_query("UPDATE contatore SET visite=visite +1, tempo=$ora WHERE pagina_num=$pagina_num AND ip='$ip'");
	}
}
?>
tabella contatore
id int(9) autoincrement primarykey
pagina varchar(25)
pagina_num int(3)
ip varchar(25)
visite int(9) default 0
tempo int(15)

poi, se ti va bene, a dopo la visualizzazione

p.s.
guarda che è da provare e verificare che non abbia fatto qualche errore, non l'ho testato
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
148
63
PR
www.borgo-italia.it
ciao
ecco come potresti vedere i risultati
PHP:
<?php
//dati di connessione
$query=mysql_query("SELECT pagina, SUM(visite) AS tot FROM contatore GROUP BY pagina");//o pagina_num se non usi il nome di pagina
echo "<table class=\"pinco\">";
echo "<tr><th>pagina</th><th>visite</th></tr>";
while($riga=mysql_fetch_array($query)){
	$pagina=$riga['pagina'];
	$visite=$riga['tot'];
	echo "<tr><td>$pagina</td><td>$visite</td></tr>";
}
echo "<table>";
?>
volendo puoi fare lo stesso discorso per l'ip

p.s.
anche questo non l'ho testato
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
148
63
PR
www.borgo-italia.it
ciao
scusa volevo scrivere 11 è l'intero del timestamp, comynque non da visualizzare ma quante cifre intere può contenete al massimo il campo
 

Alessandro Le Mura

Utente Attivo
28 Apr 2013
74
0
0
www.glaucusgames.com
ok, grazie.. Il problema attualmente è ke mi scrive pagine e visite in tabella, ma nn compare nulla, ho controllato il database e non ci sono i dati memorizzati, o sono anticappato xD e ho sbagliato la connessione mysql al database e nn memorizza i dati, o c'è qlk problema nel codice nella parte di update dati nella tabella, io nel frattempo continuo a controllare e provare e vediamo.

PHP:
<?php
// connessione al database MySQL
mysql_connect("asd", "asd", "asd");
mysql_select_db("my_asd") or die("Impossibile selezionare il database.");

$ip = $_SERVER['HTTP_REFERER'];
$pagina_num = 1;
$pagina = $_SERVER['PHP_SELF']; //potrebbe farti comodo per sapere il nome della pagina es gioco_primo.php
$ora = time(); //leggo il momento della visita quindi

//dati di connessione
$query_1 = mysql_query("SELECT * FROM contatore WHERE pagina_num = $pagina_num AND ip = '$ip'");
if(mysql_num_rows($query_1)== 0){ //non ci sono record per quell'ip e quella pagina
    
    $query_2 = mysql_query("INSERT INTO contatore(pagina, pagina_num, ip, visite, tempo)
    SET('$pagina', '$pagina_num', '$ip', 1, '$ora')");
    
}else{ //il record esiste

    $riga = mysql_fetch_array($query_1);
    //verifico l'intervallo di tempo tra l'ultima visita e l'attuale
    //e lo trasformo in ore
    $intervallo = ($ora - $riga['tempo'])/3600;
    //verifico che siano passate almeno 24 ore dall'ultima visita (ma a te decidere il tempo)
    if($intervallo > 24){ //sono passate più di 24 ore quindi uppo le visite e il tempo, altrimenti non faccio nulla
        $query_3 = mysql_query("UPDATE contatore SET visite = visite +1, tempo = $ora WHERE pagina_num = $pagina_num AND ip = '$ip'");
    }
}

//dati di connessione
$query = mysql_query("SELECT pagina, SUM(visite) AS tot FROM contatore GROUP BY pagina");//o pagina_num se non usi il nome di pagina
echo "<table>";
echo "<tr><td>pagina</td><td>visite</td></tr>";
while($riga=mysql_fetch_array($query)){
    $pagina=$riga['pagina'];
    $visite=$riga['tot'];
    echo "<tr><td>$pagina</td><td>$visite</td></tr>";
}
echo "</table>";

mysql_close()
?>
 

Alessandro Le Mura

Utente Attivo
28 Apr 2013
74
0
0
www.glaucusgames.com
Ps.: nel pezzo di while ho sostituito $visite=$riga['tot']; con $visite=$riga['visite']; tot non esiste

PHP:
//dati di connessione
$query = mysql_query("SELECT pagina, SUM(visite) AS tot FROM contatore GROUP BY pagina");//o pagina_num se non usi il nome di pagina
echo "<table>";
echo "<tr><td>pagina</td><td>visite</td></tr>";
while($riga=mysql_fetch_array($query)){
    $pagina=$riga['pagina'];
    $visite=$riga['visite'];
    echo "<tr><td>$pagina</td><td>$visite</td></tr>";
}
echo "</table>";

mysql_close()
?>
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
148
63
PR
www.borgo-italia.it
ciao
tuo penultimo post:
non fa l'insert?
perche quarda che, se stai provando in locale o anche da remoto sempre dallo stesso ip, l'update non lo fa in quanto per il tuo ip e per quella pagina non sono trascorse 24 ore
se vuoi vedere se uppa prova a commentare l'if del tempo
PHP:
<?php
    //if($intervallo > 24){ //sono passate più di 24 ore quindi uppo le visite e il tempo, altrimenti non faccio nulla
        $query_3 = mysql_query("UPDATE contatore SET visite = visite +1, tempo = $ora WHERE pagina_num = $pagina_num AND ip = '$ip'");
    //} 
?>
in questo modo dovrebbe uppare anche al refresh della pagina

per l'ultimo
si come nome non esiste un campo chiamato tot, ma è un alias
SUM(visite) AS tot cioè la sum di visite si chiama tot
 

Alessandro Le Mura

Utente Attivo
28 Apr 2013
74
0
0
www.glaucusgames.com
Allora, ho provato quello ke hai detto e non andava, ho riguardato il codice è ho provato a sostituire SET con VALUES:

PHP:
//dati di connessione
$query_1 = mysql_query("SELECT * FROM contatore WHERE pagina_num = $pagina_num AND ip = '$ip'");
if(mysql_num_rows($query_1)== 0){ //non ci sono record per quell'ip e quella pagina
    
    $query_2 = mysql_query("INSERT INTO contatore(pagina, pagina_num, ip, visite, tempo)
    ---> SET con VALUES<---('$pagina', '$pagina_num', '$ip', 1, '$ora')");

Risultato ho fatto 3 aggiornamenti della pagina, l'output video è questo:
pagina visite
/mysql/mysql1.php 3

Mentre su MySQL nella tabella si sono formati 3 record:
Modifica Elimina 1 /mysql/mysql1.php 1 http://s190.altervista.or 1 1368196667
Modifica Elimina 2 /mysql/mysql1.php 1 http://s190.altervista.or 1 1368196670
Modifica Elimina 3 /mysql/mysql1.php 1 http://s190.altervista.or 1 1368196671

E' giusta la modifica ke ho fatto?
 
Ultima modifica:

Alessandro Le Mura

Utente Attivo
28 Apr 2013
74
0
0
www.glaucusgames.com
e così quindi mi conteggia le visite per IP a 24 ore giusto?

Altra domanda, se devo creare 300 di questi contatori, devo creare 300 tabelle differenti? 1 x ogni gioco? Non sarebbe troppo pesante?
 
Discussioni simili
Autore Titolo Forum Risposte Data
A contatore visite PHP 6
C Iframe e contatore visite HTML e CSS 4
C Contatore visite su Facebook (era: quesito) PHP 2
R Creare un contatore visite senza mysql PHP 6
SolidSnake4 contatore visite PHP 4
SolidSnake4 contatore visite PHP 2
A Contatore visite Classic ASP 16
daviduccio Cerchi un contatore di visite personalizzabile e gratuito? Presenta il tuo Sito 0
T contatore totale click e media in secondi PHP 7
T Contatore alla rovescia su più elementi simultaneamente Javascript 4
L [PHP] contatore con sqlite PHP 9
T [PHP] [Javascript] Download e contatore PHP 3
bubino8 [PHP] Contatore Scan QR con redirect PHP 10
F Creare un contatore numerico in HTML HTML e CSS 9
M [PHP] Contatore Tempo Server-side PHP 8
M [PHP] contatore record PHP 7
J contatore visualizzazioni video HTML e CSS 1
Monital Contatore sul sito Google Analytics 2
R Contatore alla rovescia per adesioni Supporto Mr.Webmaster 0
Marco_88 Limitare un contatore PHP 1
W Contatore posti in un form, come implementarlo? WordPress 0
Marco_88 Contatore di accessi PHP 5
I contatore caratteri textarea sbagliato Javascript 1
D Record disconesso contatore dove sbaglio? Classic ASP 0
V [risolto] Contatore caratteri stile SMS da una textarea Javascript 6
Alessandro Le Mura Contatore di click su link con redirect ogni 24 ore PHP 4
Alessandro Le Mura [RISOLTO]Contatore di click su link con redirect PHP 5
Alessandro Le Mura Contatore php - txt PHP 8
8 Script per il contatore download PHP 11
L Inserire campo input dinamico con contatore in jquery jQuery 8
Shyson richiamare contatore PHP 5
GoshMaledetto Contatore numero letture PHP 4
Shyson Contatore post non si aggiorna in automatico PHP 7
S Contatore click su link PHP 1
C contatore alfanumerico 0000 -> ZZZZ, idee? PHP 3
F contatore PHP PHP 12
max_400 Contatore Top Forum PHP 17
B contatore di download PHP 1
max_400 Contatore scaricamento file... semplice semplice by max_400 PHP 8
davide1982 Incremento contatore click PHP 14
davide1982 Problema di redirect dal contatore di click Database 1
T Memberarea, forum, contatore...Mi chiarite le idee? HTML e CSS 7
A Contatore per code di clienti in attesa Flash 0
G contatore commenti PHP 6
I contatore crediti a 8574 Supporto Mr.Webmaster 3
foki {PHP Script} Contatore Utenti Registrati PHP 17
danlupo Problemi visualizzazione Contatore PHP 2
danlupo Problema Contatore Accessi PHP 3
whirl Contatore condiviso tra 2 siti PHP 3
Z Contatore fotogallery: problemi a caricare onload laprima PHP 1

Discussioni simili