Autor Zpráva
Peti
Profil *
Zdravím,
dělám si na webu statistiku přístupů a prohlížečů. Když na web přijde nějaká
osoba, vyhledám v databázi, zda osoba nejde za posledních 10min na web už
poněkolikáté - $prodleva. Když ne, zjistím jeho prohížeč a uložím si ho
do databáze - a zátoveň zaktualizuji sloupeček s prohlížeči a sloupeček s
návštěvností.
$prodleva = 600;

$ip = getenv("REMOTE_ADDR");
$dotaz = mysql_query("SELECT * FROM prohlizece WHERE
cas=".time()."-$prodleva AND ip='$ip'");

if (mysql_num_rows($dotaz) == 0) {

$ua=$_SERVER['HTTP_USER_AGENT'];
if( strpos($ua, 'Netscape')){
$browser = 'Netscape';
}elseif(strpos($ua, 'Firefox')){
$browser = 'Firefox';
}else{
$browser = 'Mozilla';
}
}elseif(strpos($ua, 'MSIE')){
if(strpos($ua, 'Opera')){
$browser = 'Opera';
}else{
$browser = 'IE';
}
}elseif(strpos($ua, 'Opera')){
$browser = 'Opera';
}else{
$browser = 'ostatni';
}
$sql = mysql_query("INSERT INTO prohlizece VALUES
('$ip','".time()."','','$browser') AND UPDATE prohlizece SET $browser
= $browser + 1, navstevnost = navstevnost + 1");
}
else {
exit;
}

Tabulka vypadá takto:
CREATE TABLE prohlizece (
`ip` INT NOT NULL ,
`cas` INT NOT NULL ,
`navstevnost` INT NOT NULL ,
`firefox` INT NOT NULL ,
`opera` INT NOT NULL ,
`ie` INT NOT NULL ,
`mozilla` INT NOT NULL ,
`netscape` INT NOT NULL ,
`ostatni` INT NOT NULL
)


Jenomže problém je v tom, že když přijdu na stránku(index.php) a pak se podívám
do administrace na statistiky, zůstanou bez jakékoliv změny - nikde se nic
nepřičte... Jinak nevím jak s tou prodlevou a zjistenim jak dlouho se neprihlasil.... kdysz chci porovnavat nejake casy, tak je musim zadavat v sekundach, jako u $proleva?
nightfish
Profil
1) za všechny mysql_query si dej echo mysql_error();
vypíší se ti případné problémy při dotazování do databáze

2) select * from ..., mysql_num_rows()
výhodnější je spíš select count(*) as pocet from ..., mysql_result($vysledek, 0, 0)
(nepřenášejí se všechny vyhovující řádky z databáze, pouze jejich počet)

3) if (strpos($ua, 'Firefox'))
co to udělá, když bude řetězec "Firefox" na začátku proměnné $ua?
strpos vrátí 0, podmínka neprojde
řešením je testovat pomocí
if (strpos($ua, 'Firefox') !== false)
Peti
Profil *
Tak jsem to poupravil...

		$dotaz = mysql_query("SELECT * FROM prohlizece WHERE cas=".time()."-$prodleva AND ip='$ip'".mysql_error());


a
	$sql = mysql_query("INSERT INTO prohlizece VALUES ('$ip','".time()."','','$browser') AND UPDATE prohlizece SET $browser = $browser + 1, navstevnost = navstevnost + 1".mysql_error());


Ale nic se mi vypíše, žádný error a skript pořád nefunguje tak jak bych si představoval...
Peti
Profil *
Tak jsem ještě zkusil poupravit podmínku, jestli je user uz v DB a pokud je, tak jestli se neprihlasil behem 3 minut znova nebo pokud v ni neni, tak ulozit do DB jeho udaje a zvysit pocitadlo pristupu o 1 a totez u prislusneho browseru... v opacnem pripade konec, ale porad tam je nekde buG:(
include 'admin/pripojeni.php';
		
		$prodleva = 180;
    $aktualni_cas = time();
    
    $ip = getenv("REMOTE_ADDR"); //zjistime IP
		$dotaz = mysql_query("SELECT * FROM prohlizece WHERE ip='$ip'".mysql_error());
		$vysledek = mysql_fetch_array($dotaz);
		
		if ((mysql_num_rows($dotaz) != 0 && ($vysledek["cas"] < $aktualni_cas - $prodleva)) || mysql_num_rows($dotaz) == 0) {
      
			$ua=$_SERVER['HTTP_USER_AGENT']; // Retezec, ze ktereho se pokusime ziskat jmeno prohlizece
		if(strpos($ua, 'Gecko')){
			if( strpos($ua, 'Netscape')){
				$browser = 'Netscape';
			}elseif(strpos($ua, 'Firefox')){
				$browser = 'Firefox';
			}else{
				$browser = 'Mozilla';
			}
		}elseif(strpos($ua, 'MSIE')){
			if(strpos($ua, 'Opera')){
				$browser = 'Opera';
			}else{
				$browser = 'IE';
			}
		}elseif(strpos($ua, 'Opera')){
			$browser = 'Opera';
		}else{
		   $browser = 'ostatni';
		}
	$sql = mysql_query("INSERT INTO prohlizece VALUES ('$ip','".time()."','$navstevnost','$browser')".mysql_error());
  $sql2 = mysql_query("UPDATE prohlizece SET $browser = $browser + 1, navstevnost = navstevnost + 1".mysql_error());
  }
  else {
    exit;
  }

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: