| 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: 18 let
|
|||
0