Incremento contatore click

davide1982

Nuovo Utente
14 Giu 2010
26
0
0
Salve a tutti,

nel mio nuovo sito ho alcuni link affiancati dal numero di click effettuati su quel link. Al momento uno stesso utente potrebbe cliccare 100 volte su quel link e il contatore aumenterebbe di 100.

D'altra parte essendo un contatore di visite credo non sia nemmeno sbagliato che se uno stesso utente ritorna e clicca una seconda volta su quel link il contatore aumenti di nuovo...

Cosa mi consigliate? Meglio lasciarlo così com'è o meglio fare in modo che il contatore aumenti solo di una volta per utente? E se sì, devo farlo coi cookie giusto?

Grazie dell'attenzione...
:)
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
secondo me dovresti fare come in molti siti di votazione
tra un click e l'altro dovrebbe passare un certo tempo
così mi sembra più serio, soprattutto se uno guadagna qualcosa dal click
 

toni93

Utente Attivo
12 Nov 2009
38
0
0
potresti anche memorizzare in db gli ip di tutti quelli che cliccano e se hanno già cliccato il contatore non aumenta.
come dice borgo italia dipende dall'uso che ne devi fare
 

davide1982

Nuovo Utente
14 Giu 2010
26
0
0
no i click non comportano guadagno... l'utilizzo è più come dato statistico, l'unica cosa che fanno è ordinare i link da quello con più click a quello con meno.
In effetti concordo con voi riguardo a lasciar passare un po' di tempo tra un click e l'altro.

Quindi adesso ci provo!
Però non ho ben chiaro come procedere: utilizzo i cookie, l'IP o entrambi? :confused:
 

alessandro1997

Utente Attivo
6 Ott 2009
5.302
1
0
26
Roma
alessandro1997.netsons.org
Tutti e due i sistemi hanno dei pro e dei contro.

Prendiamo il sistema con i cookie. In questo caso l'utente non può sabotare la sua identità in alcun modo, perché il cookie viene salvato sul browser. Però può cancellarlo ed è come se non fosse mai passato di lì.

Prendiamo il sistema, invece, con gli IP. Salvi l'IP dell'utente nel database. II pro sono che l'utente non può accedere al dato, perché il database risiede sul tuo sito. Ma al giorno d'oggi il 90% degli IP sono dinamici, a meno che non si tratti di server o altro. Quindi basterà ricollegarsi per avere un IP diverso.

Quindi facci sapere quale preferisci! :D
 

davide1982

Nuovo Utente
14 Giu 2010
26
0
0
Ok, mi son "buttato" sui cookie, ma ho un problemino 0:) :

Avendo più link da monitorare, se nel codice scrivo solo: if (!isset($_COOKIE[$nome_cookie]) {}, qualsiasi altro link clicco dopo che ho già i cookie non viene più incrementato......

e quindi........... come faccio ad assegnare un cookie specifico per ogni link?

PHP:
#Recupero il valore che ho assegnato al cookie dal link
$link_cookie = $_GET['c'];

$nome_cookie = "cl_track";
$valore_cookie = $link_cookie;
$durata_cookie = time()+24*3600;
setcookie($nome_cookie,$valore_cookie,$durata_cookie);
$exist_cookie = $_COOKIE[$nome_cookie];

(...)

#Aggiorno il contatore
if (!isset($exist_cookie) or (isset($exist_cookie)!=$valore_cookie)) {
$sql2 = "UPDATE $tabella SET numclick = numclick + 1 WHERE id = '$linkid'"; $result2 = mysql_query($sql2);
}

Ovviamente sto sbagliando perché in questo modo ogni volta che clicco un link mi sostituisce il vecchio valore del cookie con quello nuovo... ma non mi viene in mente nessuna soluzione migliore... :hammer:
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
da quello che capisco tu hai una tabella con i seguenti campi
id (immagino primary autoincrement int)
numclick int

prova ad aggiungere un campo
cliccato_il int(15) default 0

ora ti metto un po' di php (a te poi eventualmete aggiustarlo rendendolo più snello)
prendilo solo come un ragionamento di base

PHP:
<?php
//...............
$sql_1 ="SELECT * FROM $tabella WHERE id='$linkid'";
//verifico che esista
$esite=mysql_num_rows(mysql_query($sql_1));
if($esite==0){//non esiste
	$result_1= mysql_query("INSERT INTO $tabella(numclich, cliccato_il) VALUE(1, ".time()."))";
	//metto il numero di click a 1 e il tempo del momento del click
}else{//il link esiste in quanto gia stato cliccato
	$tempo=time()-24*3600;//leggo il tempo attuale e tolgo 24 ore
	//metto una condizione in più cioè uppo solo se il tempo è trascorso
	//se trascorso incrementa i click e riregola il tempo
	$sql_2 = "UPDATE $tabella SET numclick = numclick + 1, cliccato_il=".time()." WHERE id = '$linkid' AND cliccato_il < '$tempo'";
	$result_2 =mysql_query($sql_2);
}
//...........
?>
in questo modo non devi usare i cookie e quindi più difficle imbrogliare (che tra l'altro mi sono antipatici)
un determinato id viene aggiornato solo se è passato un giorno

p.s.
verifica mi devo essere confuso con <
spero non sia una cavolata
 

alessandro1997

Utente Attivo
6 Ott 2009
5.302
1
0
26
Roma
alessandro1997.netsons.org
Scusa, borgo, ma così conteggerà solo un click ogni 24 ore, indipendentemente da chi l'ha fatto. Cioè, è praticamente inutile. Anche se io ho 200 click da 200 utenti diversi in un giorno mi darà 1 click.
 

alessandro1997

Utente Attivo
6 Ott 2009
5.302
1
0
26
Roma
alessandro1997.netsons.org
Ho sviluppato una soluzione che sfrutta i cookie ed è anche difficile da sabotare, a meno di non cancellare l'intero cookie. Il nome del cookie viene camuffato in modo che non sia facilmente rintracciabile. Il suo contenuto viene serializzato (è un array, così supporta anche più di un link con la stessa pagina) e successivamente codificato in base 64. Ecco il codice:
PHP:
<?php
// imposta il nome del cookie
$cookie_name = sha1('clicked');
$cookie_name = substr($cookie_name, 0, 7);

// si connette al database
$conn = mysql_connect('localhost', 'root') or die(mysql_error());
mysql_select_db('mydb', $conn) or die(mysql_error());

// recupera il link richiesto
$url = isset($_GET['url']) ? trim(addslashes($_GET['url'])) : '';

// controlla che un link sia impostato
if($url != '')
{
	// recupera il link dal database
	$query = mysql_query("SELECT * FROM links WHERE url='{$url}'") or die(mysql_error());
	
	// controlla che il link esista
	if(mysql_num_rows($query) == 1)
	{
		// recupera i dati sul link
		$assoc = mysql_fetch_assoc($query);
		
		// decodifica il cookie
		$clicked = base64_decode($_COOKIE[$cookie_name]);
		$clicked = unserialize($clicked);
		
		// recupera la differenza dall'ultimo click
		$diff = time() - $clicked[$assoc['id']];
		
		// controlla che sia passata un'ora dal click
		if($diff > 3600)
		{
			// incrementa il contatore
			$sql = "UPDATE links SET clicks = clicks + 1 WHERE id='{$assoc['id']}'";
			mysql_query($sql) or die(mysql_error());
			
			// aggiorna il cookie
			$clicked[$assoc['id']] = time();
			
			// codifica il cookie
			$clicked = serialize($clicked);
			$clicked = base64_encode($clicked);
			
			// reimposta il cookie
			$_COOKIE[$cookie_name] = $clicked;
		}
		
		// reindirizza al link
		header("Location: {$url}");
	}
	// se non esiste
	else
	{
		// visualizza un errore
		echo '<h1>Link inesistente</h1>';
		echo '<p>Il link richiesto non &egrave; presente nel database.</p>';
	}
}
// se non è impostato
else
{
	// visualizza un errore
	echo '<h1>Nessun link impostato</h1>';
	echo '<p>Non hai richiesto nessun link a cui venire reindirizzato.</p>';
}

// chiude la connessione
mysql_close($conn) or die(mysql_error());
?>

Questo è invece il dump SQL della tabella links:
Codice:
CREATE TABLE IF NOT EXISTS `links` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `url` text NOT NULL,
  `clicks` bigint(20) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

Fammi sapere se funziona e se ti serve qualche modifica! ;)
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
un altro suggerimento può essere questo, passando come dici tu dall'IP.
devi crearti due tabelle, una per i "cliccatori" e una per il contatore di click
ti metto giù sempre delle idee, comunque da sviluppare.

tabella cliccatori
id int(12) autoincremet primay key
ip string(50)
id_link int(12)
tempo int(15)

tabella contatore
id_link int(12) primari key
numclick int(12) default 0

quindi quando un utente clicca su un tuo link ne prelevi l'IP e l'id del link

per leggere l'IP (curiosando in giro) ho trovato questo (se ti può servire
PHP:
<?php
function legge_IP(){
	if(isset($_SERVER["HTTP_X_FORWARDED_FOR"])){//legge l'IP
		if ($_SERVER["HTTP_X_FORWARDED_FOR"] == "") {
			return getenv("REMOTE_ADDR");
		} else {
			return getenv("HTTP_X_FORWARDED_FOR");
		}
	} else {
		return getenv("REMOTE_ADDR");
	}
}//fine function
?>
poi da quello che ho capito leggi l'id del link con $_GET['c'];
quindi a questo punto
PHP:
<?php
//leggi l'id del link e l'IP dell'utente
$ip_utente = legge_IP();
$id_link=$_GET['c'];
//e leggi il tempo
$tempo=time();
//leggi la tabella cliccatori
$sql_1="SELECT * FROM cliccatori WHERE ip='$ip_utente' AND id_link='$id_link'";
$res_1=mysql_query($sql_1);
//ferifico l'esistenza del record
$esiste=mysql_num_rows($res_1);
if($esiste==0){// non esiste
	//creo il record su cliccatori
	sql_2="INSERT INTO cliccatori (ip,id_link,tempo) VALUE('$ip_utente','$id_link','$tempo')";
	res_2=mysql_query($sql_2);
	//l'utente non aveva mai cliccato su quel link
	//quindi lo creo il record su contatore o lo uppo
	$sql_3="INSERT INTO contatore VALUES('$id_link', 1) ON DUPLICATE KEY
			UPDATE numclick = numclick + 1";
	$res_3=mysql_query($sql_3);
}else{//l'utente aveva già cliccato sul link
	//leggo quando aveva cliccato
	$row=mysql_fetch_array($res-1);
	//verifico se ha cliccato meno di un giorno fa
	$tempo_addietro=$tempo-24*3600;
	if($tempo_addietro < $row['tempo']){// ha cliccato più di 24 ore fa'
		//uppo il suo record mettendo il tempo attuale
		$sql_4="UPDATE cliccatori SET tempo='$tempo' WHERE ip='$ip_utente'";
		$res_4=mysql_query($sql_4);
		//e uppo il contatore
		$sql_5="UPDATE contatore SET numclick = numclick + 1 WHERE id_link='$id_link'";
		$res_5=mysql_query($sql_5);
	}else{
		//avviso che non sono trascorse 24 ore dall'ultima volta che ha cliccato quel link
		//e non uppo nulla
		echo "devi aspettare NON sono trascorse ancora 24 ore";
	}
}
?>
guarda che come detto in precedenza è un'idea comunque da verificare.

p.s.
spero che il mio mèntore alex ci dia un occhio così dice se ho scritto ca...te
 

alessandro1997

Utente Attivo
6 Ott 2009
5.302
1
0
26
Roma
alessandro1997.netsons.org
Teoricamente dovrebbe funzionare, però come ho già detto basta ricollegarsi per cambiare l'IP e cliccare un'altra volta. Comunque pensavo ad una cosa: perché un utente dovrebbe falsificare volutamente le tue statistiche? Io non penso che ci sia da preoccuparsi. Basta semplicemente creare un sistema che memorizzi l'ultima volta che l'utente ha cliccato sul link. A questo punto però è meglio il mio script, perché è più probabile che l'utente cambi IP piuttosto che cancelli i cookie.
 

davide1982

Nuovo Utente
14 Giu 2010
26
0
0
Dunque, innanzitutto vi ringrazio entrambi della disponibilità.

Premetto che per la mia conoscenza del linguaggio php ancora piuttosto elementare mi sono "perso" in molti dei passaggi che mi avete proposto... Al di là di questo, il problema principale però è che non riesco ad adattarlo al codice che ho sviluppato precedentemente... (che tra l'altro non sono sicuro sia il migliore, però funziona piuttosto bene), e a questo punto lo riporto e lo spiego qui sotto:

PHP:
$result = mysql_query("SELECT img,link,numclick,descrizione FROM mia_tabella ORDER BY numclick DESC");
					
while ($row = mysql_fetch_array($result, MYSQL_NUM)) {
	printf("<div class='grid_8'><div class='screen'>%s</div><div class='text'><h2>%s<span class='visite'> &nbsp;- %s visite</span></h2> %s</div></div>", $row[0], $row[1], $row[2], $row[3]);  
	}
					
mysql_free_result($result);

Questo mi è risultato comodo perché con 4 righe di codice visualizzo nella mia pagina tutto il contenuto che ho nella tabella MySQL organizzato come voglio (immagine, link, visite, ecc.).
Il link però ho dovuto inserirlo direttamente nella tabella, in questo modo:
<a href="counter.php?tab=mia_tabella&id=1&dest=http://www.sitodestinazione.it/" target="_blank">mio_link</a>
Quindi il link viene preso dal database che mi rimanda al counter che incrementa e reindirzza al sito finale. ( un po' contorto?? :confused: )

Concludendo non ho idea se si può, e se sì come, adattare il codice di alessandro1997 a questo....

p.s.: se decidete di gettare la spugna con sta cosa lo capirei :)
 

davide1982

Nuovo Utente
14 Giu 2010
26
0
0
Ecco ho fatto 30 e faccio 31 riportando anche il codice del mio counter.php (quello sopra era della mia pagina.php), magari può essere d'aiuto:

PHP:
require ("db/db.php");

#Recupero la tabella, l'ID, e il link di destinazione del mio link
$tabella = $_GET['t'];
$linkid = $_GET['id'];
$linkdest = $_GET['dest'];

#Seleziono il record corrispondente all'ID del link
$sql = "SELECT link FROM $tabella WHERE id = '$linkid'"; $result = @mysql_query($sql,$link); $numrows = mysql_num_rows($result);

#Se trovo l'ID selezionato...

if ($numrows!=0) {

#Reindirizzo l'utente sul sito di destinazione
Header("Location: ". $linkdest);

#Aggiorno il contatore
$sql2 = "UPDATE $tabella SET numclick = numclick + 1 WHERE id = '$linkid'"; $result2 = mysql_query($sql2);

}
#Se invece l'ID non esiste...
else
{
#stampo un errore!
print "Errore..."; }
 
Discussioni simili
Autore Titolo Forum Risposte Data
I Incremento pubblicità canale telegram Vendere e Acquistare pubblicita' online 1
U [Cerco ] incremento traffico per il mio sito Vendere e Acquistare pubblicita' online 0
L Ricerca valore mysql e incremento PHP 73
P Disponibile software per incremento instagram Altri Annunci 1
M Offro servizio Incremento Follower e Gestione Profili Istagram Offerte e Richieste di Lavoro e/o Collaborazione 0
LalaGp [PHP] Incremento di un campo numerico in base a incremento campo di testo PHP 2
P [Vendo] incremento gruppi fb, fino a 10'000 utenti per singolo gruppo Annunci servizi di Social Media Marketing 0
A [PHP] Percentuale Incremento e Decremento PHP 2
cityweb90 [vendo] commenti fake sotto i post, recensioni, incremento fan pagine Fb. Annunci servizi di Social Media Marketing 0
emanuele.social [VENDO] Incremento Utenti Facebook ITALIANI 100% , Costo onesto Annunci servizi di Social Media Marketing 1
L Problema incremento campo tabella db MySQL 1
otto9due Piccola domanda su ++ e -- operatori di incremento/decremento PHP 0
F Incremento numero giornaliero jQuery 1
C CERCO incremento pagina facebook seguaci e foto Annunci servizi di Social Media Marketing 0
E php problema incremento e decremento di 2 variabili con click da pulsante PHP 0
R [VENDO] Incremento fan italiani/reali Annunci servizi di Social Media Marketing 0
promuovimi [Vendo] Incremento followers Google PLUS (+1, cerchie) per miglioramento SEO Annunci servizi di Social Media Marketing 0
G Vendo incremento Fan Facebook Italiani o Internazionali Annunci servizi di Social Media Marketing 0
C CERCO incremento Fan ITALIANI E REALI massimo 12€/1000 fan possibilmente da pagine CALCISTICHE Annunci servizi di Social Media Marketing 1
C VENDO-SCRIPT ADDMEFAST per incremento FANS su FACEBOOK Annunci servizi di Social Media Marketing 0
D [VENDO] Campagna incremento fan di pagine di Facebook Annunci servizi di Social Media Marketing 0
A Differenza tra anteporre o posporre l'operatore di incremento nel ciclo for Javascript 5
I Incremento giornaliero del numero di un giornale (es. 14 Maggio 2013 Numero 1 Anno 1) PHP 6
asevenx auto-incremento id che parte da valore sbagliato MySQL 3
asevenx ciclo for per un incremento maggiore di 1 PHP 1
B Cerco: incremento (Amici) per profilo FB Annunci servizi di Social Media Marketing 1
M [VENDO] Incremento fan facebook Annunci servizi di Social Media Marketing 1
G [VENDO] incremento fan ottimo servizio Annunci servizi di Social Media Marketing 0
D [VENDO] INCREMENTO FAN FACEBOOK 100% garantito Annunci servizi di Social Media Marketing 1
D [vendo]incremento fan page facebook/twitter follower/youtube visit Annunci servizi di Social Media Marketing 0
B [Compro] Incremento Fan/amici per pagina Facebook Annunci servizi di Social Media Marketing 9
H [Compro] Ricerchiamo collaboratori per incremento fanpage Facebook Annunci servizi di Social Media Marketing 1
A [VENDO] Incremento Fan Facebook Garantito 100% (fan reali esclusivamente italiani) Annunci servizi di Social Media Marketing 0
L [Compro] Pubblicità per incremento fans pagina Facebook "seria" Annunci servizi di Social Media Marketing 1
C [ACQUISTO] incremento Fan Facebook Annunci servizi di Social Media Marketing 1
A [VENDO] Incremento FAN facebook assicurato (super) Annunci servizi di Social Media Marketing 0
B [Compro] Incremento fan per Fanpage facebook di prossima creazione Annunci servizi di Social Media Marketing 0
A [vendo] offertissima incremento fan garantito 25 euro ogni 1000 fan Annunci servizi di Social Media Marketing 0
A [Vendo] Incremento fan garantito (super) Annunci servizi di Social Media Marketing 0
A [VENDO] incremento Fan Facebook assicurato. Annunci servizi di Social Media Marketing 0
A incremento anomalo di una variabile in un file .txt PHP 12
A [VENDO] Script Virale Facebook per incremento Fan Annunci servizi di Social Media Marketing 0
G incremento pagine e gruppi e invio suggerimenti Annunci servizi di Social Media Marketing 0
A [VENDO] 15.000 suggerimenti facebook a 10 euro, incremento fan assicurato! Annunci servizi di Social Media Marketing 3
helpdesk Calcolo incremento quantita acquisto PHP 2
N [VENDO] incremento utenti fanpage facebook assicurato Annunci servizi di Social Media Marketing 0
F script per incremento di valore ogni X secondi Javascript 5
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

Discussioni simili