I colori dei link aggiustali solo tramite css...
Se la funzione contatore() la richiami dopo piu_visitate() la visita corrente non viene conteggiata nella lista
I colori dei link aggiustali solo tramite css...
Se la funzione contatore() la richiami dopo piu_visitate() la visita corrente non viene conteggiata nella lista
contatore() viene dopo più_visitate(), eppure mi conteggia la home tutte le volte
Codice PHP:
...
<!--MENU DX-->
<?php
include("menuDX.php"); // IN QUESTO FILE C'è include("visitate.php"); CHE A SUA VOLTA CONTIENE piu_visitate(4);
?>
<!--FINE MENU DX-->
</div> <!-- container -->
<?php
contatore("Home");
?>
</body>
</html>
Ultima modifica di gruppoalveo : 30-03-2014 alle ore 22.05.27
Lo script lavora in questo ordine:
Legge nel db il numero di visite
↓
Crea la lista
↓
Aumenta il numero nel db...
E poi, se tra un po riceverai 1000 visite al giorno, un numero in più non farà la differenza
Il css è a posto, ora si tratta ancora di 2 cose: se puoi sistemarmi il problema "home" e poi come vedi appare sempre 1 vicino al link, bisognerebbe fare 1,2,3,4.
<ol> potrebbe andar bene, ma sposta a destra tutto
Codice PHP:
function piu_visitate($n) {
$mysqli = new mysqli("localhost", "root", "root", "gruppoalveo");
$visti = $mysqli->query("SELECT * FROM visitate ORDER BY visite DESC LIMIT 0,$n");
if ($visti->num_rows > 0) {
while ($link = $visti->fetch_array(MYSQLI_ASSOC)) {
echo "<div style=\"background-color:#f0f7f7; margin-bottom:5px; line-height:22px; text-align:left; font-size:12px; color:#437e7e;\"> 1. <a class=\"visti\" href='" . $link['url'] . "'>" . $link['pagina'] . "</a></div>";
}
}
}
piu_visitate(4);
?>
Ultima modifica di gruppoalveo : 31-03-2014 alle ore 01.11.11
Puoi modificare margin e padding di ol e li per spostarli a sinistra, se vuoi fare con i div dammi tutta la funzione che te la metto a posto... (io sono fissato con la semantica, è un colpo al cuore per me vedere qui div per una lista )
Per quel problema della visita in più penso questa sera come risolvere
Ultima modifica di tampertools : 31-03-2014 alle ore 07.04.22
In un qualche modo sono riuscito a combinare <ol> e css. Ora si tratta di togliere il contatore alla home quando si entra da lì, questo è tutto il codice.
Nella home:Codice PHP:
//Mette i dati nel DB e aumenta il contatore ad ogni visita
function contatore($title) {
$mysqli = new mysqli("localhost", "root", "pwd", "gruppoalveo");
$url = $_SERVER['PHP_SELF'];
$esiste = $mysqli->query ("SELECT * FROM visitate WHERE url='$url'");
if ($esiste->num_rows == 0) {
$mysqli->query ("INSERT INTO visitate VALUES ('$title', '$url', 1)");
}
else {
$old = $esiste->fetch_array(MYSQLI_ASSOC);
$visite = $old['visite'] + 1;
$mysqli->query("UPDATE visitate SET pagina='$title', visite=$visite WHERE url='$url'");
}
}
//Estrae i dati dal DB e crea la sequenza delle pagine più viste
function piu_visitate($n) {
$mysqli = new mysqli("localhost", "root", "pwd", "gruppoalveo");
$visti = $mysqli->query("SELECT * FROM visitate ORDER BY visite DESC LIMIT 0,$n");
if ($visti->num_rows > 0) {
echo "<ol class=\"formol\"'piu_visitate'>";
while ($link = $visti->fetch_array(MYSQLI_ASSOC)) {
echo "<li>";
echo "<a class=\"visti\" href='" . $link['url'] . "'>" . $link['pagina'] . "</a>";
echo "</li>";
}
echo "</ol>";
}
}
piu_visitate(4);
?>
Codice PHP:
…
</div> <!-- container -->
<?php
contatore("Home");
?>
</body>
</html>
Ultima modifica di gruppoalveo : 31-03-2014 alle ore 14.06.33 Motivo: Aggiornamento
Il "problema della Home" è che non vuoi che venga contata se, ad esempio, un utente ci arriva da Google?
Prova così: il contatore considera solo se l'utente arriva da uno dei siti che ci sono nell'arrat $whitelist
Se vuoi che funzioni anche quando l'utente arriva scrivendo a mano l'url nel browser devi aggiungere un link vuoto ( "" )
Codice PHP:
//Mette i dati nel DB e aumenta il contatore ad ogni visita
function contatore($title) {
$continua = false;
$from = parse_url($_SERVER["HTTP_REFERER"])["host"];
//Qui metti i siti che possono essere considerati nel contatore
$whitelist = array(
"www.gruppoalveo.altervista.org",
"gruppoalveo.altervista.org"
);
foreach ($whitelist as $sito) {
if ($from == $sito) $continua = true;
}
if ($continua) {
$mysqli = new mysqli("localhost", "root", "pwd", "gruppoalveo");
$url = $_SERVER['PHP_SELF'];
$esiste = $mysqli->query ("SELECT * FROM visitate WHERE url='$url'");
if ($esiste->num_rows == 0) {
$mysqli->query ("INSERT INTO visitate VALUES ('$title', '$url', 1)");
}
else {
$old = $esiste->fetch_array(MYSQLI_ASSOC);
$visite = $old['visite'] + 1;
$mysqli->query("UPDATE visitate SET pagina='$title', visite=$visite WHERE url='$url'");
}
}
}
Dopo
aggiungiCodice PHP:
$from = parse_url($_SERVER["HTTP_REFERER"])["host"];
e vediamo cosa salta fuori. ..Codice PHP:
echo "($from)";
Ho capito, hai aggiunto quell echo? Serve per capire dove sta il problema
Si, come puoi vedere da errore alla linea 20
Codice PHP:
function contatore($title) {
$continua = false;
$from = parse_url($_SERVER["HTTP_REFERER"])["host"]; //<--------------LINEA 20
echo "($from)";
//Qui metti tutte le pag. che non vuoi che il db conteggi quando l'utente vi arriva DA TERZI (se poi nel mio sito ci clicca su, ovviamente il contatore del db sale)
$whitelist = array(
"http://gruppoalveo.altervista.org/index.php",
"" //Questo anche quando l'utente vi arriva scrivendo a mano qualsiasi url del mio sito nella SUA barra degli indirizzi
);
foreach ($whitelist as $sito) {
if ($from == $sito) $continua = true;
}
if ($continua) {
$mysqli = new mysqli("localhost", "gruppoalveo", "root", "my_gruppoalveo");
$url = $_SERVER['PHP_SELF'];
$esiste = $mysqli->query ("SELECT * FROM visitate WHERE url='$url'");
if ($esiste->num_rows == 0) {
$mysqli->query ("INSERT INTO visitate VALUES ('$title', '$url', 1)");
}
else {
$old = $esiste->fetch_array(MYSQLI_ASSOC);
$visite = $old['visite'] + 1;
$mysqli->query("UPDATE visitate SET pagina='$title', visite=$visite WHERE url='$url'");
}
}
}
Prova a sostituire questo
Con questoCodice PHP:
$from = parse_url($_SERVER["HTTP_REFERER"])["host"];
echo "($from)";
Codice PHP:
$from = $_SERVER["HTTP_REFERER"];
echo $from;
$from = parse_url($from);
print_r($from);
Va meglio, ma ancora un errore e non conta nel db, prova anche a cliccare su qualche pagina.
Codice PHP:
function contatore($title) {
$continua = false; //-----------LINEA 19
$from = $_SERVER["HTTP_REFERER"];
echo $from;
$from = parse_url($from);
print_r($from);
$whitelist = array(
//Pag. che non vuoi che il db conteggi quando l'utente vi arriva DA TERZI (se poi è nel mio sito e ci clicca su, ovviamente il contatore del db sale)
"http://gruppoalveo.altervista.org",
"gruppoalveo.it",
"" //Questo anche quando l'utente vi arriva scrivendo a mano qualsiasi url del mio sito nella SUA barra degli indirizzi
);
foreach ($whitelist as $sito) {
if ($from == $sito) $continua = true;
}
if ($continua) {
$mysqli = new mysqli("localhost", "gruppoalveo", "pwd", "my_gruppoalveo");
$url = $_SERVER['PHP_SELF'];
$esiste = $mysqli->query ("SELECT * FROM visitate WHERE url='$url'");
if ($esiste->num_rows == 0) {
$mysqli->query ("INSERT INTO visitate VALUES ('$title', '$url', 1)");
}
else {
$old = $esiste->fetch_array(MYSQLI_ASSOC);
$visite = $old['visite'] + 1;
$mysqli->query("UPDATE visitate SET pagina='$title', visite=$visite WHERE url='$url'");
}
}
}
Ultima modifica di gruppoalveo : 01-04-2014 alle ore 13.01.40
Per togliere l'errore sostituisci
ConCodice PHP:
$from = $_SERVER["HTTP_REFERER"];
echo $from;
$from = parse_url($from);
print_r($from);
Inoltre nella whitelist non mettere "http://gruppoalveo.altervista.org", tanto la funzione parse_url toglie l http da davanti.Codice PHP:
if (isset($_SERVER["HTTP_REFERER"]) && $_SERVER["HTTP_REFERER"] != "") {
$from = parse_url($_SERVER["HTTP_REFERER"])["host"];
}
else {
$from = "";
}
echo "($from)";
Metti invece sia "www.gruppoalveo.altervista.org" che "gruppoalveo.altervista.org" che sono i due indirizzi che i tuoi visitatori useranno di più
Ultima modifica di tampertools : 01-04-2014 alle ore 15.35.12
E' ancora tutto come prima
Codice PHP:
function contatore($title) {
$continua = false;
if (isset($_SERVER["HTTP_REFERER"]) && $_SERVER["HTTP_REFERER"] != "") {
$from = parse_url($_SERVER["HTTP_REFERER"])["host"];
}
else {
$from = "";
}
echo "($from)";
$whitelist = array(
//Pag. che non vuoi che il db conteggi quando l'utente vi arriva DA TERZI (se poi è nel mio sito e ci clicca su, ovviamente il contatore del db sale)
"www.gruppoalveo.altervista.org",
"gruppoalveo.altervista.org",
"www.gruppoalveo.it",
"gruppoalveo.it",
"" //Questo anche quando l'utente vi arriva scrivendo a mano qualsiasi url del mio sito nella SUA barra degli indirizzi
);
foreach ($whitelist as $sito) {
if ($from == $sito) $continua = true;
}
if ($continua) {
$mysqli = new mysqli("localhost", "gruppoalveo", "pwd", "my_gruppoalveo");
$url = $_SERVER['PHP_SELF'];
$esiste = $mysqli->query ("SELECT * FROM visitate WHERE url='$url'");
if ($esiste->num_rows == 0) {
$mysqli->query ("INSERT INTO visitate VALUES ('$title', '$url', 1)");
}
else {
$old = $esiste->fetch_array(MYSQLI_ASSOC);
$visite = $old['visite'] + 1;
$mysqli->query("UPDATE visitate SET pagina='$title', visite=$visite WHERE url='$url'");
}
}
}
Non l'ho mai provato, ma prova a sostituire questa riga
ConCodice PHP:
$from = parse_url($_SERVER["HTTP_REFERER"])["host"];
[PHP]
$from = parse_url($_SERVER["HTTP_REFERER"]);
$from = $from["host"];
Se tolgo echo "($from)"; non da errori ma mi conteggia la home nel db quando entro, praticamente è come il codice originale.
Scusa, perché fai togliere http://? Uno può anche digitarlo.Codice PHP:
function contatore($title) {
$continua = false;
if (isset($_SERVER["HTTP_REFERER"]) && $_SERVER["HTTP_REFERER"] != "") {
$from = parse_url($_SERVER["HTTP_REFERER"]);
$from = $from["host"];
}
else {
$from = "";
}
//echo "($from)";
$whitelist = array(
//Pag. che non vuoi che il db conteggi quando l'utente vi arriva DA TERZI (se poi è nel mio sito e ci clicca su, ovviamente il contatore del db sale)
"www.gruppoalveo.altervista.org",
"gruppoalveo.altervista.org",
"www.gruppoalveo.it",
"gruppoalveo.it",
"" //Questo anche quando l'utente vi arriva scrivendo a mano qualsiasi url del mio sito nella SUA barra degli indirizzi
);
foreach ($whitelist as $sito) {
if ($from == $sito) $continua = true;
}
if ($continua) {
$mysqli = new mysqli("localhost", "gruppoalveo", "pwd", "my_gruppoalveo");
$url = $_SERVER['PHP_SELF'];
$esiste = $mysqli->query ("SELECT * FROM visitate WHERE url='$url'");
if ($esiste->num_rows == 0) {
$mysqli->query ("INSERT INTO visitate VALUES ('$title', '$url', 1)");
}
else {
$old = $esiste->fetch_array(MYSQLI_ASSOC);
$visite = $old['visite'] + 1;
$mysqli->query("UPDATE visitate SET pagina='$title', visite=$visite WHERE url='$url'");
}
}
}
Ultima modifica di gruppoalveo : 02-04-2014 alle ore 01.15.24 Motivo: Aggiornamento
Faccio togliere l'http:// per via della funzione parse_url...
Non so perché ma quando uno arriva da Google la variabile $_SERVER["HTTP_REFERER"] (quella che indica da dove arriva l'utente) è vuota...
Prova a guardare se cercando il tuo sito in un altro motore di ricerca (ad es yahoo o Bing) lo conteggia lo stesso
echo "($from)" mi serviva proprio per vedere perché non andava
Ho fatto delle prove con Google, Bing e Yahoo: se entro nella home, non conteggia nel db e nella home stampa il nome del motore tra le parentesi, se invece sono già nel mio sito e entro nella home, lo conteggia. Non ho ancora capito la faccenda di parse_url
Codice PHP:
function contatore($title) {
$continua = false;
if (isset($_SERVER["HTTP_REFERER"]) != "") {
$from = parse_url($_SERVER["HTTP_REFERER"]);
$from = $from["host"];
}
else {
$from = "";
}
echo "($from)";
$whitelist = array(
//Pag. che non vuoi che il db conteggi quando l'utente vi arriva DA TERZI (se poi è nel mio sito e ci clicca su, ovviamente il contatore del db sale)
"www.gruppoalveo.altervista.org",
"gruppoalveo.altervista.org",
"www.gruppoalveo.it",
"gruppoalveo.it",
"" //Questo anche quando l'utente vi arriva scrivendo a mano qualsiasi url del mio sito nella SUA barra degli indirizzi
);
foreach ($whitelist as $sito) {
if ($from == $sito) $continua = true;
}
if ($continua) {
$mysqli = new mysqli("localhost", "gruppoalveo", "pwd", "my_gruppoalveo");
$url = $_SERVER['PHP_SELF'];
$esiste = $mysqli->query ("SELECT * FROM visitate WHERE url='$url'");
if ($esiste->num_rows == 0) {
$mysqli->query ("INSERT INTO visitate VALUES ('$title', '$url', 1)");
}
else {
$old = $esiste->fetch_array(MYSQLI_ASSOC);
$visite = $old['visite'] + 1;
$mysqli->query("UPDATE visitate SET pagina='$title', visite=$visite WHERE url='$url'");
}
}
}
//Estrae i dati dal DB e crea la sequenza delle pagine più viste
function piu_visitate($n) {
$mysqli = new mysqli("localhost", "gruppoalveo", "root", "my_gruppoalveo");
$pag_viste = $mysqli->query("SELECT * FROM visitate ORDER BY visite DESC LIMIT 0,$n");
if ($pag_viste->num_rows > 0) {
echo "<ol class=\"formol\"'piu_visitate'>";
while ($link = $pag_viste->fetch_array(MYSQLI_ASSOC)) {
echo "<li>";
echo "<a class=\"visti\" href='".$link['url']."'>".$link['pagina']."</a>";
echo "</li>";
}
echo "</ol>";
}
}
piu_visitate(4);
?>
Ultima modifica di gruppoalveo : 03-04-2014 alle ore 12.28.12
Quindi ora funziona?
Parse url serve a questo:
Il contatore deve contare solo se l'utente arriva da una pagina del tuo sito. Ma le paginesono tante, ssarebbe lungo scrivele tutte in $whitelist. E allora io recupero solo l'url del sito senza le informazioni su protocollo, pagina e variabile e porta
Quindi ad esempio...
da ottengo http://www.gruppoalveo.altervista.org/home.php www.gruppoalveo.altervista.org https://www.google.it:433/search.php?q=gruppoalveo www.google.it ... ...
Ultima modifica di tampertools : 02-04-2014 alle ore 14.24.59
Ora funziona, perciò posso togliere echo "($from)";. Io il mio sito l'ho messo anche nei Preferiti, se ci clicco da li, il contatore sale, non si può evitare?
In locale invece mi segna 2 volte ogni entrata esterna, poi quando sono dentro non segna più niente localhost:8888/MIEI%20SITI/Alveo
Domanda: se l'utente nel suo browser digita http://gruppoalveo.altervista.org come fa ad arrivare a me visto che parse_url toglie http://?
Ultima modifica di gruppoalveo : 02-04-2014 alle ore 21.20.28 Motivo: Aggiornamento
In locale non ti funziona perché l'url non è piu gruppoalveo.altervista.org ma localhst.
Per togliere il contatore se uno arriva dai preferiti devi togliere dall array $whitelist "".
Per la tua domanda: parse_url lavora su una STRINGA contenente l'url della pagina cda cui arriva l'utente
Ok, ora sembra tutto a posto, quando aggiorno qualsiasi pagina il contatore sale, però questo mi sembra logico perché è come che dal mio sito entro nella pagina stessa. L'unica cosa che non va è in locale, i codici sono identici, cambia solo questo
Questo è il codice completoCodice PHP:
$whitelist = array(
//Pag. che non vuoi che il db conteggi quando l'utente vi arriva DA TERZI (se poi è nel mio sito e ci clicca su, ovviamente il contatore del db sale)
"localhost:8888/MIEI SITI/Alveo/index.php",
);
...
Codice PHP:
//Mette i dati nel DB e aumenta il contatore ad ogni visita
function contatore($title) {
$continua = false;
if (isset($_SERVER["HTTP_REFERER"]) != "") {
$from = parse_url($_SERVER["HTTP_REFERER"]);
$from = $from["host"];
}
else {
$from = "";
}
$whitelist = array(
//Pag. che non vuoi che il db conteggi quando l'utente vi arriva DA TERZI (se poi è nel mio sito e ci clicca su, ovviamente il contatore del db sale)
"localhost:8888/MIEI SITI/Alveo/index.php",
);
foreach ($whitelist as $sito) {
if ($from == $sito) $continua = true;
}
if ($continua) {
$mysqli = new mysqli("localhost", "root", "pwd", "gruppoalveo");
$url = $_SERVER['PHP_SELF'];
$esiste = $mysqli->query ("SELECT * FROM visitate WHERE url='$url'");
if ($esiste->num_rows == 0) {
$mysqli->query ("INSERT INTO visitate VALUES ('$title', '$url', 1)");
}
else {
$old = $esiste->fetch_array(MYSQLI_ASSOC);
$visite = $old['visite'] + 1;
$mysqli->query("UPDATE visitate SET pagina='$title', visite=$visite WHERE url='$url'");
}
}
}
//Estrae i dati dal DB e crea la sequenza delle pagine più viste
function piu_visitate($n) {
$mysqli = new mysqli("localhost", "root", "pwd", "gruppoalveo");
$pag_viste = $mysqli->query("SELECT * FROM visitate ORDER BY visite DESC LIMIT 0,$n");
if ($pag_viste->num_rows > 0) {
echo "<ol class=\"formol\"'piu_visitate'>";
while ($link = $pag_viste->fetch_array(MYSQLI_ASSOC)) {
echo "<li>";
echo "<a class=\"visti\" href='".$link['url']."'>".$link['pagina']."</a>";
echo "</li>";
}
echo "</ol>";
}
}
piu_visitate(4);
?>
Ultima modifica di gruppoalveo : 03-04-2014 alle ore 13.53.46 Motivo: Aggiornamento
Nella whitelist metti solo "localhost" senza tutta la pappardella
(Magia del parse_url )
Mi è venuto un pensiero: non mi sembra giusto che si conteggino le pagine quando sono IO a guardarle, vorrei che il conteggio venga fatto quando è un visitatore che si trova nel mio sito, ci vorrebbe un codice che riconosce il mio mac, è possibile?
Torniamo al locale, non si aggiorna la home anche se ci clicco nel sito, le altre pagine invece si aggiornano.
Codice PHP:
...
$whitelist = array(
//Pag. che non vuoi che il db conteggi quando l'utente vi arriva DA TERZI (se poi è nel mio sito e ci clicca su, ovviamente il contatore del db sale)
"localhost"
);
foreach ($whitelist as $sito) {
if ($from == $sito) $continua = true;
}
...
E nel DB scrive solo /index.php (il 3 l'ho messo io)
Ultima modifica di gruppoalveo : 04-04-2014 alle ore 03.35.14 Motivo: Aggiornamento
Bene, il problema in locale è risolto.
Ora, mi è venuto un pensiero: vorrei che le pagine non si conteggino quando sono IO a guardarle, vorrei che il conteggio venga fatto quando è un visitatore che si trova nel mio sito, ci vorrebbe un codice che riconosce il mio mac, è possibile?
Ho trovato delle sigle che identificano in modo univoco il mio mac, che dici di includerli nel codice?
Ovviamente li ho modificatiCodice PHP:
Identificatore universale: 0D091393-0F4F-53A9-F4DF-7481BAF1A453
N° di serie: C02FNAFPDH9W
Mac Address Ethernet: v5:0m:14:31:04:m6
Mac Address Wireless: k9:ce:8f:0f:4c:64
Ultima modifica di gruppoalveo : 04-04-2014 alle ore 22.03.33