Autor Zpráva
lopik007
Profil
Zdravím Vás, moc, ale opravdu moc Vás prosím o pomoc. Dnes jsem si napsal script pro návštěvnost, jenže problém je v tom, že to započítá jen mou návštěvu jednou za den, a ostatních uživatelů ne. Zjistil jsem to tak, že Top-list ukazuje: Dnes: 3 návštěvy, jenže script ukazuje: Dnes: 1 návštěva. Prosím všechny o velkou pomoc, kde ve scriptu který jsem napsal je chyba?

<?php
session_start();
include("./spojeni.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");
  }
}

/* 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="navstevy">
<div style="text-align:center;font-weight:bold;font-size:13px;border-bottom:solid 1px #000000;background-color:#15add0">Návštěvy stránky</div>
<div style="padding: 5px 5px 5px 5px;">
Průměrně za den: <?=$denni_prumer?><br />
Minulý měsic: <?=$minuly_mesic?><br />
Minulý týden: <?=$minulytyden?><br />
Tento týden: <?=$poc_tyden?><br />
Unikátní IP: <?=$celkem_unikat?><br />
Za <?=$mes?>: <td></td><td><?=$poc_mesic?></td><br />
Celkem: <?=$poc_celkem?><br />
Dnes: <?=$poc_dnes?><br />
</div>
</div>
marek094
Profil *
Toplist nepočítá unikátní návštěvy, takže ty "ostatní uživatele" tam nemáš :-) jsi to jen ty!
Taky se mi zdá nereálné aby se návštěvy započítávali jen tobě to je nemožné!
Jinak hezkej script.
lopik007
Profil
marek094:

No započítá se jen když já vstoupím na stránku. V čem je chyba?
lopik007
Profil
Poznal jsem to tak, že Top-list ukazuje více návštěv za den, a script ukazuje pouze jednu návštěvu za den. Zde je screen, aby jste mě pochopili:

Hologos
Profil
Můžu se zeptat, co to jsou "Miny Novinky"?
lopik007
Profil
Hologos:
Tam upravuji texty pro novinky, ale tohle nepatří k tématu. Já vím má tam být i místo y. Již jsem opravil, tohle je starý screen
radas
Profil *
lopik007:
kde je definovana $ip
lopik007
Profil
radas:
Změnil bych svou zprávu, ale nemůžu editovat první zprávu v tématu. Prosím vás o pomoc, i když script funguje, ale vypisuje chybovou hlášku. Která po aktualizaci stránky zmizí. Vůbec nevím proč mi to vypisuje chybu.

Zde je chybová hláška: Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /home/free/own.cz/l/lopik/root/www/admin/inc/statik.php on line 9

A zde je poupravený kód:
<?php
session_start();
include("./spojeni.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 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")."''");
    }
    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");
  }
}

/* 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']);
?>
PostCC
Profil
lopik007:
Je to napsané v té chybové hlášce. Výsledek MySQL_Query, předaný funkci MySQL_Fetch_Assoc() není MySQL Result. A to proto, že na řádku:

$zadnes = mysql_fetch_assoc(mysql_query("SELECT COUNT(*) AS pocet FROM poc_host datum='".date("Y-m-d")."';"));


chybí v SQL příkazu klíčové slovo "WHERE":

$zadnes = mysql_fetch_assoc(mysql_query("SELECT COUNT(*) AS pocet FROM poc_host WHERE datum='".date("Y-m-d")."'"));


Dále - za SQL příkazem ve funkci MySQL_Query() se nepíše středník. Rozdělujte provedení příkazu a zpracování výsledku, tedy např.:

$Res = MySQL_Query("SELECT COUNT(*) AS pocet FROM poc_host WHERE datum='".date("Y-m-d")."'");
$zadnes = MySQL_Fetch_Assoc($Res);


abyste v případě chyby netápal, ve které z funkcí na jediném řádku nastal problém. A pro potřeby ladění aplikace lze zapnout konfigurační direktivu mysql.trace_mode = On, např. pomocí Ini_Set(), aby se chyby vypisovaly přímo do stránky. Samozřejmě v produkci vypnout.

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: