escludersi da un conta clicks

Silen

Utente Attivo
24 Nov 2008
64
0
0
silen.netsons.org
buonasera, sono di nuovo qui con un quesito :p

lo script che uso apre il file .txt corrispondente al numero del capitolo di una certa storia che l'utente ha scelto di leggere e restituisce come output il testo a video

dentro la tabella capitoli ho impostato
PHP:
`letture` bigint(20) NOT NULL default '0'

mentre le variabili principali sono inizializzate con un GET
PHP:
(int)$id_storia=$_GET['storia'];
(int)$capitolo=$_GET['capitolo'];

ho creato e aggiunto, quindi, questo semplicissimo contatore di letture

PHP:
$readcount=mysql_query("SELECT letture FROM capitoli WHERE storia='$id_storia' AND id_capitolo='$capitolo'", $conn);
while ($numreads=mysql_fetch_array($readcount)) {
$oldreads=$numreads[letture];
}
$newreads=$oldreads+1;
mysql_query("UPDATE capitoli SET letture='$newreads' WHERE storia='$id_storia' AND id_capitolo='$capitolo'", $conn);

mentre nella pagina di riepilogo visualizzo il totale delle letture dei capitoli finora pubblicati

PHP:
$readcount=mysql_query("SELECT SUM(letture) AS totreads FROM capitoli WHERE storia='$id_storia'", $conn);
while ($numreads=mysql_fetch_array($readcount)) {
$reads="$numreads[totreads]";
}

ora, io vorrei, intanto, sapere se è possibile che vengano contate come reali letture solo i clicks sui links,
quindi evitare che ad ogni refresh pagina il contatore incrementi di uno il record sul database; se sì, come?
potreste farmi un esempio pratico da provare? perché, onestamente, non so proprio da dove partire :crying:,
mi basta anche un hint su cosa e dove andare studiare :book:, poi magari torno col risultato

altra esigenza che ho è quella di escludere me medesima dal conto delle letture, quindi avevo pensato di farlo tramite i cookies,
ma non posso utilizzare l'indirizzo IP perché sono utente fastweb; siccome quando lavoro sullo script e sul sito sono loggata
come admin tramite sessione, posso sfruttare la relativa variabile che mi identifica?
se mi dite che si può fare, magari poi posto anche il codice specifico delle sessioni

intanto ringrazio come sempre chiunque mi aiuterà :byebye:
 
Ti dò due idee... poi cerca di documentarti :)

Via più breve: i cookies o le sessioni.
Potresti creare un cookie nella pagina dell'articolo e fare un controllo di questo tipo: se il cookie è stato creato non incrementare le visualizzazioni altrimenti incrementa le visualizzazioni e crea il cookie.
Stessa identica cosa per le sessioni...
Vatanggio: si usa poca memoria e funziona anche se l'ip dell'utente non è statico.
Svantaggio: l'utente (esperto!) può cancellare il cookie.

La via un pò più lunga, ma sicuramente più sicura è registrare gli indirizzi ip in un database.
Quindi come in precedenza, fai un controllo del tipo: se l'ip è presente nel database non incremento niente, altrimenti incremento le visite e inserisco l'ip nel database.
Vantaggio: buona sicurezza: l'utente non può eliminare il proprio ip dal database.
Svantaggio: si usa un pò di spazio nel database e si consuma un pò più di memoria. (dipende se usi uno spazio web free, hosting, vps, server dedicato, ecc. in parole povere: più spendi per il lo spazio web, più questo svantaggio diventa indifferente); secondo svantaggio: se l'ip non è statico la visita dell'utente che cambia ip viene ri-conteggiata.

Per quanto riguarda il non conteggiare testessa... basterebbe aggiungere al controllo creato prima, un and logico che imponga che non deve essere conteggiata la visita se il tuo ip è uguale a 'ip'. Oppure se utilizzi l'opzione database basta che inserisci anche il tuo IP nel database e il gioco è fatto.
 
ottimo, visto che è una cosa che si può fare con le sessioni, opterei per utilizzare quelle, visto che sia l'admin (cioè io) che gli utenti vengono identificati attraverso una variabile di sessione. Questo è il codice di sessione.php che viene incluso in tutti files dello script
PHP:
<?php
session_start();
if ((isset($_SESSION["controllo"])) && ($_SESSION["controllo"]=="si")) {
	$id=$_SESSION["id"];
	$permesso=$_SESSION["permesso"];
	}
else $permesso=0;
?>
dopodiché l'utente viene autenticato così nel file auth.php
PHP:
session_start();
header("Cache-control: private");
$_SESSION["controllo"]="si";
$_SESSION["id"]=$id;
$_SESSION["permesso"]="1";
dove "1" corrisponde all'utente che si logga, "2" all'amministratore, "0" al visitatore
ma quindi devo anche mettere un cookie nella pagina dove leggo i capitoli delle storie oppure lo posso settare già qui?
(non è un problema perché i miei utenti difficilmente andranno a cancellare il mio cookie "a mano" :p)
potresti farmi un esempio di un cookie che fa quello che hai detto? Io ho fatto un po' di prove con setcookie() con risultati poco incoraggianti :(
scusa se ho fatto domande stupide ma non so esattamente cosa andare a cercare per documentarmi :o
 
già letto, e da cui ho tirato fuori poco e niente :(

PHP:
setcookie("letture", "", time() + 84600);
non mi è servito a granché dato che comunque al refresh pagina incrementa lo stesso le letture, per questo ho chiesto un esempio

e comunque quell'articolo non mi spiega nulla delle sessioni e come usarle, né se posso impostare questo cookie direttamente nel file sessione.php
 
Sai ben poco di php, vero?
Comunque chiariamo: le sessioni sono una cosa, i cookies sono un'altra.
In questo caso le sessioni lascele perdere, nella pagina degli articoli metti questo codice:
PHP:
$idArticolo = $_GET['id']; // cambialo in base alle tue esigenze...
if ($_COOKIES['articolo_' . $idArticolo] != 'letto') {
  setcookie('articolo_' . $idArticolo, 'letto', time()+60*60*24*30);
  // incrementa le visite...
}
Studia.
 
grazie dell'esempio jan267 è da pochi mesi che ho cominciato a studiare php, e i risultati dei miei sforzi li vedi in firma :rolleyes:
intanto dovrei aver capito cosa non andava in quello che facevo io, ed è già buono, ora provo! ancora grazie della pazienza :o

sono riuscita comunque ad escludere me stessa dall'incremento delle visite, se potessi dirmi se ho fatto bene te ne sarei grata
ho sfruttato la variabile di sessione che mi identifica come admin e aggiunto alla pagina di lettura delle storie questa condizione
PHP:
if ($permesso!=2) {
$readcount=mysql_query("SELECT letture FROM capitoli WHERE storia='$id_storia' AND id_capitolo='$capitolo'", $conn);
while ($numreads=mysql_fetch_array($readcount)) {
$read=$numreads[letture];
}
$read++;
mysql_query("UPDATE capitoli SET letture='$read' WHERE storia='$id_storia' AND id_capitolo='$capitolo'", $conn);
}
e infatti non incrementa i miei clicks nella tabella ma solo quelli di utenti loggati e visitatori non loggati :tifoso:
 

Discussioni simili