Autor | Zpráva | ||
---|---|---|---|
lopik007 Profil |
#1 · Zasláno: 23. 4. 2010, 11:00:38
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 |
#2 · Zasláno: 23. 4. 2010, 11:13:27
A odkiaľ berieš premennú $ip ?
|
||
lopik007 Profil |
#3 · Zasláno: 23. 4. 2010, 12:17:06
Já to dělal podle návodu, takže nevím, ale nejsem jediný kdo má s tím problém
|
||
__construct Profil |
#4 · Zasláno: 23. 4. 2010, 12:27:03 · Upravil/a: __construct
$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 |
#5 · Zasláno: 23. 4. 2010, 12:48:06
__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 * |
#6 · Zasláno: 23. 4. 2010, 12:53:10
Proč máš v řádku 8,11 ";"?
8: ='".date("Y-m-d")."';")); 11: ip='$ip';" |
||
__construct Profil |
#7 · Zasláno: 23. 4. 2010, 13:19:01 · Upravil/a: __construct
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 * |
#9 · Zasláno: 23. 4. 2010, 20:18:19
To jsem nikdy neviděl:D
|
||
__construct Profil |
#10 · Zasláno: 23. 4. 2010, 23:24:20
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 |
#11 · Zasláno: 24. 4. 2010, 00:46:43
Jo, dnes byl doplněn, a já to opravil, ale stále to nejede
|
||
AM_ Profil |
#12 · Zasláno: 24. 4. 2010, 10:29:55
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 |
#13 · Zasláno: 24. 4. 2010, 11:07:51
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 * |
#14 · Zasláno: 25. 4. 2010, 12:43:08
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 |
#15 · Zasláno: 26. 4. 2010, 17:26:50
Ne na localhostu to nemám
|
||
AM_ Profil |
#16 · Zasláno: 26. 4. 2010, 20:37:19
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. |
||
Časová prodleva: 14 let
|
0