Autor Zpráva
amos
Profil *
Mám na webu počítadlo které odesílá ip do DB a tím pak zjistím počet návštěv za den,.......atd. Ale nějak mi to přestalo fungovat nevím proč kde co je špatně. Tady jsou scripty:

navstevnost.php

<?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");
  }
}
?>



statistika.php

<?php
include("db.php");
if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { $explode_ip = explode(',',$_SERVER['HTTP_X_FORWARDED_FOR']);
$ip = $explode_ip[0];
}else{
$ip = $_SERVER['REMOTE_ADDR'];
};
/* 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']);
?>

Celkem: <strong><?=$poc_celkem?></strong><br /> Unikátní IP: <strong><?=$celkem_unikat?></strong><br /> Za <?=$mes?>: <strong><?=$poc_mesic?></strong><br /> Minulý měsic: <strong><?=$minuly_mesic?></strong><br /> Tento týden: <strong><?=$poc_tyden?></strong><br /> Minulý týden: <strong><?=$minulytyden?></strong><br /> Dnes: <strong><?=$poc_dnes?></strong><br /> Průměrně za den: <strong><?=$denni_prumer?></strong>



a v index.php mám na začátku
<?php
session_start();
include("./db.php");
include("./navstevnost.php");
?>


Nevím jestli tu je někde nějaká chybka,že to nechce odeslat hodnoty do DB. Kontroloval jsem to a nevím.
Tori
Profil
Jestli jste beze změny použil ten stažený skript, tak v souboru navstevnost.php chybí definice proměnné $ip. Buď zkopírujte řádky 3-7 ze statistika.php, anebo je přesuňte do db.php. (A zapněte si zobrazování všech chyb, jestli tam nejsou použité ještě nějaké nedefinované proměnné, které by mohly ukazovat na jinou chybu).
Keeehi
Profil
a říká něco mysql_error?
echo mysql_error();
(umístit na konec scriptu)
amos
Profil *
je tam nějak moc chyb Odkaz
amos
Profil *
Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) nemuze se pripojit k DB?
Keeehi
Profil
amos:
nemůžete spouštět samotný script návštěvnost, protože vám tam chybí připojení k databázi. To totiž includujete v indexu. Takže dejte include("./db.php"); do navstevnost.php a z indexu ho odstraňte nebo použijete include_once a nechte ho v obou.
amos
Profil *
no asi opraveno,ale pořád to nepřičíta hodnotu do DB jenom u
<?=$poc_celkem?>
a
<?=$poc_mesic?>
to přičte nevím
Keeehi
Profil
A konstrukce <?=$promenna?> má dělat jako co?
Mě osobně to háže syntax error. Nemáš spíš na mysli <?php echo $promenna; ?>

Pokud je mysql_error prázdný a přesto se neděje, to co má, přidej si do scriptu značky (echo "značka: 1";) a rozmísti je do jednotlivých větví podmínek, ať víš, kudy ten script vlastně procházel.
Alphard
Profil
A konstrukce <?=$promenna?> má dělat jako co?
Nemáš spíš na mysli <?php echo $promenna; ?>
Mělo by to být ekvivalentní, alespoň na starších verzích to s povoleným short open tag fungovalo.
amos
Profil *
Takže kde mám všude
<?=$promenna?>
tak to mám změnit na
<?php echo $promenna; ?>
ale to je přece jen u vypisu z DB to nějak neovlivnˇuje to,že mi to nechce zapsat hodnoty do DB.
Keeehi
Profil
amos:
tak znovu: „Pokud je mysql_error prázdný a přesto se neděje, to co má, přidej si do scriptu značky (echo "značka: 1";) a rozmísti je do jednotlivých větví podmínek, ať víš, kudy ten script vlastně procházel.

+ ano, doporučoval bych to přepsat (na echo). U mě (PHP 5.3.3) to nefunguje, tak aby to po upgradu nepřestalo fungovat i tobě.
pcmanik
Profil
amos:
Inak cely ten skript by si mohol prerobit, mas tam zbytocne velke mnozstvo dotazov na databazu.
A namiesto samostatnych tabuliek pre mesiace, host, celkem by som spravil jednu velku tabulku, odkial by si si nasledne vyberal vysledky podla datumu.
Potom nezabudaj, ze session sa stracaju pri opusteni stranky, resp. vypnuti prehliadaca, cize hned prvu podmienku mas zle a mal by si pouzivat cookies.
amos
Profil *
pcmanik:
No bylo by to pěkné,ale zas tokový profík nejsem.
amos
Profil *
Tak jsem zkoušel přidat (echo "značka: 1";) do navstevnost.php
Dal jsem to tu:

<?php
/* Jednodenní kontrola pro menší zátěž serveru */
if($_SESSION['navstevnost'] != date("d-n-y")) {
echo "značka: 1"; ---- To mi ještě vypsalo

  /* 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) {
  echo "značka: 1"; -------- Potom už ne
    /* 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");
  }
}
?>
pcmanik
Profil
amos:
z toho vyplyva ze mas zly ten sql dotaz... stacilo jednoduche mysql_error(), alebo sa ti vzdy vykona else...
A nabuduce sem pls uz nekopiruj cely ten zdrojak, lebo tu zachvilu bude kilometrova stranka :D
amos
Profil *
no jo,ale kde je ta chyba
Keeehi
Profil
vždyť to máš před sebou - Byl dnes už započítán? - ne = proveď kód, a jelikož se kód neprovedl, tak už dneska započítán byl. Co je na tom? Jestli chceš se znovu dneska započítat, budeš se muset odstranit z DB.
amos
Profil *
Keeehi:
Nejsem započitán.Problém bude u ip. V DB mám prázdné políčko u ip. hm?
Tori
Profil
amos:
Je definovaná proměnná $ip ([#2])? Nechte si ten dotaz vypsat echem, jestli se ukládají správná data.

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