contatore PHP

  • Creatore Discussione Creatore Discussione Fabio90
  • Data di inizio Data di inizio

Fabio90

Utente Attivo
29 Feb 2012
507
0
16
Ciao a tutti, questo contatore mi permette di contare visite giornaliere e totali. Il problema è che ad ogni refresh di pagina incrementa il conteggio. Come posso fare affinche ciò non avvenga? Grazie dell'aiuto

PHP:
<?php

// Modifica a tuo piacimento il colore della tabella e il suo bordo
$colore_tabella='#66FFCC';
$bordo_tabella='#000000';

// Non modificare il codice qui sotto

$file="count.txt";
$data_oggi=date("d/m/Y");


// Prima volta in assoluto che si accede alla pagina
if (!(file_exists($file)))
{
$crea_file=fopen($file,"w");
$inizio="1"."\n".$data_oggi."\n"."1";
fputs($crea_file,$inizio);
fclose($crea_file);
}

else{
// Estrazione dati
$dati=file($file);
$visite_tot=$dati[0];
$data=chop($dati[1]);
$visite_oggi=$dati[2];

$visite_tot=$visite_tot+1;

// Controllo delle visite odierne
if ($data_oggi==$data)
{ $visite_oggi=$visite_oggi+1; }
else
{ $visite_oggi=1; }
 
// Scrittura dati su file
$scrivi_file=fopen($file,"w+");
$dati=$visite_tot."\n".$data_oggi."\n".$visite_oggi;
fputs($scrivi_file,$dati);
fclose($scrivi_file);

// Visualizzazione dati
$tabella = "<table width='150' cellpadding='2' cellspacing='0' bordercolor='$bordo_tabella' bgcolor='$colore_tabella' style='border:1px solid;'>";
$tabella .="<tr bgcolor='#BEDFE7'><td><a href='http://www.clickmania.altervista.org'><img src='statcounter.gif' border='0'></a></td></tr>";
$tabella .="<tr><td><div class='scrittura'>VISITE TOTALI: $visite_tot<br>";
$tabella .="VISITE OGGI: $visite_oggi</div></td></tr></table>";

echo $tabella;
}
?>
 
Una soluzione potrebbe essere quella di creare un cookie al momento del conteggio, se il cookie è presente il contatore non viene aggiornato; ad esempio, dopo la fase di scrittura del contatore puoi inserire:
PHP:
setcookie("CtrlCookie",$_SERVER['REMOTE_ADDR'], time()+3600*24);

quindi consenti la scrittura solo se il cookie non è settato:
PHP:
if (!isset($_COOKIE["CtrlCookie"])){
// Scrittura dati su file
$scrivi_file=fopen($file,"w+");
$dati=$visite_tot."\n".$data_oggi."\n".$visite_oggi;
fputs($scrivi_file,$dati);
fclose($scrivi_file);
setcookie("CtrlCookie",$_SERVER['REMOTE_ADDR'], time()+3600*24); 
}
Nel caso dell'esempio il cookie avrà una durata di 24 ore (3600 secondi*24)
 
Ricordati che funziona soltanto con i browser che accettano i cookies (che comunque sono la maggior parte).
 
ciao
piccolo dubbio, secondo me impedisce il conteggio per refresh, ma anche quello di abbandono pagina e poi ritorno che secondo me andrebbe conteggiato.
dato che il refresh è un'azione lato client non c'è un codice js (con jq e ajax) che capisca che è un refresh e non un accesso da altra parte
 
ok è chiaro. Sto facendo caso che il contatore funziona all'interno della document root di easyphp. Però se lo importo all'interno della cartella del mio tema wordpress non funziona più.. Com'è possibile?
 
ciao
piccolo dubbio, secondo me impedisce il conteggio per refresh, ma anche quello di abbandono pagina e poi ritorno che secondo me andrebbe conteggiato.
dato che il refresh è un'azione lato client non c'è un codice js (con jq e ajax) che capisca che è un refresh e non un accesso da altra parte

qualcosa tipo:
PHP:
Event.observe(window, 'unload', function() { alert('Addio!!'); });
Dovrebbe funzionare anche al cambio pagina.
 
niente di che. Ho semplicemente trascinato il count.php all'interno della cartella del mio tema e poi nella index ho incluso il file
 
Devi modificare il file functions.php della tua installazione di WP, vai su "Aspetto > Editor" e seleziona "functions.php", poi trasformi il tuo codice in una funzione, ad esempio:
PHP:
<?php
add_action('wp_footer', 'conta');

function conta() { ?>
// codice funzione
<?php } ?>

In questo modo il contatore sarà sempre incluso nel footer e funzionerà per ogni pagina.
 
A me serve solo nella home page e Cmq così facendo non penso di risolvere il problema del refresh..
 

Discussioni simili