PHP: Брояч за сайт.

Smirnoff

Registered
Здравейте !

Значи правих правих скромното ми сайтче, и стигнах до извода, че немога да си напиша нито намеря брояч който да брои всички посещения и уникалните. Мога да си направя уебагент обаче не ми трябва точно това, пък и мога с обикновенни файлове, а на мен в случая ми трябва нещо с база данни :) .

Ако някой има такива скриптчета го моля да ги сподели , и ще съм наистина благодарен!

:) Мерси от сега :D
 

human

Registered
Код:
<?php
// Нашият файл за посещения;
$counter = "stats.txt";

// Дата на посщението;
$today = getdate();
$month = $today[month];
$mday = $today[mday];
$year = $today[year];
$current_date = $mday . $month . $year;


// Записва посещенията;
$fp = fopen($counter, "a");
$line = $REMOTE_ADDR . "|" . $mday . $month . $year . "\n";
$size = strlen($line);
fputs($fp, $line, $size);
fclose($fp);

// Чете файлът,който брои посещенията;
$contents = file($counter);

// Общо посещенията;
$total_hits = sizeof($contents);

// Общо  уникалните посещенията;
$total_hosts = array();
for ($i=0;$i<sizeof($contents);$i++) {
	$entry = explode("|", $contents[$i]);
	array_push($total_hosts, $entry[0]);
}
$total_hosts_size = sizeof(array_unique($total_hosts));

// Посещенията за деня;
$daily_hits = array();
for ($i=0;$i<sizeof($contents);$i++) {
	$entry = explode("|", $contents[$i]);
	if ($current_date == chop($entry[1])) {
		array_push($daily_hits, $entry[0]);
	}
}
$daily_hits_size = sizeof($daily_hits);

// Уникалните посещения за дена;
$daily_hosts = array();
for ($i=0;$i<sizeof($contents);$i++) {
	$entry = explode("|", $contents[$i]);
	if ($current_date == chop($entry[1])) {
		array_push($daily_hosts, $entry[0]);
	}
}
$daily_hosts_size = sizeof(array_unique($daily_hosts));

?>
<? echo "
Общо посещения:<b> " . $total_hits . "</b><br><br>
Общо уникални посещения: <b> " . $total_hosts_size . "</b><br><br>
Посещения днес: <b> " . $daily_hits_size . "</b><br><br>
Уникални посещения днес: <b>" . $daily_hosts_size;
?>


Със здраве да си го ползваш :p :twisted:


EDIT:Опа демото забравих :) http://bukhum6.freehostia.com/counter.php
 

staf

Registered
И като направиш към двеста посещения брояча бъгва и почва да брои през две три.
 

human

Registered
staf каза:
И като направиш към двеста посещения брояча бъгва и почва да брои през две три.

Е виж демото де.Работи си перфектно.На мене не ми дава никакви грешки... :?
 

Admin

Registered
staf каза:
И като направиш към двеста посещения брояча бъгва и почва да брои през две три.

Това е много възможно.
Файловете се повреждат ако не са заключени за запис.
Няма ли някакъв код с база данни?

По късно ще напиша код за 1-2 брояча.
 

staf

Registered
human каза:
staf каза:
И като направиш към двеста посещения брояча бъгва и почва да брои през две три.

Е виж демото де.Работи си перфектно.На мене не ми дава никакви грешки... :?
Пробвал съм го скрипта и това нещо е ставало от сега да ти каже не е много надежден.По добре ползвай някой с база данни има доста в нета.
 

Admin

Registered
Ето ти код за брояч.

Правиш си една таблица в базата данни с име demobroiach.

Ето ти и готов код ако искаш:
Код:
CREATE TABLE `demobroiach` (
`id` INT( 12 ) NOT NULL AUTO_INCREMENT ,
`data` VARCHAR( 12 ) NOT NULL ,
`chas` VARCHAR( 7 ) NOT NULL ,
`ip` VARCHAR( 15 ) NOT NULL ,
`browser` VARCHAR( 120 ) NOT NULL ,
PRIMARY KEY ( `id` )
) CHARACTER SET = latin1;

След като създадеш слагаш един код в страницата която,
искаш да следиш.

<?php
$ip = getenv("REMOTE_ADDR");
$data= date("d.m.y");
$browser=getenv("HTTP_USER_AGENT");
$chas=date('H:i');
$referer = getenv("HTTP_REFERER");
$site= 'admin.web-tourist.net';//името на твоя сайт

$database='db_demo';//база данни
$user='db_user';//user на базата данни
$password='3i4iesiser';//пас на базата данни
$table='demobroiach';//име на таблицата


mysql_connect(localhost,$user,$password);
mysql_select_db($database) or die( "Има проблем с базата данни");

if (!eregi($site,$referer))

{

$query = "INSERT INTO $table VALUES ('','$data','$chas','$ip','$browser')";
mysql_query($query);

}

$query_broi = "SELECT id FROM $table where data='$data' " ;
$result_broi = mysql_query($query_broi);
$poseshteniq_dnes=mysql_num_rows($result_broi);

echo "Посещения днес: ".$poseshteniq_dnes."<br/>";

$query_unic = "SELECT COUNT(id) AS ipsort FROM $table where data='$data' GROUP by ip" ;
$result_unic = mysql_query($query_unic);
$poseshteniq_unic_dnes=mysql_num_rows($result_unic);

echo "Уникални днес: ".$poseshteniq_unic_dnes."<br/><br/>";

echo "<a href=# target=_blank> Презареди страницата</a><br/><br/>";

echo "<a href=agent.php target=_blank> Всички посещения </a>";

mysql_close();
?>





Правиш в същата папка един файл с име agent.php,
с който да разглеждаш записаното:

<head>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1251">
</head>
<body>

<?php
$data= date("d.m.y");
$database='db_demo';//база данни
$user='db_user';//user на базата данни
$password='3i4iesiser';//пас на базата данни
$table='demobroiach';//име на таблицата


mysql_connect(localhost,$user,$password);
mysql_select_db($database) or die( "Има проблем с базата данни");

$query_broi = "SELECT id FROM $table where data='$data' " ;
$result_broi = mysql_query($query_broi);
$poseshteniq_dnes=mysql_num_rows($result_broi);

echo "Посещения днес: ".$poseshteniq_dnes."<br/>";

$query_unic = "SELECT COUNT(id) AS ipsort FROM $table where data='$data' GROUP by ip" ;
$result_unic = mysql_query($query_unic);
$poseshteniq_unic_dnes=mysql_num_rows($result_unic);

echo "Уникални днес: ".$poseshteniq_unic_dnes."<br/>";





// определяме колко реда да ни показва. В случая 20 на страница.
$broinastranica = 100;

// от коя страница да почне да показва.Може да искаме да е от втора или от последна.
$pageNum = 1;

// ако има получени данни $_GET['page'] ще покаже страницата с номер $_GET['page']
if(isset($_GET['page']))
{
$pageNum = $_GET['page'];
}

//тука определяме кои редове ще се показват - примерно ако $_GET['page']=2
// ще покаже от 20 до 40-ти ред.
$redove = ($pageNum - 1) * $broinastranica;
//заявката ще върне само посочените редове - примерно от 20 до 40 в зависимост от $_GET['page']
$query = " SELECT* FROM $table order by id desc" .
" LIMIT $redove, $broinastranica";
$result = mysql_query($query) ;

echo "<table border=1>";
// print-ваме посочените редове в таблица.
while($row = mysql_fetch_array($result))
{
echo '<tr><td>'.$row['id'].'</td><td>'.$row['data'].'</td><td>'.$row['chas'].'</td><td>'.$row['ip'].
'</td><td>'.$row['browser'].'</td></tr>';
}

echo"</table>";


// проверяваме таблицата колко редове има
$query = "SELECT COUNT(id) AS numrows FROM $table";
$result = mysql_query($query) or die('Error, query failed');
$row = mysql_fetch_array($result, MYSQL_ASSOC);
$numrows = $row['numrows'];


$maxPage = ceil($numrows/$broinastranica);

$self = $_SERVER['PHP_SELF'];
$nomeranastranici = '';

for($page = 1; $page <= $maxPage; $page++)
{
if ($page == $pageNum)
{
$nomeranastranici .= " $page ";
}
else
{
$nomeranastranici .= " <a href=\"$self?page=$page\">$page</a> ";
}
}



// създаване на ликовете [предишна] [следваща]
// както и линковете [първа] и [последна]


if ($pageNum > 1)
{
$page = $pageNum - 1;
$predishna = " <a href=\"$self?page=$page\"> [<<<<<] </a> ";

$parva = " <a href=\"$self?page=1\">[първа]</a> ";
}
else
{
$predishna = ' ';
$parva = ' ';
}

if ($pageNum < $maxPage)
{
$page = $pageNum + 1;
$sledvashta = " <a href=\"$self?page=$page\"> [>>>>>] </a> ";

$posledna = " <a href=\"$self?page=$maxPage\">[последна]</a> ";
}
else
{
$sledvashta = ' ';
$posledna = ' ';
}

// показваме
echo $parva . $predishna . $nomeranastranici . $sledvashta . $posledna;




mysql_close();
?>








демо:
http://admin.web-tourist.net/demo/webagent/index.php
 

human

Registered
admin каза:
Брояча брои само ако влизаш отвън.
Ако се разхождаш из сайта не брои .

Аз като влезнах там, дадох няколко пъти рефреш и от 60-тина закръглих брояча на
Посещения днес: 100
Уникални днес: 10
.Това само с рефреш...
 

vesku

Registered
при вас работи ли си нормално agent.php при мен изкарва грешка в базата данни ама няма такава данните са сащите
 

Smirnoff

Registered
human каза:
Smirnoff каза:
А как да изведа на 1-вата страница Общо всички посещения?

Пак мерси! :?:

Ми слагаш агент.пхп на 1-вата страница..

Не не, не съм обеснил както трябва.
Исках да кажа как да напрая така да изглежда :

"Общо посещения : 30"
така да кажем :)
 

hrischo

Registered
<?php
$ip = getenv("REMOTE_ADDR");
$data= date("d.m.y");
$browser=getenv("HTTP_USER_AGENT");
$chas=date('H:i');
$referer = getenv("HTTP_REFERER");
$site= 'localhost';//името на твоя сайт

$database='demobroiach';//база данни
$user='root';//user на базата данни
$password='hristian';//пас на базата данни
$table='demobroiach';//име на таблицата


mysql_connect(localhost,$user,$password);
mysql_select_db($database) or die( "Има проблем с базата данни");

if (!eregi($site,$referer))

{

$query = "INSERT INTO $table VALUES ('','$data','$chas','$ip','$browser')";
mysql_query($query);

}

$query_broi = "SELECT id FROM $table where data='$data' " ;
$result_broi = mysql_query($query_broi);
$poseshteniq_dnes=mysql_num_rows($result_broi);

echo "Посещения днес: ".$poseshteniq_dnes."<br/>";

$query_unic = "SELECT COUNT(id) AS ipsort FROM $table where data='$data' GROUP by ip" ;
$result_unic = mysql_query($query_unic);
$poseshteniq_unic_dnes=mysql_num_rows($result_unic);
$obshto_dnes=$poseshteniq_dnes+$poseshteniq_unic_dnes;

echo "Уникални днес: ".$poseshteniq_unic_dnes."<br/><br/>";

echo "<a href=# target=_blank> Презареди страницата</a><br/><br/>";

echo "<a href=agent.php target=_blank> Всички посещения </a><br>";

echo "Общо посещения : ".$obshto_dnes."<br/>";
mysql_close();
?>


Ако искаш да е по-пригледно :

$query_broi = "SELECT id FROM $table where data='$data' " ;
$result_broi = mysql_query($query_broi);
$poseshteniq_dnes=mysql_num_rows($result_broi);

echo "Посещения днес: ".$poseshteniq_dnes."<br/>";

$query_unic = "SELECT COUNT(id) AS ipsort FROM $table where data='$data' GROUP by ip" ;
$result_unic = mysql_query($query_unic);
$poseshteniq_unic_dnes=mysql_num_rows($result_unic);
$obshto_dnes=$poseshteniq_dnes+$poseshteniq_unic_dnes;
echo "Уникални днес: ".$poseshteniq_unic_dnes."<br/>";
echo "Общо посещения : ".$obshto_dnes."<br/>";
echo "<a href=# target=_blank> Презареди страницата</a><br/><br/>";
echo "<a href=agent.php target=_blank> Всички посещения </a><br>";
mysql_close();
?>
 

pepo13

Registered
Дава ми грешки...
untitled1.PNG
Админе помогни ми, ти си го писал :lol:
 

jooorooo

Registered
pepo13 каза:
Дава ми грешки...
untitled1.PNG
Админе помогни ми, ти си го писал :lol:

то си пише, грешката е че го пускаш през licalhost, пусни го през IP-то ти :)
 

Горе