Autor | Zpráva | ||
---|---|---|---|
Peti Profil * |
#1 · Zasláno: 4. 3. 2008, 10:10:13
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 |
#2 · Zasláno: 4. 3. 2008, 10:38:05
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 * |
#3 · Zasláno: 4. 3. 2008, 12:03:43
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 * |
#4 · Zasláno: 4. 3. 2008, 13:02:43
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; } |
||
Časová prodleva: 16 let
|
0