Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > счетчик посещений на PHP и MySql


Автор: americanets 15.10.2006, 16:33
вопрос о счетчике который считал бы количество посещений всего, сегодня и разных сегодня желательно чтоб записывал в базу по структуре что-то вроде 

Код

CREATE TABLE `count` (`all` text, `segodnya` text, `segodnyarazn` text);


чтоб можно было вывести для просмотра

Автор: Gold Dragon 15.10.2006, 17:38
а может структуру поменять, ну типа 
Код

CREATE TABLE `stat` (
  `id` int(11) NOT NULL auto_increment,
  `ip` varchar(15) NOT NULL default '',
  `data` date NOT NULL default '0000-00-00',
  `sum` int(11) NOT NULL default '0',
  PRIMARY KEY  (`id`)
);

а когда нужно, то просто считать нужное соответствующими запросами..

вот как я это делаю
Код

function f_statistika(){
    $ip = f_get_ip(); // функция для получения IP
    $data = date("Y-m-d");
    $z = "SELECT * FROM `stat` WHERE `ip`='".$ip."' AND `data`='".$data."'";
    $r = mysql_query($z);
    if(mysql_num_rows($r)>0){
        $f = mysql_fetch_array($r);
        $id = $f['id'];
        $sum = $f['sum']+1;
        $z = "UPDATE `stat` SET `sum`='".$sum."' WHERE `id`=".$id;
    }else{
        $z = "INSERT INTO `stat` (
         `id`,
         `ip`,
         `data`,
         `sum`
         ) VALUES (
          '',
          '".$ip."',
          '".$data."',
          '1'
          )";
    }
    $r = mysql_query($z);
    // всего просмотров
    $z = "SELECT SUM( `sum` ) AS `sum` FROM `stat`";
    $r = mysql_query($z);
    if(mysql_num_rows($r)>0){
        $f = mysql_fetch_array($r);
        $stat['all_hits'] = $f['sum'];
    }

    // всего уникальных просмотров
    $z = "SELECT DISTINCT `ip` FROM `stat`";
    $r = mysql_query($z);
    $stat['all_host'] = mysql_num_rows($r);

    // просмотров сегодня
    $data = date("Y-m-d");
    $z = "SELECT SUM( `sum` ) AS `sum` FROM `stat` WHERE `data`='".$data."'";
    $r = mysql_query($z);
    if(mysql_num_rows($r)>0){
        $f = mysql_fetch_array($r);
        $stat['hits'] = $f['sum'];
    }
    // уникальных сегодня
    $z = "SELECT DISTINCT `ip` FROM `stat` WHERE `data`='".$data."'";
    $r = mysql_query($z);
    $stat['host'] = mysql_num_rows($r);

    return <<<EOF
        <table width="60%" border="0" cellpadding="1" cellspacing="1" align="center" class="btr">
            <tr class="txt5">
                <td align="center">рейтинг</td>
                <td align="right">{$stat['all_hits']}</td>
            </tr>
            <tr class="btr">
                <td align="center"><img src="images/stat.gif" alt="" border="0"></td>
                <td align="right" class="txt4">
                    {$stat['hits']}<br>
                    {$stat['host']}
                </td>
            </tr>
        </table>
EOF;
}

фунуцию вызываю в самом начале загрузки страницы. Возвращается табличка-счетчик. Ну ты можешь делать как тебе удобно.

в итоге получаются отчёты "Всего", "Всего сегодня", "Уникальных сегодня". 

ЗЫ
если пригодится, то пользуйся смело  smile 

Автор: americanets 15.10.2006, 17:44
пасибо, буду пробовать

Автор: americanets 16.10.2006, 13:40
а как ее вызвать ? smile

Автор: Gold Dragon 16.10.2006, 14:49
ставишь в самое начало страницы 

Код

<?php
$stat = f_statistika();

// ...................

// а где тебе нужно вывести счетчит, ставишь

echo $stat;

// и всё :)
?>

Автор: americanets 16.10.2006, 14:54
ну с этим разобрался, а вот пишет 
Fatal error: Call to undefined function: f_get_ip() in stat.php on line 3
я ее коментирую чтоб убрать выдает просто 0

Добавлено @ 14:58 
просто кое где ошибся, но с    
Код

$ip = f_get_ip();
  все равно ошибка
а так считает, но ip не учитывает

Автор: Gold Dragon 16.10.2006, 15:30
Цитата(americanets @  16.10.2006,  14:54 Найти цитируемый пост)
Fatal error: Call to undefined function: f_get_ip() in stat.php on line 3
Да там просто вызывается функция для определиения IP. Я её не стал писать smile

вот лови
Код

function f_get_ip(){
//*************************************************
// Получение IP:
// выход - xx.xx.xx.xx
//*************************************************
    if ($ip = getenv("HTTP_CLIENT_IP")){
       return $ip;
    }
    if ($ip = getenv("HTTP_X_FORWARDED_FOR")){
       if ($ip == '' || $ip == "unknown"){
          $ip = getenv("REMOTE_ADDR");
       }
       return $ip;
    }
    if ( $ip = getenv("REMOTE_ADDR") ){
    return $ip;
    }
}

вставь это где-нибудь в конце

Автор: americanets 16.10.2006, 20:17
ОК, спасибо  smile 

Автор: americanets 17.10.2006, 16:59
а что еще можно не сложно прикрутить, статистику по OS браузеру и тд ?  

Автор: Gold Dragon 17.10.2006, 18:31
да всё что угодно... сначала определись в желаниях smile

Автор: americanets 18.10.2006, 09:35
ну OS не так уж важно более интереснее былобы посмотреть браузеры 

Автор: americanets 29.10.2006, 14:58
А можно вывести статистику в графическом виде? Например 88х18 

Автор: Blaga 1.11.2006, 03:36
americanets, для просмотра браузеров можно использовать ЯваСкрипт. Можно конечно и в графическом виде выводить. Почитай о создании изображений средствами PHP. smile

Автор: americanets 1.11.2006, 11:17
разбираюсь по тихоньку, спасибо 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)