Qual è il problema?
Qual è il problema?
Mattia vi manda a FunCool - Matriz - Directory Gogol - Sfondo rosso per la Birmania
«Tu mi dai fastidio perché ti credi tanto un Dio!» «Bè, dovrò pur prendere un modello a cui ispirarmi, no?» Woody Allen
Il problema non è il primo browser che non viene riconosciuto, ma se osservi bene prima del browser usato esce: UserAgentBrowser Usato:
P.S. Tu che sei un moderatore, se hai problemi nel capirmi puoi vedere il mio IP cosi da accedere nella mia root e vedere il servizio di statistiche: IP/Sito/statistiche.phpCodice:User Agent - Usato: 12 User AgentMediapartners-Google - Usato: 1 User AgentMozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 1.1.4322) - Usato: 125 User AgentMozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; FunWebProducts; .NET CLR 2.0.50727; Zango 10.0.370.0) - Usato: 1 User AgentMozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; SIMBAR={EB1DDB1B-F92B-4d61-AC10-CE077BBFF721}; .NET CLR 1.1.4322; InfoPath.1) - Usato: 1
Ultima modifica di miki92 : 06-01-2008 alle ore 18.07.50
E il problema qual è? Manca lo spazio o qualcos'altro?
Se è quello il problema, basta che al posto di:
Metti:Codice PHP:
echo "User Agent";
Codice PHP:
echo "User Agent ";
Mattia vi manda a FunCool - Matriz - Directory Gogol - Sfondo rosso per la Birmania
«Tu mi dai fastidio perché ti credi tanto un Dio!» «Bè, dovrò pur prendere un modello a cui ispirarmi, no?» Woody Allen
Ho modificato il codice cosi:
E mi stampa:Codice PHP:
echo "User Agent 1";
$sql = "SELECT user_agent, COUNT(*) AS num FROM statistiche GROUP BY user_agent";
$result = mysql_query($sql) or die(mysql_error());
while($ris=mysql_fetch_array($result)) {
echo "{$ris['user_agent']} - Usato: {$ris['num']}<br />";
}
Si può modificare affinché esca cosi:Codice:User Agent 1 - Usato: 12 Mediapartners-Google - Usato: 1 Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 1.1.4322) - Usato: 125 Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; FunWebProducts; .NET CLR 2.0.50727; Zango 10.0.370.0) - Usato: 1 Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; SIMBAR={EB1DDB1B-F92B-4d61-AC10-CE077BBFF721}; .NET CLR 1.1.4322; InfoPath.1) - Usato: 1
In poche parole voglio levare: - Usato: 12 all'inizio del codice.Codice:User Agent 1 I VARI USER_AGENT Usati: TOT_VOLTE
Vuoi fare in modo che non escano le righe dove non è stato inserito l'user agent?
Modifica:
Con:Codice PHP:
$sql = "SELECT user_agent, COUNT(*) AS num FROM statistiche GROUP BY user_agent";
Codice PHP:
$sql = "SELECT user_agent, COUNT(*) AS num FROM statistiche WHERE user_agent IS NOT NULL GROUP BY user_agent";
Mattia vi manda a FunCool - Matriz - Directory Gogol - Sfondo rosso per la Birmania
«Tu mi dai fastidio perché ti credi tanto un Dio!» «Bè, dovrò pur prendere un modello a cui ispirarmi, no?» Woody Allen
Ottimo, ma se viene usato per le lingue usate compare sempre quell' "Usato - 1"
Codice PHP:
$sql = "SELECT language, COUNT(*) AS num FROM statistiche WHERE language IS NOT NULL GROUP BY language";
$result = mysql_query($sql) or die(mysql_error());
while($ris=mysql_fetch_array($result)) {
echo "{$ris['language']} - Usato: {$ris['num']}<br />";
}
Prova a modificare così:
Codice PHP:
$sql = "SELECT language, COUNT(*) AS num FROM statistiche WHERE language IS NOT NULL AND language<>'' GROUP BY language";
Mattia vi manda a FunCool - Matriz - Directory Gogol - Sfondo rosso per la Birmania
«Tu mi dai fastidio perché ti credi tanto un Dio!» «Bè, dovrò pur prendere un modello a cui ispirarmi, no?» Woody Allen
Manca poco all'ultimazione dello script dopo non vi scoccio più
Per far si che le pagine del mio sito non vengano contate come referer?Codice PHP:
$sql = "SELECT provenienza, COUNT(*) AS num FROM statistiche WHERE provenienza IS NOT NULL GROUP BY provenienza";
$result = mysql_query($sql) or die(mysql_error());
while($ris=mysql_fetch_array($result)) {
echo "{$ris['provenienza']} - Usato: {$ris['num']}<br />";
}
Al posto di:
Metti:Codice PHP:
while($ris=mysql_fetch_array($result)) {
echo "{$ris['provenienza']} - Usato: {$ris['num']}<br />";
}
Codice PHP:
while($ris=mysql_fetch_array($result)) {
if (!strpos($ris['provenienza'],"miki92.altervista.org"))
echo "{$ris['provenienza']} - Usato: {$ris['num']}<br />";
}
Mattia vi manda a FunCool - Matriz - Directory Gogol - Sfondo rosso per la Birmania
«Tu mi dai fastidio perché ti credi tanto un Dio!» «Bè, dovrò pur prendere un modello a cui ispirarmi, no?» Woody Allen
Ecco qui, l'ultima cosa...se voglio che vengono contate le pagine visualizzate, però anche se uno fa il refresh il numero aumenti...
Leviamo il blocco a questo codice e lo mettiamo a questa discussioneCodice PHP:
$sql = "select pagina, count(*) as totale from statistiche where date_format(data_ora,'%d-%m-%Y')=date_format(now(),'%d-%m-%Y') group by pagina";
$result = mysql_query($sql) or die(mysql_error());
while($row_pagine=mysql_fetch_array($result)){
$nome_pagina = $row_pagine['pagina'];
$visite_pagina = $row_pagine['totale'];
$url = "http://miki92.altervista.org";
echo "<br />";
echo "$url<span class=\"viola\">$nome_pagina</span> <span class=\"celeste\">Visualizzata $visite_pagina volte.</span>\r\n";
Nel codice che hai scritto non c'è nessun blocco.
Mattia vi manda a FunCool - Matriz - Directory Gogol - Sfondo rosso per la Birmania
«Tu mi dai fastidio perché ti credi tanto un Dio!» «Bè, dovrò pur prendere un modello a cui ispirarmi, no?» Woody Allen
Allora togli il blocco nello script dove inserisci i dati nel database.
Mattia vi manda a FunCool - Matriz - Directory Gogol - Sfondo rosso per la Birmania
«Tu mi dai fastidio perché ti credi tanto un Dio!» «Bè, dovrò pur prendere un modello a cui ispirarmi, no?» Woody Allen
Ad essere sincero è tutto il pomeriggio che vedendo che qui non mi rispondevate cercavo soluzioni alternative però come si dice (tradotto in italiano) "Aggiusta la chiesa e rompi la sacrestia) ho provato a fare un doppio inserimento ecc ma quando aggiustavo le pagine visualizzate rompevo le visite uniche:
Codice PHP:
<?php
$connessione=mysql_connect("localhost","root","") or die(mysql_error());
$basedati=mysql_select_db("my_miki92") or die(mysql_error());
if (!isset($_GET['noStat'])) {
$risultato = mysql_query("SELECT * FROM statistiche WHERE indirizzo_ip='".mysql_escape_string($_SERVER['REMOTE_ADDR'])."' AND date_format(data_ora,'%d-%m-%Y')=date_format(now(),'%d-%m-%Y')");
if (mysql_num_rows($risultato)== 0) {
$sql = "INSERT INTO statistiche (pagina,data_ora,user_agent,language,indirizzo_ip,provenienza) values(\"".$_SERVER['SCRIPT_NAME']."\",now(),\"".$_SERVER['HTTP_USER_AGENT']."\",\"".$_SERVER['HTTP_ACCEPT_LANGUAGE']."\",\"".$_SERVER['REMOTE_ADDR']."\",\"".$_SERVER['HTTP_REFERER']."\")";
mysql_query($sql) or die(mysql_error());
}
}
?>
Per contare le visite uniche devi modificare lo script che le visualizza.Codice PHP:
<?php
$connessione=mysql_connect("localhost","root","") or die(mysql_error());
$basedati=mysql_select_db("my_miki92") or die(mysql_error());
if (!isset($_GET['noStat'])) {
$sql = "INSERT INTO statistiche (pagina,data_ora,user_agent,language,indirizzo_ip,provenienza) values(\"".$_SERVER['SCRIPT_NAME']."\",now(),\"".$_SERVER['HTTP_USER_AGENT']."\",\"".$_SERVER['HTTP_ACCEPT_LANGUAGE']."\",\"".$_SERVER['REMOTE_ADDR']."\",\"".$_SERVER['HTTP_REFERER']."\")";
mysql_query($sql) or die(mysql_error());
}
?>
Mattia vi manda a FunCool - Matriz - Directory Gogol - Sfondo rosso per la Birmania
«Tu mi dai fastidio perché ti credi tanto un Dio!» «Bè, dovrò pur prendere un modello a cui ispirarmi, no?» Woody Allen
Aspetta cosi torniamo al punto di partenza... questo era lo script di inserimento che avevo inizialmente che poi successivamente ti ho chiesto di modificare per bloccare le visite uniche cosi che il contatore di visite giornaliere e quello delle visite totali non aumentasse se un utente faceva il refresh della pagina...
Lo so che è quello, ma è l'unico modo. Le visite uniche vengono bloccate nella visualizzazione delle statistiche (raggruppi le visite di un utente per indirizzo IP e giorno).
Mattia vi manda a FunCool - Matriz - Directory Gogol - Sfondo rosso per la Birmania
«Tu mi dai fastidio perché ti credi tanto un Dio!» «Bè, dovrò pur prendere un modello a cui ispirarmi, no?» Woody Allen
Ok allora ricapitolando, il codice che scrive torna quello iniziale, mentre il codice che mostra il tutto attualmente è questo:
che poi viene mostrato in tabella tramite echo.Codice PHP:
$sql = "SELECT COUNT(*) FROM statistiche WHERE date_format(data_ora,'%d-%m-%Y')=date_format(now(),'%d-%m-%Y')";
$result = mysql_query($sql) or die(mysql_error());
$totale_visite_oggi = mysql_result($result,0,0);
$sql1 = "SELECT COUNT(*) AS totale FROM statistiche";
$result1 = mysql_query($sql1) or die(mysql_error());
$totale_visite = mysql_result($result1,0,0);
@funcool: ma non si può mettere un cookie col nome della pagina nella macchina del visitatore e fare in modo che duri fino alla mezzanotte del giorno stesso??
Ultima modifica di mtgforum : 06-01-2008 alle ore 19.09.50
La prima query la potresti risolvere in questo modo:
Per la seconda dipende di che tipo è il campo "data_ora".Codice PHP:
$sql = "SELECT COUNT(*) FROM statistiche WHERE date_format(data_ora,'%d-%m-%Y')=date_format(now(),'%d-%m-%Y') GROUP BY indirizzo_ip";
EDIT: Il fatto è che Miki92 vuole contare anche tutte le visualizzazioni, altrimenti bastava il blocco nell'inserimento.
Ultima modifica di funcool : 06-01-2008 alle ore 19.11.04
Mattia vi manda a FunCool - Matriz - Directory Gogol - Sfondo rosso per la Birmania
«Tu mi dai fastidio perché ti credi tanto un Dio!» «Bè, dovrò pur prendere un modello a cui ispirarmi, no?» Woody Allen
Cioè vuoi sapere cosa di preciso? Se è quello che ho capito io e di tipo DATESTAMP.
Ha ragione funcool, inoltre non voglio usare coockie/txt ma solo php/MySQL.
Inizialmente avevo pensato a un servizio di statistiche con PHP/txt che sapevo fare sicuramente con qualche script trovato su av, quello che sapevo io e qualcosa che mi ha detto un mio amico () ma poi per motivi personali ho voluto usare PHP/MySQL.
Prova così (ci sarà sicuramente un metodo migliore):
I cookie non sono legati ai file di testo.Codice PHP:
$sql1 = "SELECT indirizzo_ip,date_format(data_ora,'%d-%m-%Y') AS data FROM statistiche ORDER BY data_ora";
$result1 = mysql_query($sql1) or die(mysql_error());
$ultimadata="";
$indirizzi=array();
$totale_visite=0;
while($ris=mysql_fetch_array($result1)) {
if ($ultimadata==$ris['data']) {
if (!in_array($ris['indirizzo_ip'],$indirizzi)) {
$indirizzi[]=$ris['indirizzo_ip'];
$totale_visite++;
}
}
else {
$ultimadata=$ris['data'];
$indirizzi=array();
$indirizzi[]=$ris['indirizzo_ip'];
$totale_visite++;
}
}
Mattia vi manda a FunCool - Matriz - Directory Gogol - Sfondo rosso per la Birmania
«Tu mi dai fastidio perché ti credi tanto un Dio!» «Bè, dovrò pur prendere un modello a cui ispirarmi, no?» Woody Allen
Mattia vi manda a FunCool - Matriz - Directory Gogol - Sfondo rosso per la Birmania
«Tu mi dai fastidio perché ti credi tanto un Dio!» «Bè, dovrò pur prendere un modello a cui ispirarmi, no?» Woody Allen
Per le visite uniche per ip e per giorno, prova:
Però devo fare un appunto: hai pensato alla sicurezza? Hai fatto un escape delle stringhe che inserisci nel database? E quando fai l'output dei risultati, fai un escape degli eventuali codici HTML? Devi stare attento, se no potresti rischiare di subire un SQL injection o un CrossSiteScripting....Codice:select count(distinct indirizzo_ip, date(data_ora)) from statistiche
Un modo veloce per risolvere (spero) molti problemi (se non tutti) è fare un escape delle variabili lette da $_SERVER con htmlspecialchars:
$sql = "INSERT INTO statistiche (pagina, data_ora, user_agent, language, indirizzo_ip, provenienza) values(\"" . htmlspecialchars($_SERVER['SCRIPT_NAME'],ENT_QUOTES) . "\", now(), \"" . htmlspecialchars($_SERVER['HTTP_USER_AGENT'],ENT_QUOTES) . "\",\"" . htmlspecialchars($_SERVER['HTTP_ACCEPT_LANGUAGE'],ENT_QUOTES) . "\",\"" . htmlspecialchars($_SERVER['REMOTE_ADDR'],ENT_QUOTES) . "\",\"" . htmlspecialchars($_SERVER['HTTP_REFERER'],ENT_QUOTES) . "\")";
C'è mysql_escape_string() o addslashes()Però devo fare un appunto: hai pensato alla sicurezza? Hai fatto un escape delle stringhe che inserisci nel database? E quando fai l'output dei risultati, fai un escape degli eventuali codici HTML? Devi stare attento, se no potresti rischiare di subire un SQL injection o un CrossSiteScripting....
Un modo veloce per risolvere (spero) molti problemi (se non tutti) è fare un escape delle variabili lette da $_SERVER con htmlspecialchars:
$sql = "INSERT INTO statistiche (pagina, data_ora, user_agent, language, indirizzo_ip, provenienza) values(\"" . htmlspecialchars($_SERVER['SCRIPT_NAME'],ENT_QUOTES) . "\", now(), \"" . htmlspecialchars($_SERVER['HTTP_USER_AGENT'],ENT_QUOTES) . "\",\"" . htmlspecialchars($_SERVER['HTTP_ACCEPT_LANGUAGE'],ENT_QUOTES) . "\",\"" . htmlspecialchars($_SERVER['REMOTE_ADDR'],ENT_QUOTES) . "\",\"" . htmlspecialchars($_SERVER['HTTP_REFERER'],ENT_QUOTES) . "\")";
E comunque non vedo per quale motivo dovresti fare l'escape lì, come può l'utente finale modificare l'array superglobale $_SERVER sfruttandolo per una sql injection?
Ciao!
Infatti ho detto il modo veloce...
Usando mysql_escape_string risolvi il problema dell'sql injection, ma non quello del XSS
Immagina che un utente visiti la pagina links.php?evil=<script>alert("ciao")</script> e che questa pagina contenga un link al sito con questo script per statistiche, e di andare a vedere la pagina con il report dei referrer...
Con mysql_escape_string dovrebbe comunque tutte le volte fare l'escape con htmlspecialchars, mentre se si usa htmlspecialchars prima di fare l'insert il problema è risolto a monte... (htmlspecialchars con ENT_QUOTES fa anche l'escape di " e ', che sono i caratteri pericolosi per l'sql)
Non bisogna MAI fidarsi delle variabili esterne del php...
Ultima modifica di stasera : 06-01-2008 alle ore 22.29.46
Non ho trovato errori, scrivi il codice che utilizzi adesso (magari hai sbagliato a copiare qualcosa).
Io mi sono creato un piccolo script che registra i referer di tutte le entrate nel mio sito e più di una volta mi è capitato di incontrare stringhe "strane".
Mattia vi manda a FunCool - Matriz - Directory Gogol - Sfondo rosso per la Birmania
«Tu mi dai fastidio perché ti credi tanto un Dio!» «Bè, dovrò pur prendere un modello a cui ispirarmi, no?» Woody Allen