RTFM! статьи, советы, скрипты
::Заработок с помощью сайта ::JScript по-русски! ::Все русские мануалы::
МЕНЮ
О САЙТЕ
НОВОСТИ
СТАТЬИ
КНИГИ
АППЛЕТЫ
СВЯЗЬ

СЧЕТЧИКИ
Rambler's Top100
Рейтинг@Mail.ru
Яндекс цитирования

Пишем графический счётчик на PHP с использованием MySQL: шаг 1

Автор: Snaker Сайт: http://php-exec.com     Рейтинг: N/A из 7       <<НАЗАД
   
   В данной статье рассмотрим самое элементарное: подсчёт количествава посещений всего, посещений сегодня, посетителей сегодня и вывод кнопки с этими данными на страницах сайта.
   
   Начнём с разработки MySQL таблиц. Создадим файл bd.php и введём в нём данные подключения к БД MySQL:
   
   Ў bd.php <?
   $dbname='PHP_MySQL_DB';//Имя базы данных
   $dbuser='snaker_php_mysql';//Имя пользователя
   $dbpw='pass_php_mysql';//Пароль
   $dbhost='localhost';//Хост
   //И сразу напишем код для подключения к БД:
   $db=mysql_connect("$dbhost", "$dbuser","$dbpw");
   mysql_select_db("$dbname",$db) or die(mysql_error());
   ?> ^ bd.php
   
   Теперь создамим файл install.php, в котором будет создаваться таблица 'main' (в ней будут хранится все данные).
   В таблице main создадим 5 полей:allvisits - кол-во посетителей всего, определим её как численную(integer) с 15 знаками - int(15), visits - кол-во посещений сегодня, определим её как численную(integer) с 10 знаками -int(10), uniq - кол-во посетителей сегодня, определим её как численную(integer) с 10 знаками -int(10), iplist - список IP адресов посетителей сегодня, присвоим данному полю текстовой параметр - text, dat - сегдняшняя дата, будем записывать её в формате dd.mm.yyyy (т.к. поле date в MySQL такой формат даты не поддерживает, то возмём поле dat varchar(10)).
   
   Ў install.php <?
   require 'bd.php';
   //Инклюдим файл с подключением к БД MySQL.
   mysql_query ("DROP table if exists main");//Удаляем, если существует, таблицу main.
   $sql1 = mysql_query ("CREATE TABLE main (
   `allvisits` int(15) NOT NULL default '0',
   `visits` int(10) NOT NULL default '0',
   `uniq` int(10) NOT NULL default '0',
   `iplist` text NOT NULL default '',
   `dat` varchar(10) NOT NULL default ''
   )
   ");//Создаём таблицу main
   if ($sql1)echo "Таблица main создана";//Проверяем, создалась ли таблица.
   else echo mysql_error();//Если не создалась, выводим ошибку.
   $date = date("d.m.Y");//Определяем сегодняшнюю дату
   mysql_query ("insert into main values (0 ,0, 0, '', '$date');");//Вставляем нулевые значения
   unlink ("install.php");//Удаляем файл install.php, т.к. он нам больше не будет нужен.
   ?>
   ^ install.php
   
   Теперь напишем скрипт, который будет обрабатыват данные, обновлять информацию в БД MySQL, выводить на экран графический счётчик в виде кнопочки. Назовём его index.php.
   
   Ў index.php <?
   require 'bd.php'; //Инключим файл с подключением к БД
   //Функиця для получения IP адреса посетителя. Вникать в неё не надо, там просто перебираются разные способы получения IP адреса. В результате функция возвращает IP адрес посетителя.
   function getIP() {
   if(getenv("HTTP_CLIENT_IP")) {
    $ip = getenv("HTTP_CLIENT_IP");
   } elseif(getenv("HTTP_X_FORWARDED_FOR")) {
    $ip = getenv("HTTP_X_FORWARDED_FOR");
   } else {
    $ip = getenv("REMOTE_ADDR");
   }
   return $ip;
   }
   
   //Функция для проверки IP адреса на уникальность. Ей передаются IP адрес посетителя ($uip) и список IP адресов, разделённых ';' ($ipl, этот список хранится в поле iplist в таблице main). Списко IP адресов $ipl разделяем на массив с IP адресами функцией explode, считая ';' разделителем и перебирая массив мы сравниваем каждый IP адрес из массива с IP адресом посетителя. Если есть совпадение, то функция возвращает значение true (1), а если нет - fales (0).
   function checkIP($ipl, $uip){
   $repeat = 0;
   $iplist = explode(";",$ipl);//Списко IP адресов $ipl разделяем на массив с IP адресами функцией explode, считая ';' разделителем.
   foreach($iplist AS $ip)
    {
    if ($uip == $ip)
    $repeat = 1;
    }//Перебираем массив IP адресов и если находим в нём IP адрес посетителя ($uip), то присваеваем значение переменной $repeat = 1.
   return $repeat;
   }
   
   $uip = getip();//Получаем IP адрес посетителя
   mysql_query ("update main set allvisits=allvisits+1 where 1");//Увеличиваем на единицу кол-во посещений всего
   //Проверим, не наступил ли новый день, т.к. если он наступил, то нужно обнулить поля iplist (списрок IP адресов), uniq (посетителей сегодня), visits (посещений сегодня) и обновить поле date.
   $date = date("d.m.Y");
   $sql = mysql_query ("SELECT * from main where dat = '$date'");
   if (mysql_num_rows($sql)==0)//Значит новый день
   {
    $ip = $uip.";";//Присоеденям к IP адресу разделитель ";"
    mysql_query ("update main set dat='$date', uniq=1, visits=1, iplist='$ip' where 1");//ставим сегодняшнюю дату, обнуляем поля uniq, visits и iplist и сразу записываем 1 посещение, 1 посетителя и его IP адрес.
   }
   else//Если день не новый.
   {
   //Увеличим на единицу знач. посещений сегодня. Считаем поле iplist из таблицы main (SQL запрос был уже выполнен выше) и проверим посетителя на уникальность.
    mysql_query ("update main set visits=visits+1");
    $row = mysql_fetch_array($sql);//Получаем массив значений из таблицы main.
    if (!checkip($row['iplist'], $uip))//Если уникальный, добавим IP адрес в поле iplist, отделив его ";", и увеличим значение поля uniq на единицу.
    mysql_query ("update main set uniq=uniq+1, iplist = CONCAT(iplist, '$uip;')");
   }
   
   //Осталось только вывести кнопочку на экран.
   //Получаем данные uniq, allvisits, visits из MySQL таблицы main:
   $sql = mysql_query ("select uniq, allvisits, visits from main where 1");
   $row = mysql_fetch_array($sql);
   //Так как мы хотим, чтоб статистика выводилась в правой части кнопки, а текст, как мы знаем, пишется с лево на право, то нам нужно добавить пробелы в значения переменных allvisits, uniq, visits так, чтоб вместе с пробелами длина каждой переменной была на всю кнопку. (пробелы мы будет выводить перед цифрами и тогда цифры будут выровнены по левой границе кнопки.) При использовании параметра фонта 1(подробнее расскажу об этом ниже) в строке кнопки шириной 88px 15 символов. Напишем функцию, которая будет добавлять пробелы к переменным, пока их длина не станет равной 15 символам.
   function donormal($string)
   {
    while (strlen($string)<16)$string = " ".$string;
    return $string;
   }
   //Теперь добавляем пробелы в переменные allvisits, visits, uniq
   $visits = donormal($row['visits']);
   $uniq = donormal($row['uniq']);
   $allvisits = donormal($row['allvisits']);
   //Зададим цвета вывода значений в палитре RGB.
   $r1 = 157;//R верхней строчки
   $g1 = 88;//G верхней строчки
   $b1 = 88;//B верхней строчки
   $r2 = 157;//R средней строчки
   $g2 = 88;//G средней строчки
   $b2 = 88;//B средней строчки
   $r3 = 157;//R нижней строчки
   $g3 = 88;//G нижней строчки
   $b3 = 88;//B нижней строчки
   //В переменной $image укажем название файла - картинки кнопки. Файл должен быть формата JPEG
   $img = "s.JPEG";//Скачать мою кнопку можно здесь.
   //Теперь выведем кнопку.
   header("Content-type: image/jpeg");//Говорим броузеру, что тип нашей странички - картинка.
   $image = imagecreatefromjpeg("$img");//Создаём рисунок из файла $img. Также существуют функции imagecreatefromGIF и imagecreatefromPNG. Их нужно использовать соответственно для создания рисунков из файлов формата GIF и PNG.
   //Теперь создадим цвета строк. $color1 - цвет первой строки, $color2 - цвет второй строки, $color3 - цвет третьей строки.
   $color1=ImageColorAllocate($image,$r1, $g1, $b1);
   $color2=ImageColorAllocate($image,$r2, $g2, $b2);
   $color3=ImageColorAllocate($image,$r3, $g3, $b3);
   //Теперь нанесём на кнопку значения, используя функцию imagestring (im, font, x, y, string, color), где im - рисунок (в нашем случае это $image), font - параметр фонта (оптимальный - 1), x - координата x вывода текста, y - координата y вывода текста, string - сам текст, color - цвет текста (в нашем случае это соотв. $color1, $color2, $color3).
   ImageString($image,1,2,3, "$allvisits",$color1);
   ImageString($image,1,2,14, "$visits",$color2);
   ImageString($image,1,2,21, "$uniq",$color3);
   //Выводим кнопку на экран.
   imagejpeg($image);
   ?>
   ^ index.php
   
   Теперь осталось только сделать вывод кнопки на страницах вышего сайта. Для этого вставьте следующий код в то место вашего сайта, где бы вы хотели её видеть: <img src="folder_with_this_script/index.php" width=88 height=31 border=0 alt="Статистика посещений от Snaker'a (php-exec.com)">
   
   Вот и все, это статья заканчивается. Прошу не судить её строго, т.к. во-первых, это моя первая статья, и, во-вторых, - это статья является вступлением в серию статей по написанию счётчика для своего сайта с встроенным анализатором траффика.
   


<<НАЗАД      ОЦЕНИТЬ СТАТЬЮ    ВЕРСИЯ ДЛЯ ПЕЧАТИ>>
Статья прочитана :  раз.




пейкюлю



 
 
 
 
 
pauk ©® 2000-2015. All rights reserved.
При перепечатке ссылка на сайт и указание обязательны.
Мнение администрации сайта не всегда совпадает с мнением автора.
Орфография и пунктуация - авторские.
Администрация не несет никакой ответственности за использование материалов.
.
Protected by Copyscape DMCA Takedown Notice Infringement Search Tool