юли 15th, 2009Брояч на посещения
Сега ще ви покажа как да си направите брояч като този в grupata.info. Вижте го вляво, в меню "статистика".
Той показва колко онлайн потребители има в момента, колко уникални посещения, импресии и най-много потребители онлайн има за деня, за миналия ден и общо.
Системата се състои от 1 файл, който ще трябва да добавите във всички файлове, в които искате да се води статистика на посещенията, като ще ви покажа по какъв начин после ще ги изведете.
Така като за начало си създавате база данни, като трябва да добавите следните 2 полета:
CREATE TABLE `visits` (
`impresion_today` int(15) NOT NULL default '0',
`max_online_today` int(5) NOT NULL default '0',
`unique_yesterday` int(10) NOT NULL default '0',
`impresion_yesterday` int(15) NOT NULL default '0',
`max_online_yesterday` int(5) NOT NULL default '0',
`total_max_online` int(10) NOT NULL default '0',
`total_impresion` int(15) NOT NULL default '0',
`today_date` varchar(10) NOT NULL default ",
`date_unique` varchar(20) NOT NULL default ",
`max_unique` int(10) NOT NULL default '0',
`date_online` varchar(20) NOT NULL default "
);CREATE TABLE `ips_visits` (
`ip` varchar(15) NOT NULL default ",
`timestamp` int(15) NOT NULL default '0',
`date` varchar(10) NOT NULL default "
);
След като сте направили това си създавате файл visits.php.
Сложете в него:
<?php
$time_online = 15; // колко време да показва дадено IP за онлайн (в минути)$stats_exits = @mysql_result(mysql_query("SELECT COUNT(*) FROM `visits`"), 0);
if (!$stats_exits)
mysql_query("INSERT INTO `visits` (`today_date`) VALUES ('".date("d.m.Y")."')");$count_ips_today = @mysql_result(mysql_query("SELECT COUNT(*) FROM `ips_visits` WHERE `ip` = '".$_SERVER['REMOTE_ADDR']."' AND `date` = '".date("d.m.Y")."'"), 0);
if ($count_ips_today)
mysql_query("UPDATE `ips_visits` SET `timestamp` = '".(time() + ($time_online * 60))."' WHERE `ip` = '".$_SERVER['REMOTE_ADDR']."' AND `date` = '".date("d.m.Y")."' LIMIT 1");
else
mysql_query("INSERT INTO `ips_visits` (`ip`,`timestamp`,`date`) VALUES ('".$_SERVER['REMOTE_ADDR']."','".(time() + ($time_online * 60))."','".date("d.m.Y")."')");$online_users = @mysql_result(mysql_query("SELECT COUNT(*) FROM `ips_visits` WHERE `date` = '".date("d.m.Y")."' AND `timestamp` > ".time()), 0);
$unique_users = @mysql_result(mysql_query("SELECT COUNT(*) FROM `ips_visits` WHERE `date` = '".date("d.m.Y")."'"), 0);
$unique_total = @mysql_result(mysql_query("SELECT COUNT(DISTINCT `ip`) FROM `ips_visits`"), 0);$date_last = date("d.M.Y");
mysql_query("UPDATE `visits` SET `max_online_today` = '$online_users' WHERE `max_online_today` < '$online_users' LIMIT 1");
mysql_query("UPDATE `visits` SET `total_max_online` = '$online_users', `date_online` = '$date_last' WHERE `total_max_online` < '$online_users' LIMIT 1");
mysql_query("UPDATE `visits` SET `max_unique` = '$unique_users', `date_unique` = '$date_last' WHERE `max_unique` < '$unique_users' LIMIT 1");mysql_query("UPDATE `visits` SET `impresion_today` = `impresion_today` + 1, `total_impresion` = `total_impresion` + 1 LIMIT 1");
$visits = mysql_fetch_object(mysql_query("SELECT * FROM `visits`"));
if (date("d.m.Y") != $visits -> today_date)
{
$new_timestamp = mktime(0,0,0,date("m"),(date("d")-1),date("Y"));
$unique_users_t = @mysql_result(mysql_query("SELECT COUNT(*) FROM `ips_visits` WHERE `date` = '".date("d.m.Y", $new_timestamp)."'"), 0);
mysql_query("UPDATE `visits` SET `impresion_today` = '0', `max_online_today` = '0', `unique_yesterday` = '$unique_users_t', `impresion_yesterday` = '".$visits -> impresion_today."', `max_online_yesterday` = '".$visits -> max_online_today."', `today_date` = '".date("d.m.Y")."' LIMIT 1");
}
?>
Готови сме. Сега този файл, чрез функцията include, трябва да бъде добавен във всички файлове, в които желаете да отчитате посещенията.
Ето пример с файл index.php например:
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=windows-1251" />
<title>Demo</title>
</head>
<body>
<?php
include "visits.php";
?>
<p align="center"><b><u>Статистика за днес:</u></b></p>
<p align="center"><b>Онлайн:</b> <?=$online_users?></p>
<p align="center"><b>Уникални:</b> <?=$unique_users?><br /><b>Импресии:</b> <?=$visits -> impresion_today?><br /><b>Най-много онлайн:</b> <?=$visits -> max_online_today?></p>
<p align="center"><b><u>Статистика за вчера:</u></b></p>
<p align="center"><b>Уникални:</b> <?=$visits -> unique_yesterday?><br /><b>Импресии:</b> <?=$visits -> impresion_yesterday?><br /><b>Най-много онлайн:</b> <?=$visits -> max_online_yesterday?></p>
<p align="center"><b><u>Статистика от пускането на сайта:</u></b></p>
<p align="center"><b>Уникални:</b> <?=$unique_total?><br /><b>Най-много уникални:</b> <?=$visits -> max_unique?> на <?=$visits -> date_unique?><br /><b>Импресии:</b> <?=$visits -> total_impresion?><br /><b>Най-много онлайн:</b> <?=$visits -> total_max_online?> на <?=$visits -> date_online?></p>
</body>
</html>
Разбира се може да промените начина на показване на посещенията, по начин който вие желаете.
Това беше урокът. Надявам се да ви е бил полезен :)
юли 16th, 2009 at 13:16
Браво за урока :) Скоро ще ми се наложи да използвам този урок :)
юли 17th, 2009 at 15:23
Наистина супер е урока пробвах го мн е добро Браво HunteR
юли 18th, 2009 at 21:19
Може ли да направиш да показва
Най-много онлайн на "датата"
Най-много уникални на "датата"
Ше е много полезно.. ще стане по добре скрипта
юли 18th, 2009 at 21:40
Едва ли. Нямам време да ги сложа. Ако имате някакви проблеми, бих могъл да помогна, но нямам време да се занимавам с модифицирането на скрипта.
юли 18th, 2009 at 21:42
Е до е само 2 реда добавяне на код.
Много ти се моля много ми е нужен този скрипт с дата, а може и не само на мен.. :)
юли 18th, 2009 at 21:43
Казах нямам време за модификации върху кода.
юли 19th, 2009 at 19:08
Да наистина не е лошо да се направи това да бъде като една истинска статистика на сайт.
юли 27th, 2009 at 15:44
Имам следните 3 въпроси :
1)Не виждам никаква конекция към базата данни.
2)Полето timestamp за какво точно служи ,защото гледам ,че във всеки урок го ползваш ,но не мога да разбера.Защото в SQL има тип timestamp ,но ти го ползваш като обикновено int поле.
3)Примерно :
$stats_exits = @mysql_result(mysql_query(\"SELECT COUNT(*) FROM `visits`\"), 0);
Тая нула за какво служи накрая ?
В eclipse zen го дава като $row само ,че не мога да разбера какво точно значи.
юли 27th, 2009 at 16:07
1) Изглежда съм забравил кода за конекцията към базата данни. Извинявам се за което.
2) Това, че кръщавам полето timestamp, но използвам тип int не мога да разбера какво те притеснява.
В случая го ползвам за да извеждам колко онлайн потребители има :)
3) Прочети малко повече за mysql_result в php.net
Иначе ще ти обясня за какво служи. Това е реда, който ще бъде избран. 0 е първия ред :)
юли 27th, 2009 at 17:31
3)Да прочетох и разбрах за какво служи.И аз предполагах ,че е за това.
1)Предполагам ,че конекцията е стандартна ,защото нещо не ми вади никаква информаця.
юли 27th, 2009 at 22:07
Еми да. Използваш си mysql_connect и mysql_select_db.
Като чрез първото се свързваш със сървъра, а второто избираш базата данни :)
юли 28th, 2009 at 00:30
Тея неща ги знам.:)
Отново малоумни грешки при преписването.Системата работи.
юли 30th, 2009 at 00:45
Системата работи и то много добре.
Поздрави на създателя и.
Искам да питам, възможно ли е да се изкарва още по подровна статистика, подобно на тиксото. Т.е. да се направи в нея да взима примерно, от референциите на сайта, влизанията от търсачки и използваните ключови думи, от кои страни и градове влизат, и т.н. защото напоследък Тиксото нещо много се ебава и не може да се разчита на него и за това си търся такава система която успешно да замени тиксото. Пробвах я на едно малко сайтче тая система и бачка перфиктно, но аз искам по подробна статистика.
Дали е възможно, някой знае ли къде има, моля да ми помогнете.
август 24th, 2009 at 02:18
Всъщност това не се прави толкова трудно. Ще видя ако правя система версия 2(както правя на системата за анкети :D) може да сложа тези неща. :)
август 26th, 2009 at 14:51
Би ли ме посъветвал за някакъв по простичък брояч.
И само да отбележа че коментарите ти не са достъпни за хора с увредено зрение, кода в картинка е сериозна бариера за тях, делтонист също би се затруднил.
Иначе блога си е супер/
август 26th, 2009 at 17:02
За по-простичък брояч може да погледнеш в Web-Tourist.net.
Във връзка с коментарите ще видя какво мога да направя. Преди не трябваше да се попълва код от картинка, но след като започна постването на спам коментари от ботове, се наложи да сложа някаква защита.
август 28th, 2009 at 07:59
Добавих в кода следното
if (getenv(\'HTTP_CLIENT_IP\')) {
$ip = getenv(\'HTTP_CLIENT_IP\');
} elseif (getenv(\'HTTP_X_FORWARDED_FOR\')) {
$ip = getenv(\'HTTP_X_FORWARDED_FOR\');
} elseif (getenv(\'HTTP_X_FORWARDED\')) {
$ip = getenv(\'HTTP_X_FORWARDED\');
} elseif (getenv(\'HTTP_FORWARDED_FOR\')) {
$ip = getenv(\'HTTP_FORWARDED_FOR\');
} elseif (getenv(\'HTTP_FORWARDED\')) {
$ip = getenv(\'HTTP_FORWARDED\');
} else {
$ip = $_SERVER[\'REMOTE_ADDR\'];
}
и замених $_SERVER[\'REMOTE_ADDR\'] с $ip в кода. Така потребителите от прокси сървърите ще се броят коректно за 1 потребител. Особено важно е за търсачките (Yahoo, AOL и др).
Това го видях някъде преди време – не е моя идеята. :-)
Страхотен урок HunteR! Поздравления!
октомври 3rd, 2009 at 02:04
Къде в сайта да импортна този брояч?
октомври 3rd, 2009 at 13:08
На всякъде където поставиш include "visits.php"; ще ти се води статистика.
Прегледай index.php и вземи необходимите неща :)
февруари 17th, 2010 at 02:02
На мен ми дава грашка в заявката :?