Autor Zpráva
lopik007
Profil
Ahoj lidičky prosím vás může mi někdo kde ve scriptu, který vypíšu níže je chyba? Script funguje, jen počítá mou návštěvu, ale ostatních uživatelů nepočítá.

<?php
session_start();
include("../inc/db.php");

/* Jednodenní kontrola pro menší zátěž serveru */ 
if($_SESSION['navstevnost'] != date("d-n-y")) { 
/* Byl dnes už započítán? */ 
$zadnes = mysql_fetch_assoc(mysql_query("SELECT COUNT(*) AS pocet FROM poc_host WHERE ip='$ip' AND datum='".date("Y-m-d")."';")); 
if($zadnes['pocet'] == 0) { 
/* Ne? Tak ho započítáme */ 
$byluz = mysql_fetch_assoc(mysql_query("SELECT COUNT(*) AS pocet FROM poc_host WHERE ip='$ip';")); 
if($byluz['pocet'] == 0) { 
$pocitat = true; 
mysql_query("INSERT INTO poc_host VALUES('".$ip."', '".date("Y-m-d")."')"); 
} else { 
$pocitat = true; 
mysql_query("UPDATE poc_host SET datum='".date("Y-m-d")."' WHERE ip='".$ip."'"); 
} 
if($pocitat) { 
/* Návštěvnost celkem */ 
if(mysql_num_rows(mysql_query("SELECT * FROM poc_celkem")) != 0) { 
$celkem = mysql_result(mysql_query("SELECT * FROM poc_celkem"), 0) + 1; 
mysql_query("UPDATE poc_celkem SET pocet=pocet+1"); 
} else { 
$celkem = 1; 
mysql_query("INSERT INTO poc_celkem VALUES(1)"); 
} 
/* Měsíční návštěvnost */ 
$aktmesic = mysql_fetch_object(mysql_query("SELECT * FROM poc_mesic WHERE mesic='".date("Y-m-00")."'")); 
$mesic = $aktmesic->pocet+1; 
if($mesic == 1) { 
mysql_query("INSERT INTO poc_mesic VALUES('".date("Y-m-00")."', 1)"); 
} else { 
mysql_query("UPDATE poc_mesic SET pocet=pocet+1 WHERE mesic='".date("Y-m-00")."'"); 
} 
/* Denní návštěvnost */ 
$zaznam = mysql_fetch_object(mysql_query("SELECT * FROM poc_dnes WHERE datum='".date("Y-m-d")."'")); 
$dnes = $zaznam->pocet+1; 
if($dnes == 1) { 
mysql_query("INSERT INTO poc_dnes VALUES('".date("Y-m-d")."', 1)"); 
} else { 
mysql_query("UPDATE poc_dnes SET pocet=pocet+1 WHERE datum='".date("Y-m-d")."'"); 
} 
} 
$_SESSION['navstevnost'] = date("d-n-y"); 
} else { 
$_SESSION['navstevnost'] = date("d-n-y"); 
} 
}
?>
<?php
/* Celkem */ 
$celkem = mysql_fetch_array(mysql_query("SELECT * FROM poc_celkem;")); 
$poc_celkem = $celkem['pocet']; 
/* Unikátní IP */ 
$celkem_unikat = mysql_fetch_assoc(mysql_query("SELECT COUNT(*) AS pocet FROM poc_host")); 
$celkem_unikat = $celkem_unikat['pocet']; 
/* Za měsíc */ 
$mesic = mysql_fetch_array(mysql_query("SELECT * FROM poc_mesic WHERE DATE_FORMAT(mesic,'%Y-%m')= DATE_FORMAT(NOW(),'%Y-%m');")); 
$poc_mesic = $mesic['pocet']; 
switch (date("n")) { 
case 1 : $mes = "leden"; break; 
case 2 : $mes = "únor"; break; 
case 3 : $mes = "březen"; break; 
case 4 : $mes = "duben"; break; 
case 5 : $mes = "květen"; break; 
case 6 : $mes = "červen"; break; 
case 7 : $mes = "červenec"; break; 
case 8 : $mes = "srpen"; break; 
case 9 : $mes = "září"; break; 
case 10 : $mes = "říjen"; break; 
case 11 : $mes = "listopad"; break; 
case 12 : $mes = "prosinec"; break; 
} 
/* Minulý měsíc */ 
$minuly_mesic = mysql_fetch_array(mysql_query("SELECT * FROM poc_mesic WHERE DATE_FORMAT(mesic,'%Y-%m')= DATE_FORMAT(DATE_SUB(NOW(),INTERVAL 1 MONTH),'%Y-%m');")); 
$minuly_mesic = $minuly_mesic['pocet']; 
/* Tento týden */ 
if(date("l") == "Monday") {$denvtydnu = -1; $tydodecist = -7;} 
if(date("l") == "Tuesday") {$denvtydnu = -2; $tydodecist = -8;} 
if(date("l") == "Wednesday"){$denvtydnu = -3; $tydodecist = -9;} 
if(date("l") == "Thursday") {$denvtydnu = -4; $tydodecist = -10;} 
if(date("l") == "Friday") {$denvtydnu = -5; $tydodecist = -11;} 
if(date("l") == "Saturday") {$denvtydnu = -6; $tydodecist = -12;} 
if(date("l") == "Sunday") {$denvtydnu = -7; $tydodecist = -13;} 
$tyden = mysql_fetch_array(mysql_query("SELECT SUM(pocet) AS pocet FROM poc_dnes WHERE datum > ADDDATE(now(), '".$denvtydnu."')")); 
$poc_tyden = $tyden['pocet']; 
/* Minulý týden */ 
$minulytyden = mysql_fetch_array(mysql_query("SELECT SUM(pocet) AS pocet FROM poc_dnes WHERE datum BETWEEN ADDDATE(now(), '".$tydodecist."') and ADDDATE(now(), '".$denvtydnu."')")); 
$minulytyden = $minulytyden['pocet']; 
/* Dnes */ 
$dnes = mysql_fetch_array(mysql_query("SELECT * FROM poc_dnes WHERE DATE_FORMAT(datum,'%Y-%m-%d')= DATE_FORMAT(NOW(),'%Y-%m-%d');")); 
$poc_dnes = $dnes['pocet']; 
/* Průměrně za den */ 
$prumer_den = mysql_fetch_array(mysql_query("SELECT avg(pocet) AS prumer FROM poc_dnes;")); 
$denni_prumer = @round($prumer_den['prumer']); 
?> 
<div class="ramecek">
<div class="statik"><center>Statistika Návštěvnosti Blogu</center></div>
<div class="statik">Celkem: <?=$poc_celkem?></div> 
<div class="statik">Unikátní IP: <?=$celkem_unikat?></div>
<div class="statik">Za <?=$mes?>: <?=$poc_mesic?></div> 
<div class="statik">Minulý měsic: <?=$minuly_mesic?></div> 
<div class="statik">Tento týden: <?=$poc_tyden?></div> 
<div class="statik">Minulý týden: <?=$minulytyden?></div> 
<div class="statik">Dnes: <?=$poc_dnes?></div> 
<div class="statik">Průměrně za den: <?=$denni_prumer?></div>
</div>
__construct
Profil
A odkiaľ berieš premennú $ip ?
lopik007
Profil
Já to dělal podle návodu, takže nevím, ale nejsem jediný kdo má s tím problém
__construct
Profil
$ip PHP nič nepovie .. (pokiaľ ho nemáš deklarované v tom súbore ktorý za začiatku includuješ o čom pochybujem) takže :
Toto by malo byť unviverzálne riešenie ..
function skutocnaIP(){
    if (!empty($_SERVER['HTTP_CLIENT_IP']))   //zdielaná IP
    {
      $ip=$_SERVER['HTTP_CLIENT_IP'];
    }
    elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))   //proxy
    {
      $ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
    }
    else
    {
      $ip=$_SERVER['REMOTE_ADDR']; // klasika ;-)
    }
}


//edit : ak by Ti to hlásilo chyby tak namiesto !empty použi isset
AM_
Profil
__construct:
namísto !empty leda isset, ty funkce fungují cca opačně.

lopik007:
nešlo by to aspoň trochu zjednodušit? nechce se mi procházet 100 řádků kódu, jsem si jist, že alespoň tušíš, kde přibližně chyba je, alespoň když si otevřeš myAdmina bys měl vidět, zda se to do databáze ukládá a problém je ve výpisu, nebo je problém v uložení.
radvis
Profil *
Proč máš v řádku 8,11 ";"?
8:
='".date("Y-m-d")."';"));


11:

ip='$ip';"
__construct
Profil
AM:
jj dík .. to bol iba preklep
no ale aj tak nechápem "nechce sa mi procházet 100 řádků" - Na prvý pohľad je tá štatisktika podľa IP a ako mu to môže fungovať keď je od nikde do tých dotazov na DB nevkladá ?? Preto som mu tam hodil tú funkciu ..
radvis:
mám taký dojem, že mysql_query zožerie aj dotaz s bodkočiarkou na konci ..
lopik007
Profil
Zde je odkaz na návod: http://crazydog.cz/pro-web/php-scripty/podrobne-statistiky-navstevnosti-v-php/

A teď mi řekněte kde je chyba v mém kódu, a chyba v návodu?

Moderátor Chamurappi: Odkazy vkládej jako odkazy, ne jako zdrojový kód!
radvis
Profil *
To jsem nikdy neviděl:D
__construct
Profil
Vidíš to ?
súbor index.php:
<?php
session_start();
$ip = $_SERVER['REMOTE_ADDR'];
include("./db.php");
include("./navstevnost.php");
?>

všimni si 2. riadok ..
lopik007
Profil
Jo, dnes byl doplněn, a já to opravil, ale stále to nejede
AM_
Profil
lopik007:
ale stále to nejede
asi tomu došel benzín.
Snažně tě prosím, zjisti, kde přesně to nejede, a napiš sem, co to přesně (nedělá) a jakou chybu to hlásí.
Mimochodem, programovat se nedá učit z návodů, jak udělat počítadlo, chce to začít od základů.

__construct:
no ale aj tak nechápem "nechce sa mi procházet 100 řádků"
spíše šlo o to, že tam může mít dalších 150 chyb, sem na fórum by se mělo chodit s konkrétním dotazem na určitou chybu, a ne si vycucat z prstů 100 řádků kódu, zjistit, že to nedělá úplně to, co má, a místo toho, aby si to sám trochu prošel, ty řádky hodit na fórum, aby to za něj udělal někdo jiný. Už nějakou dobu se chystám napsat nějaký návod, jak ladit PHP programy, přesně v těhle případech by se hodil :)
lopik007
Profil
AM:
To je právě to, nehlásí to žádnou chybu, a počítá to jen mou návštěvu za den
radvis
Profil *
a počítá to jen mou návštěvu za den
A nemáš to náhodou na localhostu, že to počítá jen tebe?:D V takovém případě "debuguj" projížděj si postupně treba var_dump($xx); nebo print_r($xxx);
lopik007
Profil
Ne na localhostu to nemám
AM_
Profil
lopik007:
To je právě to, nehlásí to žádnou chybu, a počítá to jen mou návštěvu za den
nemusí to jen hlásit chybu. To, že jsem to zatučnil v textu, neznamená, že to bylo to jediné, co jsem napsal.

AM:
zjisti, kde přesně to nejede, a napiš sem, co to přesně (nedělá)
to znamená, že si otevřeš myadmina, zjistíš, zda se ty návštěvy zapisují do databáze a pak nezapočítávají, nebo se vůbec nezapisují, pak do kódu vložíš pár var_dump(), abys zjistil, které proměnné co obsahují, a za chvíli zjistíš, kde by se mělo dít něco jiného, než se děje.

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:

0